搜索
首页后端开发php教程与phpmailer一起发送PHP中的电子邮件

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
unset()和session_destroy()有什么区别?unset()和session_destroy()有什么区别?May 04, 2025 am 12:19 AM

Thedifferencebetweenunset()andsession_destroy()isthatunset()clearsspecificsessionvariableswhilekeepingthesessionactive,whereassession_destroy()terminatestheentiresession.1)Useunset()toremovespecificsessionvariableswithoutaffectingthesession'soveralls

在负载平衡的情况下,什么是粘性会话(会话亲和力)?在负载平衡的情况下,什么是粘性会话(会话亲和力)?May 04, 2025 am 12:16 AM

stickysessensureuserRequestSarerOutedTothesMeServerForsessionDataConsisterency.1)sessionIdentificeAssificationAssigeaSsignAssignSignSuserServerServerSustersusiseCookiesorUrlModifications.2)一致的ententRoutingDirectSsssssubsequeSssubsequeSubsequestrequestSameSameserver.3)loadBellankingDisteributesNebutesneNewuserEreNevuseRe.3)

PHP中有哪些不同的会话保存处理程序?PHP中有哪些不同的会话保存处理程序?May 04, 2025 am 12:14 AM

phpoffersvarioussessionsionsavehandlers:1)文件:默认,简单的ButMayBottLeneckonHigh-trafficsites.2)Memcached:高性能,Idealforsforspeed-Criticalapplications.3)REDIS:redis:similartomemememememcached,withddeddeddedpassistence.4)withddeddedpassistence.4)databases:gelifforcontrati forforcontrati,有用

PHP中的会话是什么?为什么使用它们?PHP中的会话是什么?为什么使用它们?May 04, 2025 am 12:12 AM

PHP中的session是用于在服务器端保存用户数据以在多个请求之间保持状态的机制。具体来说,1)session通过session_start()函数启动,并通过$_SESSION超级全局数组存储和读取数据;2)session数据默认存储在服务器的临时文件中,但可通过数据库或内存存储优化;3)使用session可以实现用户登录状态跟踪和购物车管理等功能;4)需要注意session的安全传输和性能优化,以确保应用的安全性和效率。

说明PHP会话的生命周期。说明PHP会话的生命周期。May 04, 2025 am 12:04 AM

PHPsessionsstartwithsession_start(),whichgeneratesauniqueIDandcreatesaserverfile;theypersistacrossrequestsandcanbemanuallyendedwithsession_destroy().1)Sessionsbeginwhensession_start()iscalled,creatingauniqueIDandserverfile.2)Theycontinueasdataisloade

绝对会话超时有什么区别?绝对会话超时有什么区别?May 03, 2025 am 12:21 AM

绝对会话超时从会话创建时开始计时,闲置会话超时则从用户无操作时开始计时。绝对会话超时适用于需要严格控制会话生命周期的场景,如金融应用;闲置会话超时适合希望用户长时间保持会话活跃的应用,如社交媒体。

如果会话在服务器上不起作用,您将采取什么步骤?如果会话在服务器上不起作用,您将采取什么步骤?May 03, 2025 am 12:19 AM

服务器会话失效可以通过以下步骤解决:1.检查服务器配置,确保会话设置正确。2.验证客户端cookies,确认浏览器支持并正确发送。3.检查会话存储服务,如Redis,确保其正常运行。4.审查应用代码,确保会话逻辑正确。通过这些步骤,可以有效诊断和修复会话问题,提升用户体验。

session_start()函数的意义是什么?session_start()函数的意义是什么?May 03, 2025 am 12:18 AM

session_start()iscucialinphpformanagingusersessions.1)ItInitiateSanewsessionifnoneexists,2)resumesanexistingsessions,and3)setsasesessionCookieforContinuityActinuityAccontinuityAcconActInityAcconActInityAcconAccRequests,EnablingApplicationsApplicationsLikeUseAppericationLikeUseAthenticationalticationaltication and PersersonalizedContentent。

See all articles

热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

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

热工具

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具