php - 用 mail、sendmail 和 smtp 在 PHP 中发送电子邮件有什么区别?

标签 php

我听说所有这些方法都是用 PHP 发送电子邮件的有效方法。

它们的优缺点是什么?

最佳答案

这三个选项并不完全相同,假定第一个表示 mail() 函数。

使用mail() 函数通常调用本地邮件注入(inject)器,通常是MTA 提供的二进制程序,实际上称为“sendmail”。 mail() 的问题在于它是一个非直接的界面,其中包含许多没有很好记录的陷阱。这是因为它模仿(IMO 很糟糕)对 Unix CLI mail 命令的调用。

您可以自己调用本地注入(inject)器,但这一点记录得更不充分。无论如何,您也可以调用 mail(),因为后者就是这样做的。

但是,使用 SMTP 会带来一系列问题。如果有接受和转发邮件的本地 MTA,那么这是一个不错的解决方案。如果没有,您将必须弄清楚应该发送给哪个主机。这要么是确定应该由哪个外部主机进行转发,要么是您自己进行实际的 MX 查找。您还需要了解 SMTP 协议(protocol)并能够处理出于任何原因的拒绝。您必须决定如何处理重试发送的需要。

自己执行 SMTP 也存在无法将电子邮件发送与发送电子邮件的原因分离的问题。如果出现延迟或问题,您的页面将看起来卡住了。使用本地注入(inject)器将之前的问题交给了 MTA;您所做的只是将电子邮件排队等待发送。但这样一来,您就不必担心重新发送之类的事情了。

这三种解决方案也无法帮助您组装消息,例如丰富的内容、备用内容和附件。您必须自己完成所有这些(并添加正确的 header !)。

通常的建议是找到一个可以为您完成所有这些工作、功能强大且具有良好 API 的库。常用的是 PHP Mailer。这个库的优点是它还进行所有的消息组装,以及弄清楚如何进行传递。但它的主要优势在于它只是发送消息,尝试 mail() 和本地 SMTP,如果必须的话,甚至远程 SMTP。一切都是透明的。

关于php - 用 mail、sendmail 和 smtp 在 PHP 中发送电子邮件有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9508730/

相关文章:

php - 我相信关于如何将信息插入数据库进行更新的查询存在错误

php - MySQL WHERE something = $something 和 $something = 默认情况下的每个值

即使使用 while() 和 array() 之后,PHP 类也仅返回一行

javascript - Google reCaptcha 响应 "Uncaught (in promise) null"

javascript - 持久性 XSS 和非持久性 XSS 之间的主要区别和定义

php - $this->post codeigniter 不适用于rest api

php - 如何获得子项的宽度,以便我可以将 block 居中

php - 数据库设计,网站的两类用户

php:将毫秒转换为日期

php - 如何在 phpMyAdmin 中将默认时间戳设置为 +1 个月