2014-10-10 63 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