繁体   English   中英

如何使用AWS SES向gmail发送纯文本邮件

[英]How to send a plain text mail using AWS SES to gmail

我有一个带填充字符串的格式化文件,当我用gmail将其发送到我的帐户时,该文件中的所有填充都将被删除,并且邮件格式不正确,因为gmail无法保持原始格式。 如何避免这种情况?

我尝试了此代码,但使用Raw email无法正常工作:

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的文件:

在此处输入图片说明

这是我收到的邮件:

在此处输入图片说明

您不需要send_raw_email 如果您查看send_email方法,它实际上会同时使用TextHtml正文参数:

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

如果您仅提供一个文本正文,它将为您提供所需的纯文本电子邮件。

至于gmail纯文本格式,按照RFC 2822第2.1.1节的规定,它们将以78个字符换行: https : //tools.ietf.org/html/rfc2822

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

请仔细查看您收到的电子邮件。

复制其主体并将其粘贴到文本编辑器中。 您应该发现空格实际上是完全正确的。

我认为,这里的问题不是SES。

问题在于,Gmail的用户界面以比例字体而不是固定宽度字体显示纯文本电子邮件。 请注意,即使字符数相同,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并指定固定宽度的字体。

我终于解决了我的问题,这个人<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
                                    },
                                }
                            }
                        )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM