2012-02-07 57 views
7

我在亚马逊的ec2上运行一个运行64位版CentOS的站点。我可以在Symfony2和Swiftmailer Bundle中使用亚马逊的SES吗?

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

有没有人使用亚马逊SES与Symfony2中和Swiftmailer捆绑?如果是这样,你是否推荐使用SES或更传统的电子邮件服务器来完成这种类型的任务?

+0

至于现在需要的是您管理和反弹的投诉,你可以n使用AWS SES Monitor软件包执行此操作。它还提供了一些有用的命令来自动创建主题,以通过AWS SNS获取有关反弹,投诉和交付的通知。该软件包是github.com/Aerendir/aws-ses-monitor-bundle。希望这会有所帮助。 – Aerendir 2016-08-08 10:42:38

回答

1

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

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('[email protected]')) 
    ->setTo(array('[email protected]')) 
    ->setBody(" 

为了把你的AWS管理控制台内重点转到“>‘SMTP设置’>”创建我SMTP凭证”

你将需要安装这个扩展名:

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

但我repet这仅仅是信息现在,您应该验证之前,你的电子邮件帐户在您的AWS管理控制台和以后应该工作。

11

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

亚马逊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('[email protected]')) 
    ->setTo(array('[email protected]' => '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似乎是一个好主意。

7

通过Symfony2中通过SES发送邮件开箱没有工作适合我,因为我在我的config.yml配置卷轴选项

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

重要的是,您使用正确的SMTP服务器,起初我使用我们东1(因为我从一个例子中复制它),虽然我的SMTP实际上是电子邮件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 
+1

看起来像在[Swift_TransportException]中使用端口465的结果 无法与主机建立连接email-smtp.us-east-1.amazonaws.com [连接超时#110]更改为端口587修复问题 – 2014-11-22 20:36:10

+0

谢谢为''587''技巧!我用''487''也超时了 – Cassiano 2016-02-11 15:13:59