发送 text/plain 封电子邮件并防止 Outlook 折叠行
Send a text/plain email and prevent Outlook from collapsing lines
我从我的 Web 应用程序发送纯文本邮件(例如密码重置);我很确定我在 header 和文本中都使用了正确的 CRLF
行结尾。有些行可以超过 78 个字符,但 none 超过 998+2.
对于某些邮件,Outlook 邮件客户端会折叠页脚部分中的白色space(在 --
行之后):尽管存在 CRLF
换行符,但它们看起来像是变成了普通的 space 个字符,让我排了很长的一行。 (编辑,澄清:出现换行符,但不是在预期位置,而是仅,由window宽度给出。)
是否有方法告诉 Outlook 保留换行符,例如一些 header?当然,我更喜欢 RFC-conforming 解决方案,但如果它不损害其他客户,它可能没问题。
终于找到了this question and answer,我的解决办法是:
在每个换行符前加上一个制表符,Outlook 可能是 "optimized away",例如因为它后面没有另一个换行符。
如果不费吹灰之力就可以完成,当然生成一个同时包含text/plain
和text/html
的邮件会有所帮助;但如果仅仅因为这个原因而做,就显得有些矫枉过正了。
HTML-only 邮件也可以,但它们不如纯文本邮件可信(因为人们可能会被诱骗激活其他 URL 而不是 link 文本中的 URL) ,所以例如SpamAssassin 不喜欢它们。
这是一个 Python 函数,它在每个换行符之前插入一个制表符(但不在两个或更多的序列之前):
def harden_linebreaks(s):
tmp = []
prev = None
for line in s.splitlines():
tmp.append((prev, line))
prev = line
tmp.append((prev, None))
res = []
for tup in tmp:
line, next = tup
if (line and next
and not line.endswith('\t')):
line += '\t'
res.append(line)
return '\n'.join(res[1:])
我从我的 Web 应用程序发送纯文本邮件(例如密码重置);我很确定我在 header 和文本中都使用了正确的 CRLF
行结尾。有些行可以超过 78 个字符,但 none 超过 998+2.
对于某些邮件,Outlook 邮件客户端会折叠页脚部分中的白色space(在 --
行之后):尽管存在 CRLF
换行符,但它们看起来像是变成了普通的 space 个字符,让我排了很长的一行。 (编辑,澄清:出现换行符,但不是在预期位置,而是仅,由window宽度给出。)
是否有方法告诉 Outlook 保留换行符,例如一些 header?当然,我更喜欢 RFC-conforming 解决方案,但如果它不损害其他客户,它可能没问题。
终于找到了this question and answer,我的解决办法是: 在每个换行符前加上一个制表符,Outlook 可能是 "optimized away",例如因为它后面没有另一个换行符。
如果不费吹灰之力就可以完成,当然生成一个同时包含text/plain
和text/html
的邮件会有所帮助;但如果仅仅因为这个原因而做,就显得有些矫枉过正了。
HTML-only 邮件也可以,但它们不如纯文本邮件可信(因为人们可能会被诱骗激活其他 URL 而不是 link 文本中的 URL) ,所以例如SpamAssassin 不喜欢它们。
这是一个 Python 函数,它在每个换行符之前插入一个制表符(但不在两个或更多的序列之前):
def harden_linebreaks(s):
tmp = []
prev = None
for line in s.splitlines():
tmp.append((prev, line))
prev = line
tmp.append((prev, None))
res = []
for tup in tmp:
line, next = tup
if (line and next
and not line.endswith('\t')):
line += '\t'
res.append(line)
return '\n'.join(res[1:])