BotoServerError:400错误请求:邮件未发送

时间:2014-10-10 04:23:34

标签: python django amazon-web-services boto

from datetime import datetime as dt, timedelta, date
from django.conf import settings
from django.core.mail import send_mail
from django.core.mail import EmailMultiAlternatives
from django.core.management.base import BaseCommand, CommandError
from hive.apps.accounts.sms_utils import send_sms_twilio



to_email = ['admin@domain.com']
subject = 'Your subject here'
email_body = 'The following clients are currently eligible for Test.Please contact them .<br>'


msg = EmailMultiAlternatives(subject, '', settings.DEFAULT_FROM_EMAIL, to_email)
msg.attach_alternative(email_body, "text/html")
msg.send()

当我使用AWS instance.i在centos上运行此代码时出现以下错误

 BotoServerError: 400 Bad Request
  <ErrorResponse xmlns="http://ses.amazonaws.com/doc/2010-12-01/">
  <Error>
  <Type>Sender</Type>
  <Code>RequestExpired</Code>
  <Message>Request timestamp: Wed, 01 Oct 2014 07:35:22 GMT expired.  It must be within 300 secs/ of server time.</Message>
  </Error>
  <RequestId>c79a9723-493c-11e4-b2d8-51a7cb197196</RequestId>
  </ErrorResponse>

当它在另一个AWS实例上工作时。

我已经测试了以下可能性。

  1. 服务器日期和时间。
  2. 简单邮件也无效: send_mail(&#39;您的主题&#39;,str(e),settings.DEFAULT_FROM_EMAIL,fail_email,fail_silently = False)

2 个答案:

答案 0 :(得分:1)

该错误表示您的服务器时间未与亚马逊服务器的时间同步...

您可以通过运行以下方式检查亚马逊服务器的时间:

wget -S "https://email.us-east-1.amazonaws.com"

在返回的消息中查找时间戳。用适当的区域端点替换us-east-1。

将其与您系统的时间进行比较......

如果您需要NTP服务器,可以使用:

0.amazon.pool.ntp.org
1.amazon.pool.ntp.org
2.amazon.pool.ntp.org
3.amazon.pool.ntp.org

如果这是在您自己的某个Amazon VPC中,您可以在VPC上设置一个DHCP选项,并指定这些ntp服务器。如果您的服务器仍然无法同步,请确保您没有安全组阻止ntp(UDP 123)。

答案 1 :(得分:0)

在我的情况下,我的Ubuntu服务器与SES后端不同步,并向我返回了相同的消息。要解决它:

  1. 检查SES上的时间和当地时间:查看SES时间 wget -S "https://email.eu-west-1.amazonaws.com"根据您的电子邮件端点更改链接。
  2. 使用date

  3. 检查服务器上的时间
  4. 如果它们与sudo apt-get install ntp

  5. 在服务器上安装ntp不同
  6. 最后同步您的服务器时间:

  7. sudo service ntp stop sudo ntpdate -s time.nist.gov sudo service ntp start