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,一经查实,立即删除!

相关文章

蓝牙服务:优化体验,提高连接效率

文章目录 1. 对蓝牙连接进行优化2. 设备配对的缓存机制3. 优化蓝牙连接的稳定性 蓝牙技术已经成为我们生活中不可或缺的一部分&#xff0c;我们使用它进行音频传输、数据传输、设备连接等等。然而&#xff0c;有时蓝牙连接会让用户感到非常困扰&#xff0c;比如连接速度缓慢、连…

【Android知识笔记】换肤专题

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

关于CMMI3.0评估的相关事宜

CMMI研究院发布了关于CMMI3.0评估的相关事宜&#xff0c;具体安排如下&#xff1a; 1、于2023年4月6日正式发布 CMMI 3.0。 2、于2023年第三季度&#xff08;7至9月&#xff09;计划确定具体方式和时间表&#xff0c;以获取CMMI3.0资质&#xff08;具体安排根据委员会确定&am…

计算机视觉的相机选型

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

Vue.js 之 透传 Attributes

Vue.js 之 透传 Attributes 1.Attributes 继承​2.对 class 和 style 的合并​3.v-on 监听器继承​4.深层组件继承​5.禁用 Attributes 继承​6.多根节点的 Attributes 继承​7.在 JavaScript 中访问透传 Attributes​ 1.Attributes 继承​ “透传 attribute”指的是传递给一个…

catkin build说明

与catkin_make不同&#xff0c;可以参考catkin build – Build Packages中文翻译版手册catkin build 默认会生成.private文件夹。链接时候可能出现失败的问题。catkin参数配置之软连接模式 改为如下模式即可 catkin init catkin config --merge-devel catkin buildBug Issue1…

django如何连接sqlite数据库?

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

springboot知识点补充

系列文章目录 文章目录 系列文章目录前言一、springboot基础二、使用步骤1.引入库2.读入数据 前言 一、springboot基础 知识点补充 二、使用步骤 1.引入库 代码如下&#xff08;示例&#xff09;&#xff1a; import numpy as np import pandas as pd import matplotlib.pyp…

前端开发规范和注意点

*补救原则&#xff1a;出现异常时第一时间退出&#xff0c;并给出足够的提示错误信息。 *开发流程&#xff1a; *常规发布版本 常规发布版本频率为每月会有两个发布窗口&#xff08;一大一小&#xff1a;上半月小版本、下半月大版本&#xff09;。 例如2019年4月的常规发布版本…

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;它能够将查询功能直…

linux常见问题解析

Linux 是一款商业上最受欢迎的操作系统之一&#xff0c;由于其稳定性和安全性&#xff0c;它已成为服务器运维中的主流。虽然 Linux 具有很多优点&#xff0c;但仍然有一些常见问题和挑战需要解决。 本文将梳理一些常见的 Linux 运维问题&#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;共同谋划我国工业软件未来发展…

java初始化list的几种方式

在Java中初始化List有以下几种常见的方式: 使用Arrays.asList()静态方法: List<Integer> list1 Arrays.asList(1, 2, 3);使用List接口的实现类ArrayList的构造函数: List<String> list2 new ArrayList<>();使用Collections.singletonList() String obj…

实用篇-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;当前推流到平台的实时视频…