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

2024-05-03 10:02:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个带填充字符串的格式化文件,当我用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


Tags: 文件namefromimportlogemailsession格式
3条回答

仔细看看你收到的电子邮件。在

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

我认为这里的问题不在于SES。在

问题是Gmail的用户界面以比例字体显示纯文本电子邮件,而不是固定宽度的字体。请注意IIIIIIII如何比WWWWW占用更少的水平空间,即使字符数相同。这自然会破坏空格格式。相反。。。在

# 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并指定固定宽度的字体。在

我终于解决了我的问题,这个家伙救了我!!方法如下:

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
                                    },
                                }
                            }
                        )

你不需要send_raw_email。如果您看一下^{}方法,它实际上同时接受Text和{}体参数:

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个字符的限制,以避免重新格式化。在

相关问题 更多 >