2013-03-14 52 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'));