4

我使用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应该怎么配置?</p>

4

4 回答 4

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

您将使用默认部分的设置;

于 2013-08-24T20:26:34.477 回答
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'));

这应该够了吧。

于 2013-05-10T08:18:24.933 回答
1

这将是您的配置文件的样子。

应用程序/配置/config.yml

 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 文档

于 2015-07-02T06:44:48.270 回答
0

这应该有效:来自文档

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);
于 2017-03-28T14:42:00.120 回答