Amazon ec2 我可以使用亚马逊';有Symfony2和Swiftmailer捆绑包吗?

Amazon ec2 我可以使用亚马逊';有Symfony2和Swiftmailer捆绑包吗?,amazon-ec2,symfony,swiftmailer,amazon-ses,Amazon Ec2,Symfony,Swiftmailer,Amazon Ses,我在亚马逊的ec2上托管了一个网站,运行64位版本的CentOS 该网站有一个简单的联系我们表单,需要在提交时向多个地址发送电子邮件(非常基本) 有没有人将亚马逊的SES与Symfony2和Swiftmailer捆绑包一起使用过?如果是这样,您建议使用SES或更传统的电子邮件服务器来完成这类任务吗 如果你能坚持免费级别限制(每天2千封邮件),我绝对建议你坚持使用SES而不是传统的电子邮件服务器。它很简单,易于与大多数平台集成,并且您消除了电子邮件服务器的维护和操作成本(虽然很小,但它们仍然存在)

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

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


有没有人将亚马逊的SES与Symfony2和Swiftmailer捆绑包一起使用过?如果是这样,您建议使用SES或更传统的电子邮件服务器来完成这类任务吗

如果你能坚持免费级别限制(每天2千封邮件),我绝对建议你坚持使用SES而不是传统的电子邮件服务器。它很简单,易于与大多数平台集成,并且您消除了电子邮件服务器的维护和操作成本(虽然很小,但它们仍然存在)。当然,正如您在上所看到的,使用SES时仍然存在数据传输成本,但这可能也适合您的需要。

自2011年12月以来,您可以将smtp与SwitMail一起使用,但在此之前,问题是此捆绑包仍然没有EC2上的工作实现,但已经存在。如果您喜欢使用SwitMail等框架发送电子邮件,您应该拥有密码和密钥,并执行以下操作:

 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凭据”

您需要安装此扩展:


但我认为这只是信息。现在,您应该在AWS管理控制台中验证您的电子邮件帐户,以后应该可以使用。

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

亚马逊SES

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

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


通过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

只需添加“tls”作为第三个参数,就可以了 前任:
在较新的Symfony版本中,支持SES。您只需传递凭据并在配置中设置stmp主机即可


请参阅文档,了解使用端口465导致无法与主机email-smtp.us-east-1.amazonaws.com建立[Swift#u TransportException]连接的原因[连接超时]切换到端口587修复了
587
技巧的问题!我也在使用
487
时超时了,谢谢!使用端口
587
做到了:)我在将旧应用程序移动到ECS时遇到了这个问题。知道为什么后台处理配置会导致问题吗?还有,谢谢!这也解决了我的问题。@jonnysamps什么是ECS?由于您现在需要管理反弹和投诉,您可以使用AWS SES Monitor捆绑包来完成此操作。它还提供了一些有用的命令来自动创建主题,以便通过AWS SNS获取关于反弹、投诉和交付的通知。捆绑包是github.com/Aerendir/AWS-SES-Monitor-bundle。希望这会有所帮助。
// Create the Transport
$transport = (new Swift_SmtpTransport('amazon-url', 587, 'tls'))
->setUsername('awsusernamexxxxxx')
->setPassword('awspasswordxxxxxx');
// Other codings
?>