要由亨德里克和阿拉斯代爾答案擴大,我建議正在研究使用裝飾插件。 http://swiftmailer.org/docs/plugins.html#using-the-decorator-plugin
插件將替換每個收件人的整個郵件的所需佔位符,而不是操縱各個郵件部分。
例如
$message = \Swift_Message::newInstance();
$replacements = array();
foreach ($users as $user) {
$replacements[$user['email']] = array(
'{username}' => $user['username'],
'{password}' => $user['password']
);
$message->addTo($user['email']);
}
$decorator = new \Swift_Plugins_DecoratorPlugin($replacements);
$mailer->registerPlugin($decorator);
$message
->setSubject('Important notice for {username}')
->setBody(
"Hello {username}, we have reset your password to {password}\n" .
"Please log in and change it at your earliest convenience."
);
$message->addPart('{username} has been reset with the password: {password}', 'text/plain');
//..
$mailer->send($message);
另外在PHP中,目的是通過引用傳遞,所以可以直接操縱各個部件體,或內容類型。
$textPart = \Swift_MimePart::newInstance('Hello World', 'text/plain');
$htmlPart = clone $textPart;
$htmlPart->setContentType('text/html');
$message->setTo('[email protected]');
$message->attach($htmlPart);
$message->attach($textPart);
//...
$mailer->send($message);
$textPart->setBody('Something Else');
$htmlPart->setBody('Something Else');
$message->setTo('[email protected]');
$mailer->send($message);
您還可以通過使用
$message->detach($textPart);
而不是使用分離,在部分其迭代,尋求如何addPart
和attach
工作,他們只需撥打setChildren(array_merge($this->getChildren(), array($part)))
刪除子零件因此,您可以通過定義子部件來手動設置兒童部件,該部件將取代呼叫addPart
或attach
。
$message->setChildren([$htmlPart, $textPart]);
對於所有意圖和目的,如果你有不同的內容(儘管略)爲另一個收件人沿着移除消息的部分,你實際上創建一個新的消息。當消息部分需要被替換時,編程邏輯可以通過調用$message = \Swift_Message::newInstance()
來反映。
我只是不斷地在每個循環中創建一條新消息。 – Phil