目录
核心要点
PHPMailer与PHP mail()函数的比较
安装PHPMailer
使用PHPMailer从本地Web服务器发送邮件
发送包含附件的邮件
故障排除
显示本地化错误消息
使用SMTP
使用POP3检索邮件
结论
关于PHPMailer的常见问题
首页 后端开发 php教程 与phpmailer一起发送PHP中的电子邮件

与phpmailer一起发送PHP中的电子邮件

Feb 08, 2025 am 10:37 AM

PHPMailer:PHP邮件发送的利器

PHPMailer是广受欢迎的开源PHP邮件发送库,自2001年发布以来,一直是PHP开发者发送程序化邮件的首选方案之一,与Swiftmailer等其他流行库并驾齐驱。本文将阐述为何PHPMailer优于PHP内置的mail()函数,并提供代码示例。

Sending Emails in PHP with PHPMailer

核心要点

  • PHPMailer是一个流行的开源PHP邮件发送库,比PHP内置的mail()函数提供更多功能和灵活性,包括面向对象的接口、更轻松的HTML和附件处理,以及使用非本地邮件服务器的能力。
  • PHPMailer可以使用Composer安装,并被WordPress、Drupal和Joomla等流行的PHP内容管理系统使用。
  • 该库提供强大的错误处理机制,能够以40多种语言打印错误消息,并集成了SMTP协议支持以及SSL和TLS身份验证。
  • 除了发送邮件,PHPMailer还支持添加附件、发送HTML或纯文本版本的邮件,以及使用SMTP从非本地服务器发送邮件,但它不支持使用POP3协议从邮件服务器检索邮件。

PHPMailer与PHP mail()函数的比较

在大多数情况下,PHPMailer是PHP内置mail()函数的替代方案,但在许多情况下,mail()函数的灵活性不足以满足需求。

首先,PHPMailer提供面向对象的接口,而mail()函数不是面向对象的。PHP开发者通常不喜欢使用mail()函数发送邮件时创建$headers字符串,因为这需要大量的转义操作。PHPMailer简化了这个过程。使用mail()函数发送附件和基于HTML的邮件时,开发者还需要编写复杂的代码(转义字符、编码和格式化),而PHPMailer使这变得轻松自如。

此外,mail()函数需要本地邮件服务器才能发送邮件,这并不总是容易设置的。如果具备身份验证功能,PHPMailer可以使用非本地邮件服务器(SMTP)。

其他优势包括:

  • 发送邮件失败时,它可以用40多种语言打印各种错误消息。
  • 它集成了SMTP协议支持以及SSL和TLS身份验证。
  • 它可以为非HTML邮件客户端发送邮件的替代纯文本版本。
  • 它拥有一个非常活跃的开发者社区,使其保持安全和最新状态。

PHPMailer也被WordPress、Drupal和Joomla等流行的PHP内容管理系统使用。

安装PHPMailer

可以使用Composer安装PHPMailer:

composer require phpmailer/phpmailer
登录后复制
登录后复制
登录后复制

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

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

composer require phpmailer/phpmailer
登录后复制
登录后复制
登录后复制

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

发送包含附件的邮件

以下是如何使用PHPMailer发送包含附件的邮件的示例:

<?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 = "完整姓名";

// 收件人地址和名称
$mail->addAddress("recepient1@example.com", "收件人姓名");
$mail->addAddress("recepient1@example.com"); // 收件人姓名是可选的

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

// 抄送和密送
$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;
}
?>
登录后复制

在这里,我们附加了两个文件——file.txt(位于与脚本相同的目录中)和images/profile.png(位于脚本目录的images目录中)。

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

故障排除

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

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

邮件错误:无法实例化邮件函数。

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

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

require_once "vendor/autoload.php";

$mail = new PHPMailer;

$mail->From = "from@yourdomain.com";
$mail->FromName = "完整姓名";

$mail->addAddress("recipient1@example.com", "收件人姓名");

// 提供附件的文件路径和名称
$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 "邮件已成功发送";
} catch (Exception $e) {
    echo "邮件错误:" . $mail->ErrorInfo;
}
?>
登录后复制

通常,邮件函数的问题将与缺少邮件服务器设置有关,在这种情况下,error_get_last函数将返回类似以下内容:

print_r(error_get_last());
登录后复制

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

显示本地化错误消息

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

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

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

<code>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
)</code>
登录后复制

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

使用SMTP

您可以使用另一个主机的邮件服务器发送邮件,但这首先需要身份验证。例如,要从Gmail的邮件服务器发送邮件,您需要有一个Gmail帐户。

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

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

composer require phpmailer/phpmailer
登录后复制
登录后复制
登录后复制

Gmail需要通过SMTP进行TLS加密,因此我们相应地进行了设置。在通过SMTP发送之前,您需要找出主机名、端口号、是否需要加密类型以及如果需要身份验证,还需要用户名和密码。请注意,在Gmail上启用双因素身份验证将不允许您使用用户名/密码使用其SMTP。相反,需要额外的配置。

使用远程SMTP而不是本地邮件的一大优势是,如果您使用PHP的mail()函数发送邮件,并将发件人地址域设置为与本地域名(服务器名称)不同的任何内容,则收件人的电子邮件服务器的攻击过滤器会将其标记为垃圾邮件。例如,如果您从主机名为example.com的服务器使用发件人地址name@gmail.com向name@yahoo.com发送邮件,则雅虎的服务器会将其标记为垃圾邮件,或向用户显示一条消息,指示不要信任该邮件,因为邮件的来源是example.com,但它却显示为来自gmail.com。尽管您拥有name@gmail.com,但雅虎无法知道这一点。

使用POP3检索邮件

PHPMailer还允许POP-before-SMTP验证来发送邮件。换句话说,您可以使用POP进行身份验证,并使用SMTP发送邮件。遗憾的是,PHPMailer不支持使用POP3协议从邮件服务器检索邮件。它仅限于发送邮件。

结论

如果您是PHP开发者,几乎不可能避免以编程方式发送邮件。虽然您可以选择Mandrill或SendGrid等第三方服务,但有时这根本不可行,而自己编写邮件发送库更是如此。这就是PHPMailer及其替代方案(Zend Mail、Swift Mailer等)的用武之地。

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

您是否因为PHP库依赖关系而苦恼?观看我们的屏幕录像,了解Composer如何帮助您管理它。

关于PHPMailer的常见问题

什么是PHPMailer?PHPMailer是一个流行的开源PHP库,用于从PHP应用程序发送电子邮件。它提供了一种简单灵活的方式来通过SMTP、mail()或其他电子邮件发送方法发送电子邮件。

如何安装PHPMailer?您可以使用Composer安装PHPMailer,也可以直接从GitHub下载该库。详细的安装说明可以在PHPMailer文档中找到。

PHPMailer是否免费使用?是的,PHPMailer是开源的,并根据LGPL许可证发布,这意味着它可以在开源和商业项目中免费使用。

PHPMailer的系统要求是什么?PHPMailer与PHP 5.5及更高版本兼容。确保您的Web托管环境支持这些PHP版本。

如何使用PHPMailer发送电子邮件?您可以通过创建PHPMailer类的实例、设置必要的属性(如SMTP服务器详细信息和电子邮件内容),然后调用send()方法来使用PHPMailer发送电子邮件。

PHPMailer能否处理电子邮件中的附件?是的,PHPMailer提供方法来向您的电子邮件添加附件。您可以附加来自服务器或远程位置的文件。

什么是SMTP,为什么我应该将其与PHPMailer一起使用?SMTP(简单邮件传输协议)是发送电子邮件的常用方法。将SMTP与PHPMailer一起使用允许您通过远程电子邮件服务器发送电子邮件,从而为电子邮件传递提供更好的控制和可靠性。

我可以用PHPMailer发送HTML电子邮件吗?

是的,PHPMailer允许您发送纯文本和HTML格式的电子邮件。您可以相应地设置消息类型和格式。纯文本电子邮件适用于非HTML邮件客户端。

我可以使用PHPmailer向非HTML邮件客户端发送纯文本电子邮件吗?

是的,PHPMailer允许您发送纯文本电子邮件作为HTML电子邮件的替代方案。您可以相应地设置消息类型和格式。纯文本电子邮件适用于非HTML邮件客户端。

我可以将PHPMailer与非SMTP邮件服务器(如Sendmail)一起使用吗?是的,PHPMailer支持各种电子邮件传输方法,包括SMTP、mail()和其他自定义方法,允许您将其与不同类型的邮件服务器一起使用。

Sending Emails in PHP with PHPMailer

以上是与phpmailer一起发送PHP中的电子邮件的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

在PHP API中说明JSON Web令牌(JWT)及其用例。 在PHP API中说明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、

会话如何劫持工作,如何在PHP中减轻它? 会话如何劫持工作,如何在PHP中减轻它? Apr 06, 2025 am 12:02 AM

会话劫持可以通过以下步骤实现:1.获取会话ID,2.使用会话ID,3.保持会话活跃。在PHP中防范会话劫持的方法包括:1.使用session_regenerate_id()函数重新生成会话ID,2.通过数据库存储会话数据,3.确保所有会话数据通过HTTPS传输。

描述扎实的原则及其如何应用于PHP的开发。 描述扎实的原则及其如何应用于PHP的开发。 Apr 03, 2025 am 12:04 AM

SOLID原则在PHP开发中的应用包括:1.单一职责原则(SRP):每个类只负责一个功能。2.开闭原则(OCP):通过扩展而非修改实现变化。3.里氏替换原则(LSP):子类可替换基类而不影响程序正确性。4.接口隔离原则(ISP):使用细粒度接口避免依赖不使用的方法。5.依赖倒置原则(DIP):高低层次模块都依赖于抽象,通过依赖注入实现。

在PHPStorm中如何进行CLI模式的调试? 在PHPStorm中如何进行CLI模式的调试? Apr 01, 2025 pm 02:57 PM

在PHPStorm中如何进行CLI模式的调试?在使用PHPStorm进行开发时,有时我们需要在命令行界面(CLI)模式下调试PHP�...

框架安全功能:防止漏洞。 框架安全功能:防止漏洞。 Mar 28, 2025 pm 05:11 PM

文章讨论了框架中的基本安全功能,以防止漏洞,包括输入验证,身份验证和常规更新。

如何在系统重启后自动设置unixsocket的权限? 如何在系统重启后自动设置unixsocket的权限? Mar 31, 2025 pm 11:54 PM

如何在系统重启后自动设置unixsocket的权限每次系统重启后,我们都需要执行以下命令来修改unixsocket的权限:sudo...

PHP 8.1中的枚举(枚举)是什么? PHP 8.1中的枚举(枚举)是什么? Apr 03, 2025 am 12:05 AM

PHP8.1中的枚举功能通过定义命名常量增强了代码的清晰度和类型安全性。1)枚举可以是整数、字符串或对象,提高了代码可读性和类型安全性。2)枚举基于类,支持面向对象特性,如遍历和反射。3)枚举可用于比较和赋值,确保类型安全。4)枚举支持添加方法,实现复杂逻辑。5)严格类型检查和错误处理可避免常见错误。6)枚举减少魔法值,提升可维护性,但需注意性能优化。

See all articles