我可以将亚马逊的SES与Symfony2和Swiftmailer Bundle一起使用吗?

时间:2012-02-07 22:44:13

标签: amazon-ec2 symfony swiftmailer amazon-ses

我正在亚马逊的ec2上运行64位版本的CentOS。

该网站有一个简单的联系我们表单,需要在提交时向多个地址发送电子邮件(非常基本)。

有没有人使用亚马逊的SES与Symfony2和Swiftmailer Bundle?如果是这样,您是否建议使用SES或更传统的电子邮件服务器进行此类任务?

7 个答案:

答案 0 :(得分:13)

可以通过SES发送带有swiftmailer库附带的本机SMTP传输的电子邮件。以下示例使用版本4.2.2进行测试。

Amazon SES requires usage of TLS encryption

可以将

Swift_SmtpTransport传输类配置为通过传递 tls 作为第三个构造函数参数来使用TLS加密:

require_once './vendor/swiftmailer/swiftmailer/lib/swift_required.php';

// Create the Transport
$transport = Swift_SmtpTransport::newInstance(
        'email-smtp.us-east-1.amazonaws.com', 
        25, 
        'tls'
    )
    ->setUsername('AWS_ACCESS_KEY')
    ->setPassword('AWS_SECRET_KEY')
;

// Create the Mailer using your created Transport
$mailer = Swift_Mailer::newInstance($transport);

// Create a message
$message = Swift_Message::newInstance('Wonderful Subject')
    ->setFrom(array('example@example.org'))
    ->setTo(array('example@example.org' => 'John Doe'))
    ->setBody('Here is the message itself')
;

// Send the message
$result = $mailer->send($message);

在Symfony2中,您可以配置swiftmailer服务以使用TLS加密:

# app/config/config.yml
swiftmailer:
    transport:  smtp
    host:       email-smtp.us-east-1.amazonaws.com
    username:   AWS_ACCESS_KEY
    password:   AWS_SECRET_KEY
    encryption: tls

直接从安装在EC2实例上的邮件服务器发送电子邮件并不十分可靠,因为EC2 IP地址可能会被列入黑名单。建议使用受信任的邮件服务器,因此使用SES似乎是一个好主意。

答案 1 :(得分:8)

通过Symfony2通过SES发送邮件对我来说没有开箱即用,因为我在config.yml中配置了假脱机选项

我偶然发现的另一个问题是港口。端口25和587工作正常,但 465 让我暂停。

重要的是你使用正确的SMTP服务器,起初我使用的是us-east-1(因为我从一个例子中复制了它)虽然我的SMTP实际上是email-smtp.eu-west-1.amazonaws .COM

所以这是我目前的配置:

parameters:
    mailer_transport: smtp
    mailer_host: email-smtp.eu-west-1.amazonaws.com
    mailer_user: AWS_ACCESS_KEY
    mailer_password: AWS_SECRET_KEY
    mailer_encryption: tls
    mailer_port: 587

swiftmailer:
    transport: %mailer_transport%
    host:      %mailer_host%
    username:  %mailer_user%
    password:  %mailer_password%
    encryption: "%mailer_encryption%"
    port: %mailer_port%
    auth_mode:  login

我在命令行上执行以下命令找到了问题:

php app/console swiftmailer:debug

答案 2 :(得分:2)

有一个为swiftmailer预建的SES传输。设置非常简单:

https://github.com/jmhobbs/Swiftmailer-Transport--AWS-SES

答案 3 :(得分:1)

如果您可以坚持免费套餐限制(每日2K消息),我绝对建议您坚持使用SES而不是传统的电子邮件服务器。它简单,易于与大多数平台集成,您可以消除电子邮件服务器的维护和运营成本(尽管很小,它们仍然存在)。当然,使用SES时仍然存在数据传输成本,您可以在Amazon SES pricing上看到,但这也可能符合您的需求。

答案 4 :(得分:1)

自2011年12月以来,你可以使用smtp和switfmail,但问题是这个包仍然没有在EC2上工作的实现,但已经存在。如果您喜欢使用某些框架(如switfmail)发送电子邮件,您应该拥有密码和密钥,并执行以下操作:

 require_once 'lib/swift_required.php';

  //Create the Transport
  $transport = new Swift_AWSTransport(
    'AWS_ACCESS_KEY',
    'AWS_SECRET_KEY'
  );

  //Create the Mailer using your created Transport
  $mailer = Swift_Mailer::newInstance($transport);

  //Create the message
  $message = Swift_Message::newInstance()
  ->setSubject("What up?")
  ->setFrom(array('you@yourdomain.com'))
  ->setTo(array('them@theirdomain.com'))
  ->setBody("

将您的密钥带入AWS管理控制台“>”SMTP设置“>”创建我的SMTP凭据“

您需要安装此扩展程序:

https://github.com/jmhobbs/Swiftmailer-Transport--AWS-SES

但我重申这只是信息。现在,您应该先在AWS管理控制台中验证您的电子邮件帐户,然后再运行。

答案 5 :(得分:1)

在最新的Symfony版本中,包括对SES的支持。您只需传递您的凭据并在配置中设置stmp主机即可。

请参阅Symfony 3.4Symfony 4.X的文档

答案 6 :(得分:0)

只需添加“ tls”作为第三个参数即可。工作良好 例如:     

// Create the Transport
$transport = (new Swift_SmtpTransport('amazon-url', 587, 'tls'))
->setUsername('awsusernamexxxxxx')
->setPassword('awspasswordxxxxxx');
// Other codings
?>