我使用gmail发送邮件,所以我像这样配置'config.yml'
swiftmailer:
transport: %mailer_transport%
encryption: %mailer_encryption%
auth_mode: %mailer_auth%
host: %mailer_host%
username: %mailer_user%
password: %mailer_password%
'parameters.yml'喜欢这个
mailer_transport: smtp
mailer_encryption: ssl
mailer_auth: login
mailer_host: smtp.gmail.com
mailer_user: lee@gmail.com
mailer_password: ******
现在我想使用更多邮件帐户来发送不同目标的邮件。 例如:使用lee@gmail.com发送邮件进行欢迎;使用lee1@gmail.com发送邮件重置密码。
我应该如何配置swiftmailer?
答案 0 :(得分:21)
如果您使用的是Swiftmailer 2.3.3,您可以简单地制作一切:
在parameters.yml中添加:
mailer2_transport: smtp
mailer2_encryption: ssl
mailer2_auth_mode: login
mailer2_host: smtp.gmail.com
mailer2_user: your@gmail.com
mailer2_password: *******
在config.yml中进行更改:
swiftmailer:
default_mailer: mailer
mailers:
mailer:
transport: %mailer_transport%
host: %mailer_host%
username: %mailer_user%
password: %mailer_password%
encryption: %mailer_encryption%
auth_mode: %mailer_auth_mode%
mailer2:
transport: %mailer2_transport%
host: %mailer2_host%
username: %mailer2_user%
password: %mailer2_password%
encryption: %mailer2_encryption%
auth_mode: %mailer2_auth_mode%
在代码中,如果你写:
$mailer = $this->get('swiftmailer.mailer.mailer2');
您将从您的部分获得设置;
如果你写:
$mailer = $this->get('swiftmailer.mailer.default');
或
$mailer = $this->get('mailer'); // default configuration
您将使用默认部分的设置;
答案 1 :(得分:1)
管理邮件程序配置的SwiftmailerBundle允许您只设置一个默认配置。然而,设置其他人非常简单。只需直接使用Swiftmailer或使用其他配置定义您自己的邮件程序类。
/**
* Gets the 'mailer' service.
*
* This service is shared.
* This method always returns the same instance of the service.
*
* @return Swift_Mailer A Swift_Mailer instance.
*/
protected function getMailerService()
{
return $this->services['mailer'] = new \Swift_Mailer($this->get('swiftmailer.transport'));
}
您可以根据需要定义具有不同配置的许多服务。例如,请查看以下示例。
<service id="mysecond.transport.smtp" class="%swiftmailer.transport.smtp.class%" public="false">
<argument type="service" id="swiftmailer.transport.buffer" />
<argument type="collection">
<argument type="service" id="swiftmailer.transport.authhandler" />
</argument>
<argument type="service" id="swiftmailer.transport.eventdispatcher" />
<call method="setHost"><argument>%mysecond.transport.smtp.host%</argument></call>
<call method="setPort"><argument>%mysecond.transport.smtp.port%</argument></call>
<call method="setEncryption"><argument>%mysecond.transport.smtp.encryption%</argument></call>
<call method="setUsername"><argument>%mysecond.transport.smtp.username%</argument></call>
<call method="setPassword"><argument>%mysecond.transport.smtp.password%</argument></call>
<call method="setAuthMode"><argument>%mysecond.transport.smtp.auth_mode%</argument></call>
<call method="setTimeout"><argument>%mysecond.transport.smtp.timeout%</argument></call>
<call method="setSourceIp"><argument>%mysecond.transport.smtp.source_ip%</argument></call>
</service>
然后,在你的代码中,你会做类似的事情。
$mySecondMailer = new \Swift_Mailer($this->get('mysecond.transport.smtp'));
这应该可以解决问题。
答案 2 :(得分:1)
这将是您的配置文件的样子。
swiftmailer:
default_mailer: second_mailer
mailers:
first_mailer:
# ...
second_mailer:
# ...
现在,您可以按照以下方式使用任何邮件:
// returns the first mailer
$container->get('swiftmailer.mailer.first_mailer');
// also returns the second mailer since it is the default mailer
$container->get('swiftmailer.mailer');
// returns the second mailer
$container->get('swiftmailer.mailer.second_mailer');
有关详细信息,请参阅:symfony documentry
答案 3 :(得分:0)
这应该有效:from the documentation
require_once 'lib/swift_required.php';
// Create the Transport
$transport = Swift_SmtpTransport::newInstance('smtp.example.org', 25)
->setUsername('your username')
->setPassword('your password')
;
/*
You could alternatively use a different transport such as Sendmail or Mail:
// Sendmail
$transport = Swift_SendmailTransport::newInstance('/usr/sbin/sendmail -bs');
// Mail
$transport = Swift_MailTransport::newInstance();
*/
// Create the Mailer using your created Transport
$mailer = Swift_Mailer::newInstance($transport);
// Create a message
$message = Swift_Message::newInstance('Wonderful Subject')
->setFrom(array('john@doe.com' => 'John Doe'))
->setTo(array('receiver@domain.org', 'other@domain.org' => 'A name'))
->setBody('Here is the message itself')
;
// Send the message
$result = $mailer->send($message);