2013-03-14 55 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

你不能。

據我所知,你不能省略這個參數。

A 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 2013-03-14 12:58:03

+0

爲什麼你需要克隆?我認爲你可以使用相同的實例並更改主題,正文... – Matthew 2014-09-09 15:32:33

+0

如果我必須發送不同的郵件,我會克隆原始'$ message'以避免不良行爲。這裏的情況是,我在我的應用程序某處定義了'$ message',然後在每個地方重新使用它。 (我同意這不是最好的解決方案,但我認爲這是我寫的時候的想法) – j0k 2014-09-10 11:31:28

0

如果您使用SwiftMailer≥6且熟悉Composer,則可以使用SwiftMailer的Defaults Plugin來實現此目的。

首先安裝軟件包:

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'));