Django与Amazon SES SMTP
我正在尝试在Django 1.3.1中使用亚马逊的新SMTP服务来发送邮件,但遇到了一些问题。
我已经创建了SES的SMTP凭证,并在我的设置中添加了这些信息:
EMAIL_USE_TLS = True
EMAIL_HOST = 'email-smtp.us-east-1.amazonaws.com'
EMAIL_HOST_USER = 'my-smtp-user'
EMAIL_HOST_PASSWORD = 'my-smtp-password'
EMAIL_PORT = 465
然后我尝试发送一封测试邮件(发件人和收件人都是经过验证的邮箱地址):
from django.core.mail import send_mail
send_mail('Test subject', 'This is the body', 'info@abc.com',['hello@abc.com'], fail_silently=False)
但是我收到了以下错误信息:
SMTPServerDisconnected: Connection unexpectedly closed
我可以通过telnet连接到服务器:
telnet email-smtp.us-east-1.amazonaws.com 465
8 个回答
13
2019 更新:Django 2.2.1
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'email-smtp.us-east-1.amazonaws.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'my_smtp_username'
EMAIL_HOST_PASSWORD = 'my_smtp_password'
EMAIL_USE_TLS = True
不需要任何库。
16
2022年8月更新,使用Django-3.2.4:
不需要像 django-ses
或 django-amazon-ses
这样的库!!
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'email-smtp.ap-northeast-1.amazonaws.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = 'my_smtp_username' # Must create SMTP Credentials
EMAIL_HOST_PASSWORD = 'my_smtp_password' # Must create SMTP Credentials
DEFAULT_FROM_EMAIL = 'myses@sender.com' # If don't need, comment out!!
我添加了DEFAULT_FROM_EMAIL
。
DEFAULT_FROM_EMAIL = 'myses@sender.com'
如果你不需要这个,可以把它注释掉!!
# DEFAULT_FROM_EMAIL = 'myses@sender.com'
另外,对于DEFAULT_FROM_EMAIL
,你需要放一个已验证的域名
或邮箱地址
,无论你的账户是否在沙盒
环境中。
所以对于下面的已验证域名sender.com
,
下面这三个是有效的:(只用其中一个)
DEFAULT_FROM_EMAIL = 'abc@sender.com' # OR
DEFAULT_FROM_EMAIL = 'test@sender.com' # OR
DEFAULT_FROM_EMAIL = 'myses@sender.com'
但下面这两个是无效的:(这些会报错)
*格式必须是something@sender.com
!!
DEFAULT_FROM_EMAIL = 'sender.com'
DEFAULT_FROM_EMAIL = '@sender.com'
然后,对于下面的2个邮箱地址
,
只需使用下面的两个中的一个:
DEFAULT_FROM_EMAIL = 'hello@gmail.com' # OR
DEFAULT_FROM_EMAIL = 'world@outlook.com'
最后,对于EMAIL_HOST_USER
和EMAIL_HOST_PASSWORD
,你必须创建SMTP凭证
。
选择SMTP设置
:
点击创建我的SMTP凭证
按钮:
得到的SMTP凭证
:
然后,把SMTP凭证
放在下面:
EMAIL_HOST_USER = 'AKIAWP3TMGZN4OZH5H37'
EMAIL_HOST_PASSWORD = 'BB6dufiw96jJHUTrowXI8R4gcyOI+t1+Skbi51cdHYhV'
*(我已经删除了这些SMTP凭证
)
32
我找到了一种更简单的方法,可以让我使用Django自带的邮件功能,这样我仍然可以收到管理员的错误邮件报告等。
多亏了这个小工具,我能够顺利使用SES SMTP:
https://github.com/bancek/django-smtp-ssl
下载并安装(运行python setup.py install)
然后只需要把你的设置改成使用这个新的邮件后端:
EMAIL_BACKEND = 'django_smtp_ssl.SSLEmailBackend'
其他的设置和以前一样:
EMAIL_HOST = 'email-smtp.us-east-1.amazonaws.com'
EMAIL_PORT = 465
EMAIL_HOST_USER = 'my_smtp_username'
EMAIL_HOST_PASSWORD = 'my_smtp_password'
EMAIL_USE_TLS = True