![](/img/trans.png)
[英]What is the difference between mail, smtp and sendmail drivers from Laravel?
[英]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.