我成功地使用Mandrill从我的CodeIgniter站点发送邮件,配置如下:
$config['mailtype'] = "html";
$config['protocol'] = 'smtp';
$config['smtp_host'] = 'smtp.mandrillapp.com';
$config['smtp_user'] = 'user';
$config['smtp_pass'] = 'password';
$config['smtp_port'] = '587';
$this->email->initialize($config);
但是Mandrill不想做交易电子邮件,所以我需要迁移到SparkPost
以下是他们的指示:https://support.sparkpost.com/customer/en/portal/articles/1988470-smtp-connection-problems
我尝试了这个配置:
$config['mailtype'] = "html";
$config['protocol'] = 'smtp';
$config['smtp_host'] = 'smtp.sparkpostmail.com';
$config['smtp_user'] = 'user';
$config['smtp_pass'] = 'password';
$config['smtp_port'] = '587';
$this->email->initialize($config);
但没有邮件发送到哪里,没有错误。所以我尝试在主机中添加"tls":
$config['smtp_host'] = 'tls://smtp.sparkpostmail.com';
我得到了这个错误:
消息:fsockopen():SSL操作失败,代码为1。OpenSSL错误消息:
错误:1408F10B:SSL例程:SSL3_GET_RECORD:版本号错误
文件名:libraries/Email.php
线路编号:1950
我在端口2525上也出现了同样的错误。
以下是我在本地MAMP服务器上phpinfo中的openssl部分:
已启用OpenSSL支持
OpenSSL库版本OpenSSL 0.9.8zg 14
2015年7月OpenSSL头版本OpenSSL 0.9.8r 2011年2月8日
但我在Debian服务器上也出现了同样的错误,phpinfo:
已启用OpenSSL支持
OpenSSL库版本OpenSSL 1.0.1e 2013年2月11日
OpenSSL头版本OpenSSL 1.0.1e 2013年2月11日
Openssl默认配置/usr/lib/ssl/Openssl.cnf
有线索吗?
非常感谢。
我很接近:
SparkPost需要TLS而不是SSL。它必须在参数中设置,而不是在服务器url中设置,以便使用STARTTLS
。最后,我需要更改默认的换行符值。所以这里有一个好的配置:
$config['mailtype'] = "html";
$config['protocol'] = 'smtp';
$config['smtp_host'] = 'smtp.sparkpostmail.com';
$config['smtp_user'] = 'user';
$config['smtp_pass'] = 'password';
$config['smtp_crypto'] = 'tls';
$config['smtp_port'] = '587';
$condig['crlf'] = "rn";
$config['newline'] = "rn";