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

时间:2016-01-08 17:45:50

标签: php email phpmailer sendmail swiftmailer

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

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

这不是一回事吗?

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

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

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

典型的bin/console doctrine:generate:crud --filter=Tasks二进制文件(例如来自后缀的二进制文件)即使通过PHP的sendmail函数调用,也会打开与localhost的同步连接并执行完整的SMTP事务。这可能意味着它实际上更慢比直接使用SMTP - 实际上the postfix docs recommend using SMTP to localhost优先于sendmail,如果您正在寻找性能。特别是,当使用SMTP发送大量邮件时,您可以从keepalive中受益。

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

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

答案 2 :(得分:0)

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