簡體   English   中英

Zend \\ Mail忽略副本收件人(密件抄送或抄送)

[英]Zend\Mail ignores copy recipients (BCC or CC)

當嘗試使用Zend\\Mail向多個BCCCC收件人發送Zend\\Mail ,只有列表中的第一個收件人會收到電子郵件。 多個正常收件人不是問題。

$mail = new Mail\Message();
$mail->setBcc([
    'bcc_recipient_one@example.com',
    'bcc_recipient_two@example.com',
    'bcc_recipient_three@example.com',
]);

使用Message對象的setBccaddBcc區別。

問題

該問題屬於Zend\\Mail標頭生成的格式錯誤。 它在所有CCBCC收件人之間使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM