我正在使用 SwiftMailer 类使用 php mail() 函数或 SMTP 发送邮件,具体取决于我的应用程序的配置(开发或生产)。我的代码如下所示:
// Default mailer: php mail() function
$this->transport = \Swift_MailTransport::newInstance();
// If a SMTP host is defined
if (isset($_SITE['site_smtp_host'])) {
$this->transport = \Swift_SmtpTransport::newInstance($_SITE["site_smtp_host"], 587)
->setUsername($_SITE["site_smtp_user"])
->setPassword($_SITE["site_smtp_pass"]);
}
自 SwiftMailer 5.4.5 起,我收到此弃用通知:
异常:未知错误(16384):Swift_Transport_MailTransport 该类自 5.4.5 版本起已弃用,并将在 6.0 中删除。 请改用 Sendmail 或 SMTP 传输。
我应该像使用
Swift_SendmailTransport
一样使用 Swift_MailTransport
吗?它会在相同的环境中工作吗?它也使用 php mail() 函数吗?如果没有,是不是就不能再使用 SwiftMailer 的 php mail() 函数了?
首先,关于 swift 邮件网站的弃用:
建议用户尽可能不要使用此交通工具 因为许多插件功能不能与 这种传输是由于 PHP 本身的内部接口造成的。
这种传输的错误报告水平非常弱, 再次由于 PHP 内部 mail() 函数的限制。你会得到 发送的结果是全有或全无。
如果您需要100%兼容的解决方案,您需要检查
php.ini
设置和操作系统平台http://php.net/manual/en/mail.configuration.php
对于 Unix 平台,使用
->setCommand
值调用 ini_get("sendmail_path")
就足够了。对于 Windows 平台支持需要选中 smtp
选项。
就是这样完成的。请注意,Sendmail 路径在所有服务器上并不相同。
// Get the Sendmail path
$sendmailPath = ini_get('sendmail_path');
$sendmailPath = ($sendmailPath === false || $sendmailPath === '') ? '/usr/sbin/sendmail -bs' : $sendmailPath;
// Create the transport method
$transport = new \Swift_SendmailTransport($sendmailPath);
$mailer = \Swift_Mailer::newInstance($transport); // 5.6 or...
$mailer = new \Swift_Mailer($transport); // ...6.2
// Now compose and send your email