如何使用AWS SES将纯文本邮件发送到Gmail

时间:2017-01-19 08:30:17

标签: python email amazon-web-services amazon-ses

我有一个带有填充字符串的格式化文件,当我将它发送到我在gmail中的帐户时,文件中的所有填充都被删除,并且邮件格式不正确,因为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 = "smymail@.com",
                            Destinations=[
                                    "smymail@fluksaqua.com",
                                ],
                            RawMessage={
                                'Data': body.as_string()
                                    },)

即使使用原始邮件,邮件也不是纯文本。

这是我发送给gmail的文件:

enter image description here

这是我收到的邮件:

enter image description here

3 个答案:

答案 0 :(得分:1)

你不应该send_raw_email。如果您查看send_email方法,它实际上需要TextHtml身体参数:

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

如果您只是提供一个Text正文,可以为您提供您正在寻找的纯文本电子邮件。

就gmail纯文本格式而言,它们将根据RFC 2822第2.1.1节将行换行为78个字符: https://tools.ietf.org/html/rfc2822

这是纯文本电子邮件的公认标准。您可以自己为明文格式化邮件,但必须遵守每行78个字符的限制以避免重新格式化。

答案 1 :(得分: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并指定固定宽度的字体。

答案 2 :(得分: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
                                    },
                                }
                            }
                        )