自从 PHP 7.4 更新到 8.1 以来,我通过发送电子邮件收到奇怪的消息。
$config = Array(
'protocol' => 'asmtp',
'smtp_host' => 'asmtp.mail.*****.com',
'smtp_port' => 587,
'smtp_user' => '[email protected]',
'smtp_pass' => '*******',
'mailtype' => 'html',
'charset' => 'utf-8',
'wordwrap' => TRUE
);
$message = $this->load->view('email/index.php', $data, TRUE);
$subject = "My title;
$this->load->library('email', $config);
$this->email->set_mailtype("html");
$this->email->set_crlf( "\r\n" );
$this->email->from('[email protected]');
$this->email->to($email);
$this->email->subject($subject);
$this->email->message($message);
$this->email->attach($root.'assets/'.$attachment);
错误信息:
这是一条 MIME 格式的多部分消息。您的电子邮件申请 可能不支持这种格式。
--B_ATC_64eceaf56642a 内容类型:多部分/替代;边界=“B_ALT_64eceaf566426”
--B_ALT_64eceaf566426 内容类型:文本/纯文本;字符集=UTF-8 内容传输编码:8 位
--B_ALT_64eceaf566426 内容类型:text/html;字符集 = UTF-8 内容传输编码:引用打印
我将字符集从 UTF-8 更改为 ISO-8859-1 和其他一些字符集,但这并不能解决问题。此外,邮件服务器上没有任何变化。
我昨天将 PHP 从 7.4 版本升级到 8.2,然后发现邮件不再正确发送。
原因似乎是,自升级以来,CodeIgniter 3 电子邮件库似乎仅使用“ ” 作为外发电子邮件标题中的行分隔符。将其更改为“ ”,问题已解决。
我通过更改
application/config/email.php
文件以包含以下行来实现此目的:
$config['newline'] = "\r\n";
想必您也可以通过在调用库时设置配置换行符来达到相同的结果:
$this->email->set_newline("\r\n");