php收发邮件的多种方法?

1、添加扩展:

# 第一种:
composer require php-imap/php-imap
# 第二种:
composer require phpmailer/phpmailer

2、这里采用第二种方式:

<?php
declare(strict_types=1);namespace App\Controller\v1\email;use App\Controller\AbstractController;
use PhpImap\Exception;
use PhpImap\Mailbox;
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;/*** Desc: 电子邮件相关 */
class EmailController extends AbstractController
{public const imapServer = '{imap.qq.com:993/imap/ssl}'; // QQ 邮箱的 IMAP 服务器地址public const imapUsername = '11***039@qq.com'; // 您的 QQ 邮箱地址public const imapPassword = '***';  // 您的 QQ 邮箱密码public const attachmentPath = BASE_PATH . '/storage/email/'; // 您的 附件 保存目录/*** Desc: 方法一 邮件发送与接收 -- 如果乱码需要配置 GB2312  UTF-8 * Date: 2023-10-31 18:38* @return \Psr\Http\Message\ResponseInterface*/public function receiveMailWithAttachments(){$params = $this->request->post();$imapServer = $params['imapServer'] ?? self::imapServer; // QQ 邮箱的 IMAP 服务器地址$smtpServer = $params['smtpServer'] ?? self::imapServer; // QQ 邮箱的 smtp 服务器地址$imapUsername = $params['imapUsername'] ?? self::imapUsername; // 您的 QQ 邮箱地址$imapPassword = $params['imapPassword'] ?? self::imapPassword; // 您的 QQ 邮箱密码var_dump($imapServer, $smtpServer, $imapUsername, $imapPassword);$mail = new PHPMailer(true);try {//Server settings$mail->SMTPDebug = SMTP::DEBUG_SERVER;                      //Enable verbose debug output$mail->isSMTP();                                            //Send using SMTP$mail->Host = $smtpServer;//'smtp.example.com';                     //Set the SMTP server to send through$mail->SMTPAuth = true;                                   //Enable SMTP authentication$mail->Username = $imapUsername;//'user@example.com';                     //SMTP username$mail->Password = $imapPassword;                               //SMTP password$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;            //Enable implicit TLS encryption$mail->Port = 465;                                    //TCP port to connect to; use 587 if you have set `SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS`//测发送 -- 成功$mail->setFrom($imapUsername, 'Mailer');$mail->addAddress('28***511@qq.com', 'John Doe');$mail->Subject = 'PHPMailer SMTP test';$mail->Body = 'This is a test email message';if (!$mail->send()) {echo 'Message could not be sent.' . "\n";echo 'Mailer Error: ' . $mail->ErrorInfo . "\n";} else {echo 'Message has been sent' . "\n";}$msg_id = $mail->getLastMessageID();echo "LastMessageID => " . $msg_id . "\n";//测收件$inbox = imap_open($imapServer, $imapUsername, $imapPassword);$result = imap_search($inbox, 'UNSEEN');foreach ($result as $mail_id) {$structure = imap_fetchstructure($inbox, $mail_id);for ($i = 0; $i < count($structure->parts); $i++) {if ($structure->parts[$i]->ifdparameters) {foreach ($structure->parts[$i]->dparameters as $object) {if (strtolower($object->attribute) == 'filename') {$filename = $object->value;$file_data = imap_fetchbody($inbox, $mail_id, (string)($i + 1));$file_mime = imap_fetchmime($inbox, $mail_id, (string)($i + 1));$file_text = imap_fetchtext($inbox, $mail_id);$file_structure = imap_fetchstructure($inbox, $mail_id);// 处理附件内容...var_dump('读取1 file:[' . $mail_id . ']', $filename, $file_mime, $file_text, $file_structure);// 将附件保存到指定目录file_put_contents(self::attachmentPath . $filename, $file_data);}}}}}imap_close($inbox);} catch (\Throwable $e) {echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";var_dump($e->getLine() . ' ' . $e->getMessage());}return response_api(200, 'success');}/** 方法二 邮件接收* @throws Exception*/public function receiveMailWithAttachmentsImap(){$params = $this->request->post();$imapServer = $params['imapServer'] ?? self::imapServer; // QQ 邮箱的 IMAP 服务器地址$smtpServer = $params['smtpServer'] ?? self::imapServer; // QQ 邮箱的 smtp 服务器地址$imapUsername = $params['imapUsername'] ?? self::imapUsername; // 您的 QQ 邮箱地址$imapPassword = $params['imapPassword'] ?? self::imapPassword; // 您的 QQ 邮箱密码$attachmentPath = $params['attachmentPath'] ?? self::attachmentPath; // 您的附件存放地址var_dump($imapServer, $smtpServer, $imapUsername, $imapPassword);$mailbox = new PHPMailer(true);$mailbox->isSMTP();$mailbox = new Mailbox($imapServer, $imapUsername, $imapPassword, $attachmentPath);$mailIds = $mailbox->searchMailbox('UNSEEN'); // 搜索未读邮件var_dump('-------------2--------------', $mailIds);foreach ($mailIds as $mailId) {$email = $mailbox->getMail($mailId);// 获取邮件主题、发件人、正文等信息$subject = $email->subject;//正文text内容$from = $email->fromName;//发送者 **@qq.com$textHtml = $email->textHtml;//正文html内容$date = $email->date;//收件时间$getAttachments = $email->getAttachments();//附件数组$fromAddress = $email->fromAddress;//来件者地址名称 **@qq.com$fromName = $email->fromName;//来件者姓名var_dump($subject);var_dump($from);var_dump($textHtml);var_dump($date);var_dump($getAttachments);var_dump($fromAddress);var_dump($fromName);// 处理附件
//            foreach ($getAttachments as $attachment) {
//                $filename = $attachment->name;
//                $filePath = $attachment->filePath;
//
//                // 将附件保存到指定目录file_put_contents($attachmentPath . $filename, $contents);
//            }// 在这里可以执行你的逻辑,例如将邮件信息写入数据库或者进行其他处理}}}

方法二结果如图所示:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/176854.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎样利用 AI 大模型,辅助研发管理与效能提升?

AI 大模型已经逐渐渗透到各行各业的应用场景中&#xff0c;在软件研发领域也不例外。在软件研发领域&#xff0c;从需求分析到软件设计&#xff0c;从软件开发到测试&#xff0c;以及最后发布上线&#xff0c;AI 在各个环节都发挥着重要作用。10 月 21 日&#xff0c;思码逸首席…

计算机从内存中读取数组元素

在计算机中&#xff0c;我们可以把内存看成是一些排列好的格子&#xff0c;每个格子对应一个内存地址&#xff0c;那么数据会分散的存储在不同的格子中&#xff1a; 对于数组&#xff0c;计算机会在内存中为其申请一段连续的空间&#xff0c;并且会记下索引为0处的内存地址&…

图像特征Vol.1:计算机视觉特征度量|第二弹:【统计区域度量】

目录 一、前言二、统计区域度量2.1&#xff1a;图像矩特征2.1.1&#xff1a;原始矩/几何矩2.1.2&#xff1a;中心距2.1.3&#xff1a;归一化的中心矩2.1.4&#xff1a;不变矩——Hu矩2.1.5&#xff1a;OpenCv实现矩特征及其应用 2.2&#xff1a;点度量特征2.3&#xff1a;全局直…

Jmeter之JSR223

一、JSR223组件 JSR是Java Specification Requests的缩写,意思是Java规范提案。JSR已成为Java界的一个重要标准. JSR223其实包含了有好几种组件,但是其用法都是一致的,并且都是执行一段代码&#xff0c;主要分类如下&#xff1a; JSR223 PreProcessor JSR223 Timer JSR223 S…

【二叉树经典题目】

根据二叉树创建字符串 本题的关键在于什么情况要省略括号&#xff0c;什么情况不能省略&#xff1a; 左右为空可以省略括号 左不为空&#xff0c;右为空可以省略括号左为空,右不为空不能省略括号 class Solution { public://1.左右为空可以省略括号//2.左不为空&#xff0c;右…

初识HTML超文本标记语言

文章目录 前端简介引入前端三剑客什么是HTML&#xff1f;超文本传输协议前戏HTTP超文本传输协议1.什么是HTTP协议2.四大特性3.数据格式4.响应状态码 基于HTTP协议搭建HTMLHTML简介HTML文档结构head常见标签1.meta 定义网页源信息(很多配置)2.style内部支持编写CSS代码3.link引入…

SpringCloud(二) Eureka注册中心的使用

在SpringCloud(一)中,我们学会了使用RestTemplate进行远程调用,但是在调用user-service时候需要在order-service中发送http请求,请求中需要书写对应微服务的ip和端口号,十分不方便,如果此时有多个user-service实例的话,就不知道调用哪个了(除非每次调用的时候都对ip和端口号进行…

论文-分布式-并发控制-并发控制问题的解决方案

目录 参考文献 问题 解法与证明 易读版本 参考文献 Dijkstra于1965年发表文章Solution of a Problem in Concurrent Programming Control&#xff0c;引出并发系统下的互斥(mutual exclusion)问题&#xff0c;自此开辟了分布式计算领域Dijkstra在文中给出了基于共享存储原子…

sqlite3 关系型数据库语言 SQL 语言

SQL(Structured Query Language)语言是一种结构化查询语言,是一个通用的,功能强大的关系型数据库操作语言. 包含 6 个部分: 1.数据查询语言(DQL:Data Query Language) 从数据库的二维表格中查询数据,保留字 SELECT 是 DQL 中用的最多的语句 2.数据操作语言(DML) 最主要的关…

易点天下受邀参与云栖大会,以AIGC重塑出海营销新范式

10月31日&#xff0c;2023云栖大会在杭州云栖小镇拉开帷幕。与往年不同&#xff0c;今年的云栖大会以“计算&#xff0c;为了无法计算的价值”为主题&#xff0c;与国际潮流科技大会组织方式接轨&#xff0c;通过云计算、人工智能、产业创新三大主题馆40000平科技展&#xff0c…

redis缓存穿透

redis缓存穿透 模拟一个缓存穿透的环境&#xff1a; redis缓存穿透1. 准备一个GET请求并且在第一次访问的时候将数据写入缓存2. 再次访问的时候首先判断缓存是否命中3. 命中了直接返回&#xff0c;未命中重建缓存1. 缓存空对象2. 布隆过滤器 1. 准备一个GET请求并且在第一次访问…

avi怎么转mp4?

avi怎么转mp4&#xff1f;如今市面上涌现了各种多样的视频格式&#xff0c;其中AVI作为一种音频视频交错格式&#xff0c;虽然使用较少但相对常见。它的优点在于占用空间较小&#xff0c;但画面质量并不是很出色。然而&#xff0c;AVI格式也存在一个明显的缺点&#xff0c;即兼…

柯桥专升本学校,自考本科文凭的价值如何?

自考本科文凭的价值如何&#xff1f; 自考本科学历是通过独立学习和考试获得的一种本科学历。对于自考本科学历的价值&#xff0c;很多人感到困惑&#xff0c;那么究竟自考本科学历有多大的价值呢? 首先&#xff0c;在就业市场上&#xff0c;自考本科学历具有一定的竞争力。随…

VBA技术资料MF77:组合所选范围中的所有形状

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。我的教程一共九套&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的入门&#xff0c;到…

横屏签字板手写签名并旋转90°转为横屏显示base64

手写签名并旋转90转为横屏显示base64 base64 data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAApsAAAF3CAYAAADq/IAAAAAAAXNSR0IArs4c6QAAIABJREFUeF7t3W3MPlldH/CvwLK7wEKNoiABZLvYiBqIdJGnQlor9gVBaAtJmzQsoI2wgKD4hqVNmrD7ohWhPFRSIgaKO0XTS8AVLb4AIVtFnaSiMPSktxoyVVWFxAF…

我的云栖大会之旅:见证云计算创新的15年

云栖大会&#xff0c;曾经是一次不可思议的科技之旅&#xff0c;却如今已见证了我对云计算世界的15年关注和发展。第一次踏上云栖大会之旅&#xff0c;我记得是在2009年。那时的云计算还是一个新生事物&#xff0c;而云栖大会正是其中的奠基石。 我清楚地记得那个炎热的夏天&am…

OpenCV标定演示,及如何生成标定板图片

标定的程序在官方的源码里有&#xff0c; opencv-4.5.5\samples\cpp\tutorial_code\calib3d\camera_calibration 很多小白不知道怎么跑起来&#xff0c;这个也怪OpenCV官方&#xff0c;工作没做完善&#xff0c;其实的default.xml是要自己手动改的&#xff0c;输入的图片也要…

【QT】鼠标常用事件

新建项目 加标签控件 当鼠标进去&#xff0c;显示【鼠标进入】&#xff0c;离开时显示【鼠标离开】 将QLable提升成自己的控件&#xff0c;然后再去捕获 添加文件 改继承的类名 提升类 同一个父类&#xff0c;可以提升 效果 现在代码就和Qlabel对应起来了。 在.h中声明&…

Linux———— 运算命令

Shell与其他编程语言一样&#xff0c;支持多种类型的运算符&#xff0c;包括&#xff1a; 算术运算符&#xff1a;用于执行数学运算&#xff0c;例如加法、减法、乘法和除法。 关系运算符&#xff1a;用于比较两个值之间的关系&#xff0c;例如相等、大于、小于等。 布尔运算…