如何使用 AWS SES 将纯文本邮件发送到 gmail
How to send a plain text mail using AWS SES to gmail
我有一个带填充字符串的格式化文件,当我将它发送到我在 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 的文件:
这是我收到的邮件:
你不应该需要 send_raw_email
。如果您看一下 send_email
方法,它实际上需要 Text
和 Html
正文参数:
Message={
'Subject': {
'Data': 'string',
'Charset': 'string'
},
'Body': {
'Text': {
'Data': 'string',
'Charset': 'string'
},
'Html': {
'Data': 'string',
'Charset': 'string'
}
}
}
如果您只提供一个文本正文,应该可以找到您要查找的 plain-text 电子邮件。
就 gmail 纯文本格式而言,他们将根据 RFC 2822 第 2.1.1 节以 78 个字符换行:
https://www.rfc-editor.org/rfc/rfc2822
这是纯文本电子邮件的公认标准。您可以自己将消息格式化为纯文本,但必须遵守每行 78 个字符的限制以避免重新格式化。
仔细查看您收到的电子邮件。
复制正文并将其粘贴到文本编辑器中。您应该会发现 space 实际上是完全正确的。
我认为这里的问题与 SES 无关。
问题是 Gmail 的 UI 以比例字体显示纯文本电子邮件,而不是 fixed-width 字体。请注意 IIIIII 占用的水平 space 比 WWWWWW 少,即使字符数相同。这自然会破坏 spaces 的格式。反之...
# 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 并指定 fixed-width 字体。
我的问题终于解决了,这家伙<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
},
}
}
)
我有一个带填充字符串的格式化文件,当我将它发送到我在 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 的文件:
这是我收到的邮件:
你不应该需要 send_raw_email
。如果您看一下 send_email
方法,它实际上需要 Text
和 Html
正文参数:
Message={
'Subject': {
'Data': 'string',
'Charset': 'string'
},
'Body': {
'Text': {
'Data': 'string',
'Charset': 'string'
},
'Html': {
'Data': 'string',
'Charset': 'string'
}
}
}
如果您只提供一个文本正文,应该可以找到您要查找的 plain-text 电子邮件。
就 gmail 纯文本格式而言,他们将根据 RFC 2822 第 2.1.1 节以 78 个字符换行: https://www.rfc-editor.org/rfc/rfc2822
这是纯文本电子邮件的公认标准。您可以自己将消息格式化为纯文本,但必须遵守每行 78 个字符的限制以避免重新格式化。
仔细查看您收到的电子邮件。
复制正文并将其粘贴到文本编辑器中。您应该会发现 space 实际上是完全正确的。
我认为这里的问题与 SES 无关。
问题是 Gmail 的 UI 以比例字体显示纯文本电子邮件,而不是 fixed-width 字体。请注意 IIIIII 占用的水平 space 比 WWWWWW 少,即使字符数相同。这自然会破坏 spaces 的格式。反之...
# 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 并指定 fixed-width 字体。
我的问题终于解决了,这家伙<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
},
}
}
)