Swift_Transport_MailTransport 类自 5.4.5 版本起已弃用,并将在 6.0 中删除。请改用 Sendmail 或 SMTP 传输

问题描述 投票:0回答:2

我正在使用 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() 函数了?

php swiftmailer
2个回答
1
投票

首先,关于 swift 邮件网站的弃用:

建议用户尽可能不要使用此交通工具 因为许多插件功能不能与 这种传输是由于 PHP 本身的内部接口造成的。

这种传输的错误报告水平非常弱, 再次由于 PHP 内部 mail() 函数的限制。你会得到 发送的结果是全有或全无。

如果您需要100%兼容的解决方案,您需要检查

php.ini
设置和操作系统平台http://php.net/manual/en/mail.configuration.php

对于 Unix 平台,使用

->setCommand
值调用
ini_get("sendmail_path")
就足够了。对于 Windows 平台支持需要选中
smtp
选项。


0
投票

就是这样完成的。请注意,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
© www.soinside.com 2019 - 2024. All rights reserved.