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.mzph.cn/news/126214.shtml

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

相关文章

【Android知识笔记】换肤专题

换肤其实也属于插件化专题的一个子话题,之所以单独拿出来,是因为它的处理方式比较特殊,相比插件化而言较简单一些。 系统内置的换肤功能支持 - Theme Android 系统中如果想修改应用的背景色,最简单的就是利用以下Theme相关的属性: 使用这些内置的属性可以实现一定程度上…

计算机视觉的相机选型

#你一般什么时候会用到GPT?# 目前市面上的工业相机大多是基于CCD&#xff08;ChargeCoupled Device&#xff09;或CMOS&#xff08;Complementary Metal Oxide Semiconductor&#xff09;芯片的相机。一般CCD制造工艺更加复杂&#xff0c;也会更贵一点&#xff01; 1、CCD工…

django如何连接sqlite数据库?

目录 一、SQLite数据库简介 二、Django连接SQLite数据库 1、配置数据库 2、创建数据库表 三、使用Django ORM操作SQLite数据库 1、定义模型 2、创建对象 3、查询对象 总结 本文将深入探讨如何在Django框架中连接和使用SQLite数据库。我们将介绍SQLite数据库的特点&…

k8spod

pod基本概念 (几种容器) pod 是k8s最小的创建和运行单元 一个pod包含几个容器&#xff0c;1个根容器/父容器/基础容器&#xff0c;一个或者多个应用容器/业务容器&#xff0c;pause容器 pod里面容器共享 network UTS IPC命令空间 k8s 创建的Pod 分为两种&#xff1a; 自主…

Android NDK开发详解之ndk-gdb

Android NDK开发详解之ndk-gdb 要求用法选项 线程支持 NDK 包含一个名为 ndk-gdb 的 Shell 脚本&#xff0c;可以启动命令行原生调试会话。偏好使用 GUI 的用户则应阅读在 Android Studio 中调试这篇文档。 要求 要运行命令行原生调试&#xff0c;必须满足以下要求&#xff1…

C#中LINQtoSQL的设置与连接

目录 一、首次安装LinqToSql类 二、非首次安装LinqToSql类 1.接受原有数据库连接 2.建立新的数据库连接 3.建立本地数据库连接 LINQ&#xff08;Language-Integrated Query&#xff0c;语言集成查询&#xff09;是微软公司提供的一项新技术&#xff0c;它能够将查询功能直…

2023年【熔化焊接与热切割】考试题及熔化焊接与热切割模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年【熔化焊接与热切割】考试题及熔化焊接与热切割模拟考试&#xff0c;包含熔化焊接与热切割考试题答案和解析及熔化焊接与热切割模拟考试练习。安全生产模拟考试一点通结合国家熔化焊接与热切割考试最新大纲及熔…

亲测有效!盘点3款好用的录屏软件

随着社会的发展&#xff0c;视频内容的制作和共享变得比以往任何时候都更重要。无论是录制在线课程、游戏过程&#xff0c;还是制作教程或视频演示&#xff0c;一款好用的录屏软件都能让用户事半功倍。接下来&#xff0c;我们将介绍三款各自适用于不同场景的录屏软件&#xff0…

C# Onnx Ultra-Fast-Lane-Detection-v2 车道线检测

效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Runtime.InteropServices; using System.Text; usi…

科东软件受邀参加2023国家工业软件大会,共话工业软件未来

10月28日&#xff0c;由中国自动化学会主办的2023国家工业软件大会在浙江湖州开幕。大会以“工业软件智造未来”为主题&#xff0c;一批两院院士、千余名专家学者齐聚一堂&#xff0c;共同探讨工业软件领域前沿理论和技术创新应用问题&#xff0c;共同谋划我国工业软件未来发展…

实用篇-Linux

一、Linux介绍 linux特点 免费开源多用户多任务 Linux系统版本分为内核版和发行版 发行版是基于内核版进行扩展&#xff0c;由各个Linux厂商开发和维护&#xff0c;因为我们真正使用linux最终安装的其实是linux的发行版 下面以CentOS为例来学习Linux 二、Linux安装 安装方式…

LiveGBS流媒体平台GB/T28181常见问题-概览中负载信息具体表示什么直播、回放、播放、录像、H265、级联等

LiveGBS常见问题-概览中负载信息具体表示什么直播、回放、播放、录像、H265、级联等 1、负载信息2、负载信息说明3、搭建GB28181视频直播平台 1、负载信息 实时展示直播、回放、播放、录像、H265、级联等使用数目 2、负载信息说明 直播&#xff1a;当前推流到平台的实时视频…

情报、监视和侦察能力在城市作战中的应用发展研究

源自&#xff1a; 防务快讯 “人工智能技术与咨询” 发布 1 近年来的城市作战案例 图1 一名以色列士兵展示了一种为城市作战设计的巡飞弹。 2 ISR不仅仅是传感器&#xff0c;还需要增强感知和打击能力 3 使用无人机蜂群解决 城市作战中的ISR和打击问题 图2 OFFSET项目设想…

「直播回放」使用 PLC + OPC + TDengine,快速搭建烟草生产监测系统

在烟草工业场景里&#xff0c;多数设备的自动控制都是通过 PLC 可编程逻辑控制器来实现的&#xff0c;PLC 再将采集的数据汇聚至 OPC 服务器。传统的 PI System、实时数据库、组态软件等与 OPC 相连&#xff0c;提供分析、可视化、报警等功能&#xff0c;这类系统存在一些问题&…

2023/10/29总结

总结 踩坑记录 写代码的时候遇到了一个错误大概是这样的 io.jsonwebtoken.security.WeakKeyException: The signing keys size is 48 bits which is not secure enough for the HS256 algorithm. The JWT JWA Specification (RFC 7518, Section 3.2) states that keys used…

【Spring MVC】传递参数

前言&#xff1a; 访问不同路径就是在发送不同的请求&#xff0c;在发送请求时&#xff0c;可能会带有一些参数&#xff0c;所以Spring的请求主要是为了学习如何传递参数到后端以及后端如何接收。 在SpringMVC中使用RequestMapping来实现路由映射&#xff0c;也就是浏览器连接…

Linux--jdk、tomcat、环境配置,mysql安装、后端项目搭建

前言 上期我们讲到了安装linux虚拟机&#xff0c;这期我们来讲一下如何使用xshell和xftp在linux系统上搭建我们的单体项目 一、软件的传输 1.1 xftp Xftp是一款功能强大的文件传输软件&#xff0c;用于在本地主机和远程服务器之间进行快速、安全的文件传输。它是由南京帆软科…

2024王道考研计算机组成原理——中央处理器

CPU的运算器其实就是进行固定的数据处理&#xff0c;后面讲的CPU主要侧重的是它的控制器功能 运算器的基本结构 左右两边都是16位&#xff0c;因为寄存器可能位于左右两端的一边(源/目的操作数) A、B两端都要接一堆线 通用寄存器 ALU都在运算器当中 从主存来的数据直接放到…

BLS embedded curves族

1. 引言 以太坊基金会Antonio Sanso 2023年论文 Family of embedded curves for BLS中&#xff0c;展示了源自BLS椭圆曲线的embedded curves。 pairing-friendly curve E E E具有bilinear map e : G 1 G 2 → G T e:\mathbb{G}_1\times \mathbb{G}_2\rightarrow \mathbb{G…

MFC打开控制台的常用方式

工程项目中&#xff0c;想打开控制台的&#xff0c;简单打印日志 &#xff08;1&#xff09;依次打开&#xff1a; 项目配置属性——>生成事件——>后期生成事件&#xff1a;命令行 &#xff08;2&#xff09;输入&#xff1a; editbin /SUBSYSTEM:CONSOLE $(OUTDIR)\$…