9

我在运行 64 位版本的 CentOS 的亚马逊 ec2 上托管了一个站点。

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

有人用过 Amazon 的 SES 和 Symfony2 和 Swiftmailer Bundle 吗?如果是这样,您是否建议使用 SES 或更传统的电子邮件服务器来执行此类任务?

4

7 回答 7

14

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

Amazon SES需要使用 TLS 加密

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 似乎是个好主意。

于 2012-12-04T18:13:00.323 回答
11

通过 Symfony2 通过 SES 发送邮件对我来说不是开箱即用的,因为我在 config.yml 中配置了spool 选项。

我偶然发现的另一个问题是端口。端口 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
于 2014-03-16T15:46:10.940 回答
2

有一个为 swiftmailer 预先构建的 SES 传输。非常容易设置:

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

于 2013-02-02T17:17:11.733 回答
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 管理控制台中验证您的电子邮件帐户,之后应该可以工作。

于 2012-03-05T21:19:01.413 回答
1

如果您可以坚持免费层限制(每天 2K 条消息),我绝对建议您坚持使用 SES 而不是传统的电子邮件服务器。它简单、易于与大多数平台集成,并且您消除了电子邮件服务器的维护和运营成本(虽然很小,但它们仍然存在)。当然,使用 SES 时仍然存在数据传输成本,正如您在Amazon SES 定价中看到的那样,但这也可能符合您的需求。

于 2012-02-14T21:43:58.027 回答
1

在较新的 Symfony 版本中,包括对 SES 的支持。您可以简单地传递您的凭据并在配置中设置您的 stmp 主机。

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

于 2019-09-08T09:10:35.080 回答
0

只需添加“tls”作为第三个参数。工作正常例如:

// Create the Transport
$transport = (new Swift_SmtpTransport('amazon-url', 587, 'tls'))
->setUsername('awsusernamexxxxxx')
->setPassword('awspasswordxxxxxx');
// Other codings
?>
于 2019-07-18T11:25:52.173 回答