大多数CMS(例如Joomla php mail()默认使用php mail() ,如果需要,可以select将其更改为SMTP 。 我将在Debian 7的同一VPS中设置networking服务器和邮件服务器(Postfix)。我想了解的是:
交付声誉:将使用PHP邮件()与SMTP有什么区别的交付率? 据我所知,Postfix将在传送电子邮件时与互联网上的其他服务器进行通信时使用SMTP协议,因此可以安全地假设,如果电子邮件是通过php邮件发送到postfix还是从本地主机smpt发送? 这两种方法中的任何一种对电子邮件信誉的影响是否有影响?
性能负载:发送邮件时,php邮件和SMTP之间是否有任何性能差异? 假如我发送的电子邮件数量是10000个,那么哪种方法会占用最多的资源(或时间)呢? 我的假设是,这两个可以花费一点时间,如:PHP邮件编译电子邮件头等,和SMTP每次进行连接。 哪一个消耗最多的服务器资源?
安全问题:当我search这两者之间的区别时,许多网站说,与PHP邮件的安全问题,因为黑客可以上传PHP脚本发送垃圾邮件。 但是我也可以看到SMTP的另一个安全问题,因为SMTP用户名和密码都以configuration文件的forms存储在不安全的文本中。 既然这两种方法都存在安全问题,那么在任何方面都比另一种权重要好吗?
首选项:如果我可以在我的服务器上同时设置phpmail和SMTP,那么我是否应该为了某种原因而优先使用一个呢? 我的意思是,如果我可以在我的服务器中使用SMTP,那么我应该尝试使用SMTP而不是phpmail吗?
背景:我的机器将成为一个简单的networking服务器,使用postfix来发送来自Joomla的邮件,通讯和根邮件从各种服务。
交付声誉:将使用PHP邮件()与SMTP有什么区别的交付率? 据我所知,Postfix将在传送电子邮件时与互联网上的其他服务器进行通信时使用SMTP协议,因此可以安全地假设,如果电子邮件是通过php邮件发送到postfix还是从本地主机smpt发送? 这两种方法中的任何一种对电子邮件信誉的影响是否有影响?
没有相关的所有。 Postfix可以通过mail()和SMTP 接收邮件。 处理完后,postfix将通过SMTP 发送 。
性能负载 :发送邮件时,php邮件和SMTP之间是否有任何性能差异? 假如我发送的电子邮件数量是10000个,那么哪种方法会占用最多的资源(或时间)呢? 我的假设是,这两个可以花费一点时间,如:PHP邮件编译电子邮件头等,和SMTP每次进行连接。 哪一个消耗最多的服务器资源?
基准吧! 我没有关于此的任何数据。
在mail()命令中,PHP调用sendmail命令,程序将你的电子邮件放在maildrop队列目录的文件中。 拾取守护进程扫描该目录,并将电子邮件移动到清理守护进程。
在SMTP中,PHP通过SMTPd创build与你的postfix服务器的连接。 SMTP完成后,SMTPd会检查邮件是否允许。 如果允许发送电子邮件,它将把它传递给清理守护进程。
来源: postfix的官方文档
安全问题:当我search这两者之间的区别时,许多网站说,与PHP邮件的安全问题,因为黑客可以上传PHP脚本发送垃圾邮件。 但是我也可以看到SMTP的另一个安全问题,因为SMTP用户名和密码都以configuration文件的forms存储在不安全的文本中。 既然这两种方法都存在安全问题,那么在任何方面都比另一种权重要好吗?
正如@Tutul在另一个答案中所说的,你可能期望一些垃圾邮件脚本使用mail()来发送垃圾邮件。 是的,这是在php中阻止邮件命令的考虑之一。
然而,一个原则是: 一旦成功将脚本放到你的networking邮件服务器上,他可以通过邮件()和SMTP发送PHP的使用能力发送邮件 。
在php本身,没有保护来限制垃圾邮件发送者可以调用多less个SMTP连接或邮件()。 放置防御线的地方是MTA(后缀)。 不幸的是,你不能限制从mail()命令调用的传入邮件。 但是,您可以限制可以通过SMTP连接发送多less个请求。 Policyd或postfwd可以帮助后缀油门。
注意:以上说明是关于收到邮件时的油门过程。 当然,你可以在发送电子邮件时加油。 例如,您每分钟限制20封电子邮件到@ gmail.com,以避免GMAIL黑名单守护程序阻止您。 请参阅有关Postfix性能调优的文档
恕我直言,我更喜欢通过SMTP发送电子邮件。 您可以使用MTA作为垃圾邮件爆发的附加保护。 您可能不得不在PHP中处理另一个邮件队列@Sanmain在另一个答案虽然:)
你说的对其他人无关紧要,但对你来说肯定是重要的,因为当通过SMTP Postfix提交时,可能会因为你无法控制的原因而拒绝接受你的信息。 这意味着你将不得不使用你自己的交付队列,并添加其他膨胀代码。 实际上你会做Postfix的工作。
有些人可能会说, mail()也可能会失败,但它本身的工作就像将消息写入文件一样简单。 换句话说,没有什么可以打破的。
底线:除非你绝对需要使用SMTP,使用你的系统的邮件。
在很多情况下,垃圾邮件脚本是在自动扫描程序在您的Web应用程序中发现漏洞之后通过自动过程上传的。 这些垃圾邮件脚本几乎总是使用php mail()函数而不是SMTP。 如果有人要攻击你的服务器,并从configuration文件抓取密码,那么你已经失去了城堡。 但是,在过时的CMS等的大量自动化攻击中,垃圾邮件脚本只是使用mail() 。 所以我build议你在你的postfix中禁用mail() ,并且只使用经过身份validation的SMTP。