如何使用云来发送邮件
生产环境下的邮件发送准备,不同于你在开发过程中的设置,因为你希望邮件的数量、发送成功率或是邮件发送服务器的地址“不受限制”。因此,使用Gmail 或类似服务将不能成为选项。如果在设置和维护你自己的可靠邮件服务器时,你头痛不已,这里有个简单的解决方案:利用云来发送邮件。
本文能够证明整合 Amazon's Simple Email Service (SES) 到Symfony是多么地容易。
对于其他(商家的)邮件服务,你可以使用相同技巧,因为多数时候并不会有比“为swift Mailer配置一个SMTP选项”更多的事情了。
在Symfony的配置文件中,依照 SES console 所提供的信息,来改变Swift Mailer的 transport
,
host
, port
和 encryption
设置。在SES console中创建你自己专有的SMTP凭据,添加服务商提供的 username
和 password
来完成配置:
1 2 3 4 5 6 7 8 9 10 11 |
# app/config/config.yml
swiftmailer:
transport: smtp
host: email-smtp.us-east-1.amazonaws.com
port: 587 # different ports are available, see SES console
# 其他端口也可以使用,参考SES控制台
encryption: tls # TLS encryption is required / TLS加密必须
username: AWS_SES_SMTP_USERNAME # to be created in the SES console
# 创建于SES控制台
password: AWS_SES_SMTP_PASSWORD # to be created in the SES console
# 创建于SES控制台 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<!-- app/config/config.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
<container xmlns="Http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:swiftmailer="http://symfony.com/schema/dic/swiftmailer"
xsi:schemaLocation="http://symfony.com/schema/dic/services
http://symfony.com/schema/dic/services/services-1.0.xsd
http://symfony.com/schema/dic/swiftmailer
http://symfony.com/schema/dic/swiftmailer/swiftmailer-1.0.xsd">
<!-- ... -->
<swiftmailer:config
transport="smtp"
host="email-smtp.us-east-1.amazonaws.com"
port="587"
encryption="tls"
username="AWS_SES_SMTP_USERNAME"
password="AWS_SES_SMTP_PASSWORD"
/>
</container> |
1 2 3 4 5 6 7 8 9 |
// app/config/config.php
$container->loadFromExtension('swiftmailer', array(
'transport' => 'smtp',
'host' => 'email-smtp.us-east-1.amazonaws.com',
'port' => 587,
'encryption' => 'tls',
'username' => 'AWS_SES_SMTP_USERNAME',
'password' => 'AWS_SES_SMTP_PASSWORD',
)); |
port
和 encryption
键,并非Symfony标准版框架的默认配置,但你可以随需添加之。
如果你用的是Symfony标准版,在 parameters.yml
中配置参数,然后在配置文件中使用参数。 这允许不同的Swift Mailer配置作用于你的程序的“每一次安装”。例如,在开发时使用Gmail,而在生产环境使用云配置。
1 2 3 4 5 6 7 8 9 10 11 12 |
# app/config/parameters.yml
parameters:
# ...
mailer_transport: smtp
mailer_host: email-smtp.us-east-1.amazonaws.com
mailer_port: 587 # different ports are available, see SES console
# 其他端口也可以使用,参考SES控制台
mailer_encryption: tls # TLS encryption is required / TLS加密必须
mailer_user: AWS_SES_SMTP_USERNAME # to be created in the SES console
# 创建于SES控制台
mailer_password: AWS_SES_SMTP_PASSWORD # to be created in the SES console
# 创建于SES控制台 |
若你倾向于使用Amazon SES的话,请注意以下几点:
- 你必须注册到 Amazon Web Services (AWS);
- 使用在
From
或Return-Path
(bounce address) 头中的每一个发信人地址,都需要所有人来确认。你也可以对整个域名进行确认; - 最初你将被限制在沙盒模式下。被允许向任意收信人发送信息之前,你必须先请求“production Access”产品级访问;
- SES有可能成为被起诉的主题。