Hendrik と Alasdair による回答を拡張するには、Decorator プラグインの使用を検討することをお勧めします。
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('someone@example.com');
$message->attach($htmlPart);
$message->attach($textPart);
//...
$mailer->send($message);
$textPart->setBody('Something Else');
$htmlPart->setBody('Something Else');
$message->setTo('someone.else@example.com');
$mailer->send($message);
を使用して子パーツを削除することもできます
$message->detach($textPart);
パーツを反復処理する detach を使用する代わりに、どのようaddPart
に機能するかを調べてattach
、単に呼び出しますsetChildren(array_merge($this->getChildren(), array($part)))
addPart
そのため、子パーツを定義することで手動で子パーツを設定できます。これにより、 orの呼び出しが置き換えられますattach
。
$message->setChildren([$htmlPart, $textPart]);
すべての意図と目的のために、別の受信者のためにメッセージの一部を (わずかではありますが) 異なるコンテンツと共に削除する場合、事実上、新しいメッセージを作成しています。プログラミング ロジックは$message = \Swift_Message::newInstance()
、メッセージ部分を置き換える必要があるときに呼び出すことで、それを反映できます。