[英]Zend\Mail ignores copy recipients (BCC or CC)
當嘗試使用Zend\\Mail
向多個BCC
或CC
收件人發送Zend\\Mail
,只有列表中的第一個收件人會收到電子郵件。 多個正常收件人不是問題。
$mail = new Mail\Message();
$mail->setBcc([
'bcc_recipient_one@example.com',
'bcc_recipient_two@example.com',
'bcc_recipient_three@example.com',
]);
使用Message
對象的setBcc
或addBcc
區別。
問題
該問題屬於Zend\\Mail
標頭生成的格式錯誤。 它在所有CC
或BCC
收件人之間使用line-breaks
。 正如全面地描述此信息 ,解決方法是固定的折疊。
例如,以下代碼段:
$mail = new Mail\Message();
$mail->setFrom('test@stackoverflow.com', 'Stackoverflow Tester');
$mail->addTo('email@stackoverflow.com', 'Stackoverflow Recipient');
$mail->setSubject('Stackoverflow Test');
$mail->setBcc(['bcc_one@so.com', 'bcc_two@so.com', 'bcc_three@so.com']);
將創建這樣的標題:
Date: Wed, 18 Jan 2018 19:11:36 +0100
From: Stackoverflow Tester <test@stackoverflow.com>
To: email@stackoverflow.com
Subject: Stackoverflow Test
Bcc: bcc_one@so.com,
bcc_two@so.com,
bcc_three@so.com
至少對於某些服務器(例如Micrsoft Exchange)而言,問題是收件人后面的換行符。 若要解決此問題,最好的方法是將IMO設置為自己的Header類,因為換行符硬編碼在Zend \\ Mail中。
解決方案
只需將\\Zend\\Mail\\Header\\Bcc
類復制到您的模塊並覆蓋其中的getFieldValue
函數。 使用這種方法,以后您將保持兼容。
public function getFieldValue($format = HeaderInterface::FORMAT_RAW)
{
$value = parent::getFieldValue($format);
return str_replace(Headers::FOLDING, ' ', $value);
}
現在,收件人將通過新的標頭類傳遞給Message
對象。
$bcc = new \MyModule\Header\Bcc();
$bcc->getAddressList()->addMany(['bcc_one@so.com', 'bcc_two@so.com', 'bcc_three@so.com']);
$mail->getHeaders()->addHeader($bcc);
就是這樣,新標題將正確生成:
Date: Wed, 18 Jan 2018 19:11:36 +0100
From: Stackoverflow Tester <test@stackoverflow.com>
To: email@stackoverflow.com
Subject: Stackoverflow Test
Bcc: bcc_one@so.com, bcc_two@so.com, bcc_three@so.com
有關該問題和解決方案的更多詳細信息, 請參閱原始文章 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.