Чтобы расширить ответы Хендрика и Аласдера, я предлагаю изучить использование плагина 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('[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);
Вместо использования detach, который выполняет итерацию по частям, глядя на то, как работают addPart
и attach
, они просто вызывают setChildren(array_merge($this->getChildren(), array($part)))
Таким образом, вы можете установить дочерние части вручную, определив их, что заменяет вызов addPart
или attach
.
$message->setChildren([$htmlPart, $textPart]);
Для всех намерений и целей, если вы удаляете части сообщения вместе с другим содержимым (хотя и незначительно) для другого получателя, вы фактически создаете новое сообщение. Логика программирования может отражать это, вызывая $message = \Swift_Message::newInstance()
, когда необходимо заменить части сообщения.
person
Will B.
schedule
21.07.2016