繁体   English   中英

SwiftMailer,PhpMailer等:mail()和sendmail之间的区别

[英]SwiftMailer, PhpMailer, etc: Difference between mail() and sendmail

我经常读到PHP的mail() -Function在内部使用sendmail

那么为什么像SwiftMailer,PhpMailer等邮件库让我们有机会在mail()sendmail之间做出选择?

这不是一回事吗?

没听过有人说这不是一回事!

请帮忙,因为我真的很困惑!

在类似unix的系统上, mail()确实使用sendmail,但在Windows上根本不是这种情况(根本没有sendmail,因此mail()通过SMTP发送)。

Swiftmailer等人的真正好处是,他们提供了一个围绕发送电子邮件的OOP包装器,以便生成您的电子邮件内容生成(正确生成MIME包络并正确获取标头可能很棘手,尤其是当用户输入需要转义时),而且实际的传输机制也是抽象的(因此您可以使用邮件提供商的API替换SMTP或sendmail传输与自定义传输,而无需更改所有代码)。

即使通过PHP的mail功能调用,典型的sendmail二进制文件(例如来自postfix的二进制文件)也会打开与localhost的同步连接并执行完整的SMTP事务。 这可能意味着它实际上比直接使用SMTP 更慢 - 事实上如果您正在寻找性能,后缀文档建议使用SMTP优先于localhost而不是sendmail。 特别是,使用SMTP发送大量邮件时,您可以从keepalive中受益。

一个技巧是你可以将一个额外的参数传递给sendmail(特别是-O DeliveryMode=b )告诉它异步操作,在这种情况下它立即返回,使你的邮件发送响应更快,但因为PHP没有设置为了解决这个问题,你将失去处理可能发生的错误的能力,因此不建议这样做。 您可以通过使用这些选项自己调用sendmail二进制文件,或者通过在$additional_parameters参数中传递它来使用它。

一般来说,PHPMailer中的mail和sendmail选项之间并没有什么区别,尽管如果你想使用除了PHP设置使用的sendmail二进制文件以外的sendmail二进制文件可能会有用。

Ussualy我使用mail()函数。 但有时我需要通过非本地SMTP服务器发送电子邮件。 当然我可以改变php.ini中的设置,但我认为更好的是使用一些电子邮件库。 我的选择是Swift梅勒。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM