这是我的settings.py文件:
请注意,我在这里使用了25,当我使用端口465时,输出如下:
所以我尝试使用25号端口,连接成功(250 OK),然后我输入了以下内容:
但输出了:535身份验证凭据无效。是我使用错误的凭据吗?但我直接从smtp用户和密码生成页面复制了用户名和密码。
我还尝试将AmazonSESFullAccess策略附加到所有IAM用户,但没有任何作用。
我使用Django 1.8.2。尝试过Django-ses,但它也不起作用(运行测试时出现语法错误,它不支持Python 3?)。
更新:
我将端口更改为587并使用USE_TLS True,现在可以从django shell发送邮件。我将该函数放在我的应用程序views.py中:
在urls.py文件中,我将以下内容放在urlpatterns中:
当我访问该URL时,什么都没有发生。我从shell中调用相同的test_email函数,它可以正常工作。
更新:
事实证明,我也可以使用端口465和USE_SSL True,并能够从django shell发送邮件。但是在views.py中仍然无法工作。
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'email-smtp.us-east-1.amazonaws.com'
EMAIL_PORT = '465'
EMAIL_HOST_USER = config_data['EMAIL_HOST_USER']
EMAIL_HOST_PASSWORD = config_data['EMAIL_HOST_PASSWORD']
EMAIL_USE_SSL = True
我已经验证了电子邮件地址,并生成了SMTP凭据,我下载了包含IAM用户名、Smtp用户名和Smtp密码的凭据。我将smtp用户名用于EMAIL_HOST_USER,将smtp密码用于EMAIL_HOST_PASSWORD。
在Django中,我使用以下代码行发送了一封电子邮件(admin@admin.com被替换为已验证电子邮件列表中的Gmail帐户):
send_mail("Subject", "content", "admin@admin.com", [email], fail_silently=False)
那样做没有用。但是在SES控制台中发送测试电子邮件(选择已验证的电子邮件之一并单击“发送测试电子邮件”按钮)是有效的。
这份文档说我可以使用openssl命令在命令行上发送电子邮件。所以,我通过ssh连接到EC2机器,并使用:
openssl s_client -crlf -quiet -starttls smtp -connect email-smtp.us-east-1.amazonaws.com:25
请注意,我在这里使用了25,当我使用端口465时,输出如下:
didn't found starttls in server response, try anyway...
write:errno=32
所以我尝试使用25号端口,连接成功(250 OK),然后我输入了以下内容:
AUTH LOGIN
334 VXNlcm5hbWU6
SMTP_USER
334 UGFzc3dvcmQ6
SMTP_PASSWORD
但输出了:535身份验证凭据无效。是我使用错误的凭据吗?但我直接从smtp用户和密码生成页面复制了用户名和密码。
我还尝试将AmazonSESFullAccess策略附加到所有IAM用户,但没有任何作用。
我使用Django 1.8.2。尝试过Django-ses,但它也不起作用(运行测试时出现语法错误,它不支持Python 3?)。
更新:
我将端口更改为587并使用USE_TLS True,现在可以从django shell发送邮件。我将该函数放在我的应用程序views.py中:
def test_email(request):
send_mail("title", "content", "abc@gmail.com", ["def@gmail.com"], fail_silently=False)
return get_return_object(request, status_code=1)
在urls.py文件中,我将以下内容放在urlpatterns中:
url(r'^test_email/$', views.test_email, name="test_email"),
当我访问该URL时,什么都没有发生。我从shell中调用相同的test_email函数,它可以正常工作。
更新:
事实证明,我也可以使用端口465和USE_SSL True,并能够从django shell发送邮件。但是在views.py中仍然无法工作。