2017-01-19 79 views
0

當我將其發送到我在gmail中的帳戶時,我有格式化文件和填充字符串,文件中的所有填充都將被刪除,並且郵件格式不正確因爲gmail不保留原始格式。 如何避免這種情況?如何使用AWS SES向Gmail發送純文本郵件

我嘗試這樣的代碼,但它是使用原始電子郵件不工作:

from email.mime.multipart import MIMEMultipart 
from email.mime.text import MIMEText 
import smtplib 
from email import encoders 

fileHandler = "logg.log" 
session = Session(profile_name="test", region_name="eu-west-1") 
ses = session.client('ses') 
today = datetime.date.today() - datetime.timedelta(days=1) 
for file in sorted(glob.glob(fileHandler + '*'), key=os.path.getmtime): 
    body = MIMEText(open(file, 'r').read()) 
    body['Subject']="aws-log" 
    response = ses.send_raw_email(
          Source = "[email protected]", 
          Destinations=[ 
            "[email protected]", 
           ], 
          RawMessage={ 
           'Data': body.as_string() 
            },) 

即使是使用原始郵件,郵件不來以純文本格式。

這裏是我發送到Gmail的文件:

enter image description here

這是郵件我得到:

enter image description here

回答

0

我終於解決了我的問題,這個傢伙<pre></pre>救了我!這裏是:

body = '<pre width="300" style="font-size: 14px; max-width: 100%;">' + body + '</pre>' 
      subject = objet+" %s" % (today.strftime("%Y-%m-%d")) 
      for email in emailarg.split(','): 
       response = ses.send_email(
          Source = email, 
          Destination={ 
           'ToAddresses': [ 
            email, 
           ], 
          }, 
          Message={ 
           'Subject': { 
            'Data': subject 
           }, 
           'Body': { 
            'Html': { 
             'Data': body 
            }, 
           } 
          } 
         ) 
1

你不應該需要send_raw_email。如果您在send_email方法來看看它實際上既需要TextHtml車身參數:

Message={ 
    'Subject': { 
     'Data': 'string', 
     'Charset': 'string' 
    }, 
    'Body': { 
     'Text': { 
      'Data': 'string', 
      'Charset': 'string' 
     }, 
     'Html': { 
      'Data': 'string', 
      'Charset': 'string' 
     } 
    } 
} 

如果你只是提供一個文本主體,應該讓您的電子郵件,你正在尋找的純文本。

至於Gmail的純文本格式,他們將在78個字符換行按照RFC 2822部分2.1.1: https://tools.ietf.org/html/rfc2822

這是純文本電子郵件公認的標準。您可以自己設置明文格式,但必須遵守每行78個字符的限制以避免重新格式化。

+0

事實上,我知道HTML可以解決我的問題,但我不想使用它,否則郵件將是巨大的和非常有收費的。我真的堅持如何發送格式良好的文本到Gmail。 :/謝謝@DaveMaple的幫助 – JavaQueen

+0

你可以在Html中忽略'Body' - 只提供'Text'參數。 –

+0

是的,我知道。我只給文本,但它不是生的。當我收到郵件時,它通過gmail重新格式化。 – JavaQueen

0

仔細查看收到的電子郵件。

複製它的正文並粘貼到文本編輯器中。你應該發現這些空間實際上是完全正確的。

這裏的問題 - 我相信 - 不是與SES。

問題是,Gmail的UI以比例字體顯示純文本電子郵件,而不是固定寬度的字體。請注意,即使字符數相同,IIIIII也會佔用比WWWWWW更少的橫向空間。這自然會破壞空格的格式。相反...

# IIIIII - code blocks on SO 
# WWWWWW - use a fixed width typeface 
# even though the rest of the post doesn't 
# so I and W are the same width here but not above 

如果你想控制顯示器,你需要使用HTML並指定一個固定寬度的字體。

+0

我知道,但我們確定除HTML以外沒有其他方式或解決方案嗎? :/ @邁克爾 – JavaQueen