2014-10-10 68 views
2
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 = ['[email protected]'] 
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的CentOS运行这段代码instance.i我收到以下错误BotoServerError:400错误的请求:邮件没有发送

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('你的主题,STR(E),settings.DEFAULT_FROM_EMAIL,fail_email,fail_silently = FALSE)
+1

好错误是说您的电子邮件请求时间戳可能超过5分钟时间漂移?服务器上'date'的输出是什么。 – dreamriver 2014-10-10 04:34:52

回答

1

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

您可以通过运行检查Amazon的服务器的时间:

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

找返回的消息中的时间戳。用您适当的区域终端替换我们的东1。

比较,为您的系统的时间...

,如果你需要一个NTP服务器,你可以使用:

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

如果这是你自己的Amazon的VPC之一,你可以设置一个使用指定的那些ntp服务器在VPC上设置DHCP选项。如果您的服务器仍未同步,请确保您没有安全组阻止ntp(UDP 123)。

0

就我而言,我的Ubuntu服务器与SES后端不同步,并向我返回了相同的消息。要解决这个问题:

  1. 检查SES的时间和本地时间:检查SES时间 wget -S "https://email.eu-west-1.amazonaws.com"变化取决于你的电子邮件端点的链接。
  2. 检查一次你的服务器上date

  3. 如果他们是不同的服务器sudo apt-get install ntp

  4. 最后安装NTP syncronize服务器时间:

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