【发布时间】:2019-05-31 10:00:13
【问题描述】:
我在使用 PS1.6 附带的 Swiftmailer 版本发送邮件时遇到问题
Swift 错误:SMTP 连接无法启动 [ssl://mail.wineofthemonth.co.za:465]:fsockopen 返回错误号 0 和错误字符串 ''
这是因为从 PHP 5.6 开始,verify_peer 选项默认设置为 true。
现在我找到了有关如何将验证对等设置为 false 的各种说明:
$https['ssl']['verify_peer'] = FALSE;
$https['ssl']['verify_peer_name'] = FALSE;
问题是在 Prestashop 中使用的 Swiftmailer 版本中没有地方设置它。
所以我的问题是,在 class/mail.php 或其他任何地方我会将 verify_peer 设置为 false 吗?
这是我认为与此相关的 mail.php 中的一行:
$connection = new Swift_Connection_SMTP(
$configuration['PS_MAIL_SERVER'],
$configuration['PS_MAIL_SMTP_PORT'],
$configuration['PS_MAIL_SMTP_ENCRYPTION'] == 'ssl' ? Swift_Connection_SMTP::ENC_SSL : (($configuration['PS_MAIL_SMTP_ENCRYPTION'] == 'tls' ? Swift_Connection_SMTP::ENC_TLS : Swift_Connection_SMTP::ENC_OFF))
);
还有一个 sendMailtest 方法可以更加清晰:
public static function sendMailTest($smtpChecked, $smtpServer, $content, $subject, $type, $to, $from, $smtpLogin, $smtpPassword, $smtpPort = 25, $smtpEncryption)
{
$result = false;
try {
if ($smtpChecked)
{
$smtp = new Swift_Connection_SMTP($smtpServer, $smtpPort, ($smtpEncryption == 'off') ?
Swift_Connection_SMTP::ENC_OFF : (($smtpEncryption == 'tls') ? Swift_Connection_SMTP::ENC_TLS : Swift_Connection_SMTP::ENC_SSL));
$smtp->setUsername($smtpLogin);
$smtp->setpassword($smtpPassword);
$smtp->setTimeout(5);
$swift = new Swift($smtp, Configuration::get('PS_MAIL_DOMAIN'));
}
else
$swift = new Swift(new Swift_Connection_NativeMail(), Configuration::get('PS_MAIL_DOMAIN'));
$message = new Swift_Message($subject, $content, $type);
if ($swift->send($message, $to, $from))
$result = true;
$swift->disconnect();
} catch (Swift_ConnectionException $e) {
$result = $e->getMessage();
} catch (Swift_Message_MimeException $e) {
$result = $e->getMessage();
}
return $result;
}
或者,在任何 conf 或 ini 文件中,我可以将 verify_peer 设置为 false 吗?
Prestashop 1.6.1.1 到 1.6.1.4 受到影响。
【问题讨论】:
-
你找到解决办法了吗?
标签: php smtp ssl-certificate prestashop-1.6 swiftmailer