php实现发送电子邮件功能,使用PHPMailer

PHPMailer 可能是最流行的用于发送电子邮件的开源 PHP 库。它于 2001 年首次发布,从那时起,除了Swiftmailer等还有一部分人喜欢使用之外,PHPMailer已成为 PHP 开发人员最喜欢的发送电子邮件的方式的php库。

在本文中,也顺便讨论以下为什么应该使用 PHPMailer 而不是 PHP 的mail()函数,并且我们将展示一些有关如何使用该库的代码示例。

PHPMailer 是 PHP mail() 函数的替代品吗?

在大多数情况下,PHPMailer 只是内置 PHP mail()函数的替代品,但在许多其他情况下,该mail()函数根本不够灵活,无法实现您所需要的功能。

首先,PHPMailer提供了面向对象的接口,而PHPMailermail()并不是面向对象的。$headersPHP 开发人员通常讨厌在使用该函数发送电子邮件时创建字符串mail(),因为它们需要大量转义。PHPMailer 使这变得轻而易举。开发人员在使用该功能时还需要编写脏代码(转义字符、编码和格式)来发送附件和基于 HTML 的电子邮件mail(),而 PHPMailer 使这一切变得轻松。

此外,该mail()功能需要本地邮件服务器来发送电子邮件,这并不总是很容易设置。如果您有身份验证,PHPMailer 可以使用非本地邮件服务器 (SMTP)。

其他优点包括:

  • 当发送电子邮件失败时,它可以打印40多种语言的各种错误消息。

  • 它集成了 SMTP 协议支持以及基于 SSL 和 TLS 的身份验证。

  • 它可以为非 HTML 电子邮件客户端发送替代的纯文本版本的电子邮件。

  • 它有一个非常活跃的开发者社区,可以保证其安全和最新。

PHPMailer 还被流行的 PHP 内容管理系统(例如 WordPress、Drupal 和 Joomla)使用。

安装 PHPMailer

您可以使用 Composer 安装 PHPMailer :

composer require phpmailer/phpmailer

如果你没有composer 可以通过以下链接直接下载源代码使用:

https://github.com/PHPMailer/PHPMailer

使用 PHPMailer 从本地 Web 服务器发送电子邮件

下面是使用 PHPMailer 从本地 Web 服务器发送电子邮件的最简单示例:

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require_once "vendor/autoload.php";

//PHPMailer对象
$mail = new PHPMailer(true); //构造函数中的参数 true 启用异常

//来自电子邮件地址和姓名
$mail->From = "from@yourdomain.com";
$mail->FromName = "Full Name";

//地址和姓名
$mail->addAddress("recepient1@example.com", "Recepient Name");
$mail->addAddress("recepient1@example.com"); //Recipient name is optional

//收件人要回复的地址
$mail->addReplyTo("reply@yourdomain.com", "Reply");

//抄送和密件抄送
$mail->addCC("cc@example.com");
$mail->addBCC("bcc@example.com");

//发送 HTML 或纯文本电子邮件
$mail->isHTML(true);

$mail->Subject = "主题文本";
$mail->Body = "<i>HTML 格式的邮件正文</i>";
$mail->AltBody = "这是电子邮件内容的纯文本版本";

try {
    $mail->send();
    echo "消息发送成功";
} catch (Exception $e) {
    echo "邮件错误:" . $mail->ErrorInfo;
}

PHP 文件中的代码和注释应该足够清晰,能够解释所发生的一切;您可以看到我们在哪里设置邮件主题、发件人电子邮件地址、收件人电子邮件地址、HTML 邮件正文以及处理错误。

发送带有附件的电子邮件

以下是如何使用 PHPMailer 发送带有附件的电子邮件的示例:

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require_once "vendor/autoload.php";

$mail = new PHPMailer;

$mail->From = "from@yourdomain.com";
$mail->FromName = "Full Name";

$mail->addAddress("recipient1@example.com", "Recipient Name");

//提供文件路径和附件名称
$mail->addAttachment("file.txt", "File.txt");        
$mail->addAttachment("images/profile.png"); //文件名可选

$mail->isHTML(true);

$mail->Subject = "主题文本";
$mail->Body = "<i>HTML 格式的邮件正文</i>";
$mail->AltBody = "这是电子邮件内容的纯文本版本";

try {
    $mail->send();
    echo "Message has been sent successfully";
} catch (Exception $e) {
    echo "Mailer Error: " . $mail->ErrorInfo;
}

在这里,我们附加两个文件 - file.txt,它位于与脚本相同的目录中,以及images/profile.png,它位于images脚本目录的目录中。

要将附件添加到电子邮件中,我们只需addAttachment通过传递文件路径作为参数来调用 PHPMailer 对象的函数。为了附加多个文件,我们需要多次调用它。

故障排除

在我们的两个示例中,我们使用 PHPMailer 的Exception 类进行调试(https://github.com/PHPMailer/PHPMailer/blob/master/src/Exception.php),因此抛出的任何错误都将帮助我们调试可能发生的任何问题。我们还在PHPMailer 构造函数true中添加了参数(https://github.com/PHPMailer/PHPMailer/blob/master/src/PHPMailer.php#L819),以输出更高级别、更具描述性的异常。

根据我们使用的系统,我们最常看到的错误可能与mail()在后台运行该函数有关:

邮件程序错误:无法实例化邮件功能。

如果我们需要有关错误的更多详细信息,我们还可以在 catch 子句中添加如下内容:

print_r(error_get_last());

通常,邮件功能的问题与缺少邮件服务器设置有关,在这种情况下,该error_get_last功能将返回如下内容:

Array (
    [type] => 2
    [message] => mail(): Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set()
    [file] => OUR_PATH \vendor\phpmailer\phpmailer\src\PHPMailer.php
    [line] => 863
)

这是我们最常遇到的问题,使用 SMTP 就可以轻松解决。

显示本地化错误消息

$mail->ErrorInfo可以返回 43 种不同语言的错误消息。

要以不同的语言显示错误消息,请将language目录从 PHPMailer 的源代码复制到项目目录。

例如,要以俄语返回错误消息,请使用以下方法调用将 PHPMailer 对象设置为俄语:

$mail->setLanguage("ru");

您还可以将自己的语言文件添加到该language目录中。

使用 SMTP

您可以使用其他主机的邮件服务器发送电子邮件,但为此您首先需要进行身份验证。例如,要从 Gmail 的邮件服务器发送电子邮件,您需要拥有 Gmail 帐户。

SMTP 是邮件客户端用来向邮件服务器发送电子邮件发送请求的协议。邮件服务器验证电子邮件后,会将其发送到目标邮件服务器。

以下是从您所在域的 Gmail 邮件服务器发送电子邮件的示例。您不需要本地服务器来运行代码。我们将使用 SMTP 协议:

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

require_once "vendor/autoload.php";

$mail = new PHPMailer(true);

//启用SMTP调试。
$mail->SMTPDebug = 3;                              
//设置PHPMailer使用SMTP。
$mail->isSMTP();            
//设置SMTP主机名                       
$mail->Host = "smtp.gmail.com";
//如果 SMTP 主机需要身份验证才能发送电子邮件,则将此设置为
$mail->SMTPAuth = true;                          
//提供用户名和密码 
$mail->Username = "name@gmail.com";                
$mail->Password = "super_secret_password";                          
//如果SMTP需要TLS加密则设置它
$mail->SMTPSecure = "tls";                          
//设置要连接的TCP端口
$mail->Port = 587;                                  

$mail->From = "name@gmail.com";
$mail->FromName = "Full Name";

$mail->addAddress("name@example.com", "Recepient Name");

$mail->isHTML(true);

$mail->Subject = "Subject Text";
$mail->Body = "<i>Mail body in HTML</i>";
$mail->AltBody = "This is the plain text version of the email content";

try {
    $mail->send();
    echo "Message has been sent successfully";
} catch (Exception $e) {
    echo "Mailer Error: " . $mail->ErrorInfo;
}

Gmail 需要通过 SMTP 进行 TLS 加密,因此我们进行了相应的设置。在通过 SMTP 发送之前,您需要查明主机名、端口号、加密类型(如果需要),如果需要身份验证,您还需要用户名和密码。请注意,在 Gmail 上启用双因素身份验证将不允许您通过用户名/密码使用其 SMTP。相反,将需要额外的配置(http://webapps.stackexchange.com/questions/31297/gmail-rejects-smtp-password-with-2-factor-authentication)

与本地邮件相比,使用远程 SMTP 的一大优势是,如果您使用 PHP 的mail()功能发送电子邮件,并将from地址域设置为本地域名(服务器名称)以外的任何内容,那么收件人的电子邮件服务器的攻击过滤器将对其进行标记作为垃圾邮件。例如,如果您从具有实际主机名example.com且from地址name@gmail.com为 的name@yahoo.com服务器发送一封电子邮件,则雅虎的服务器会将其标记为垃圾邮件或向用户显示一条消息,要求用户不要信任该电子邮件,因为该邮件的来源是,但example.com它本身却存在仿佛来自gmail.com。尽管您拥有name@gmail.com,但雅虎无法发现这一点。

使用 POP3 检索电子邮件

PHPMailer 还允许POP-before-SMTP验证来发送电子邮件(http://en.wikipedia.org/wiki/POP_before_SMTP)。换句话说,您可以使用 POP 进行身份验证并使用 SMTP 发送电子邮件。遗憾的是,PHPMailer 不支持使用 POP3 协议从邮件服务器检索电子邮件。它仅限于发送电子邮件。

结论

如果您是一名 PHP 开发人员,那么几乎不可能避免以编程方式发送电子邮件。虽然您可能会选择 Mandrill 或 SendGrid 等第三方服务,但有时这并不是一个选择,而滚动您自己的电子邮件发送库则更是如此。这就是 PHPMailer 及其替代品(Zend Mail、Swift Mailer 等)的用武之地。

您可以在存储库 wiki或官方文档中了解该库的 API 。

  • 存储库 wiki:https://github.com/PHPMailer/PHPMailer/wiki

  • 官方文档:http://phpmailer.github.io/PHPMailer/文章来源地址https://www.toymoban.com/diary/php/401.html

到此这篇关于php实现发送电子邮件功能,使用PHPMailer的文章就介绍到这了,更多相关内容可以在右上角搜索或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

原文地址:https://www.toymoban.com/diary/php/401.html

如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用
如何在 PHP 中获取当前日期
上一篇 2023年10月15日 14:47
下一篇 2023年10月15日 17:40

相关文章

  • PHP 使用ThinkPHP实现电子邮件发送示例

    在我们很多的程序中都需要发送邮件去提示用户一些相关信息,应用的范围还是很广的,比如:登录验证需要验证码,后台管理系统中有变更需要发送邮箱提示等,而且邮件的发送相较于短信发送成本更低,是 免费 的!! 那么要实现邮件发送需要做以下操作: 我这边使用的

    2024年02月13日
    浏览(37)
  • 使用Python实现发送Email电子邮件【第19篇—python发邮件】

    导入必要的模块 : 导入 smtplib 用于处理 SMTP 功能的模块,以及从 email 模块导入构建电子邮件消息所需的各个组件。 定义 send_email 函数 : 创建一个名为 send_email 的函数,该函数接受 SMTP 服务器详细信息、发件人和收件人信息、主题、内容和附件等参数。 格式化发件人地址

    2024年02月03日
    浏览(55)
  • 网工应用层:电子邮件Email、SMTP协议与使用Telnet发送电子邮件

    参考资料: https://www.bilibili.com/video/BV1c4411d7jb?p=72vd_source=e66dd25b0246f28e772d75f11c80f03c 湖科大的高军老师做的计算机网络课,去年选修的计网全靠高老师,生动,举例丰富,配套实验课,无废话纯干货,单推一波! 电子邮件(E-mail)是一种用电子手段提供信息交换的通信方式,是

    2024年02月14日
    浏览(63)
  • 一篇文章带你了解Java发送邮件:使用JavaMail API发送电子邮件的注意事项、发送附件等

    作者:Stevedash 发表于:2023年8月13日 15点48分 来源:Java 发送邮件 | 菜鸟教程 (runoob.com) 电子邮件在现代通信中扮演着至关重要的角色,而在Java编程中,我们可以利用JavaMail API来方便地实现发送电子邮件的功能。本篇博客将向您介绍如何使用JavaMail API来发送电子邮件,以及一些

    2024年02月13日
    浏览(49)
  • Python发送电子邮件及图像办公文档处理

    结合自身经验和内部资料总结的Python教程,每天3章,1个月就能全方位的完成Python的学习并进行实战开发。加油吧!卷起来! 全部文章请访问专栏:《Python全栈教程(0基础》

    2024年02月13日
    浏览(47)
  • 基于 ESP32 通过 SMTP 服务器 来发送电子邮件信息

    电子邮件在全球范围内被用作数字通信的重要组成部分。电子邮件主要用于官方通信目的,因为它最方便、成本效益高、保存记录、覆盖全球且环保。电子邮件是一种非常快捷的通信方式,只是您需要稳定的互联网连接。 在这个项目中,我们将使用ESP32开发板发送电子邮件(

    2024年02月07日
    浏览(58)
  • Python办公自动化 -- Python发送电子邮件和Outlook的集成

    Python办公⾃动化是利⽤Python编程语⾔来创建脚本和程序,以简化、加速和⾃动化⽇常办公任务和⼯作流程的过程。它基于Python的强⼤功能和丰富的第三⽅库,使得能够处理各种办公任务,如⽂档处理、数据分析、电⼦邮件管理、⽹络通信等等。 要使⽤Python发送电⼦邮件,可以

    2024年02月20日
    浏览(46)
  • 一个月学通Python(十二):Python发送电子邮件及图像办公文档处理

    结合自身经验和内部资料总结的Python教程,每天3章,1个月就能全方位的完成Python的学习并进行实战开发。加油吧!卷起来! 全部文章请访问专栏:《Python全栈教程(0基础》

    2024年02月13日
    浏览(50)
  • Python 自动化指南(繁琐工作自动化)第二版:十八、发送电子邮件和短信

    原文:https://automatetheboringstuff.com/2e/chapter18/ 检查和回复电子邮件是一项巨大的时间消耗。当然,你不能只写一个程序来帮你处理所有的邮件,因为每封邮件都需要它自己的回应。但是,一旦你知道如何编写可以发送和接收电子邮件的程序,你仍然可以自动完成大量与电子邮件

    2023年04月08日
    浏览(43)
  • ASP.NET基于cs的电子邮件简单收发系统设计与实现(源代码+论文)

    电子邮件作为互联网中交换信息广泛的通信工具之一,如今都已被广大用户接受。 早期的电子邮件只是从一个计算机终端向另外一个计算机终端传送文本信息,而现在的电子邮件不仅可以发送文本信息,还可以传送声音、图片、文档等多种信息。很多邮件邮件客户端软件不断

    2024年02月08日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包