2013-03-14 1 views
3

Я пытаюсь установить отправителя по умолчанию для всех сообщений в Swift Mailer 4.3.0, но не смог найти правильное решение. Я хочу избежать использования -> setFrom() в каждом сообщении, так как это будет будущая головная боль. Я мог использовать константу для этого, но я искал более элегантное решение.Swift почтовый отправитель по умолчанию

$message = Swift_Message::newInstance() 
       ->setSubject('subject') 
       ->setFrom(array('[email protected]' => 'Sender')) 
       ->setTo(array('[email protected]')) 
       ->setBody('Message'); 

Спасибо!

ответ

4

Вы не можете.

Насколько я знаю, вы не можете опустить этот параметр.

Адрес: From: Адрес и номер вызываемого номера setFrom(). В адресах From: указывается, кто на самом деле написал письмо и обычно отправил его.

Это может быть лучшим решением:

->setFrom(MyClass::FROM_EMAIL); 

После того, что вы можете попробовать, чтобы создать экземпляр один раз в вашем приложении, и клонировать его, когда вы хотите, чтобы отправить новую почту без повторного определяя из части:

// somewhere early in your app 
$message = Swift_Message::newInstance() 
      ->setFrom(array('[email protected]' => 'Sender')); 

А потом, где-то еще:

$newMessage = clone $message; 
$newMessage 
    ->setSubject('subject') 
    ->setTo(array('[email protected]')) 
    ->setBody('Message') 
    ->send(); 
+0

Спасибо, я был боюсь, что такого варианта нет, когда я смотрю в Swift_Mime_SimpleMessage. Сейчас я попробую клон. – Stingus

+0

Зачем вам клонировать? Я думаю, вы можете просто использовать один и тот же экземпляр и изменить тему, тело, ... – Matthew

+0

Я клонирую оригинальное '$ message', чтобы избежать плохого поведения, если мне нужно отправить другую почту. Случай здесь, я определяю '$ message' где-то в своем приложении, а затем повторно использую его где угодно. (Я согласен, что это не лучшее решение, но я думаю, это была моя идея, когда я это написал) – j0k

0

Если вы используете SwiftMailer ≥ 6 и знакомы с Composer, для достижения этой цели вы можете использовать Defaults Plugin для SwiftMailer.

Сначала установите пакет:

composer require finesse/swiftmailer-defaults-plugin 

Второй создал Swift_Mailer экземпляр:

$mailer = new Swift_Mailer(/* your transport here */); 
$mailer->registerPlugin(new Finesse\SwiftMailerDefaultsPlugin\SwiftMailerDefaultsPlugin([ 
    'from' => ['[email protected]' => 'Sender'] 
])); 

, а затем отправить электронную почту без указания от адреса:

$mailer->send((new Swift_Message()) 
    ->setSubject('subject') 
    ->setTo(array('[email protected]')) 
    ->setBody('Message')); 

 Смежные вопросы

  • Нет связанных вопросов^_^