我正在尝试为Swift Mailer 4.3.0中的所有邮件设置默认发件人,但找不到合适的解决方案。我想避免在每条消息中使用 - > setFrom(),因为这将是一个未来的头痛。我可以使用常量,但我一直在寻找更优雅的解决方案。
$message = Swift_Message::newInstance()
->setSubject('subject')
->setFrom(array('sender@domain.com' => 'Sender'))
->setTo(array('recipient@domain.com'))
->setBody('Message');
谢谢!
答案 0 :(得分:4)
你不能。
据我所知,你不能省略这个参数。
需要
From:
地址,并使用邮件的setFrom()
方法进行设置。From:
地址指定实际编写电子邮件的人,通常是谁发送了电子邮件。
这可能是最好的解决方案:
->setFrom(MyClass::FROM_EMAIL);
您可以尝试的一件事就是在您的应用程序中创建一个实例,并在您想要发送新邮件时克隆它而不重新定义from部分:
// somewhere early in your app
$message = Swift_Message::newInstance()
->setFrom(array('sender@domain.com' => 'Sender'));
然后,在其他地方:
$newMessage = clone $message;
$newMessage
->setSubject('subject')
->setTo(array('recipient@domain.com'))
->setBody('Message')
->send();
答案 1 :(得分:1)
如果您使用SwiftMailer≥4并且熟悉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' => ['sender@domain.com' => 'Sender']
]));
然后发送电子邮件而不指定发件人地址:
$mailer->send((new Swift_Message())
->setSubject('subject')
->setTo(array('recipient@domain.com'))
->setBody('Message'));