首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pyramid_mailer‘`Message`’和‘`Content Transfer-Encoding`’

pyramid_mailer‘`Message`’和‘`Content Transfer-Encoding`’
EN

Stack Overflow用户
提问于 2019-01-21 14:51:20
回答 1查看 192关注 0票数 1

我用pyramid_mailer发送电子邮件,发现了一个奇怪的问题,当我使用Office365作为我的SMTP服务器时,它会在我的邮件中添加随机的=字符。我对任何其他邮件服务器都没有这个问题(我用gmail和我自己的postfix服务器测试了这个问题)

我发电子邮件如下:

代码语言:javascript
复制
from pyramid_mailer.mailer import Mailer

from pyramid_mailer.message import Attachment, Message

mailer = Mailer()
mailer.smtp_mailer.hostname = "test.mail.at.office365"
mailer.smtp_mailer.username = "my_user"
mailer.smtp_mailer.password = "secret"
mailer.smtp_mailer.port = 587
mailer.smtp_mailer.tls = True

message = Message(
    subject="Test",
    sender="my_user@my_domain.com",
    recipients="test_user@test_domain.com",
    body="very long text, at least 75 characters long so Office 365 will break it and insert annoying '=' into message",
    html="very long text, at least 75 characters long so Office 365 will break it and insert annoying '=' into message",
)

mailer.send_immediately(message)

我在谷歌上搜索,发现这与换行和Transfer-Content-Encoding有关。事实上,如果我每增加一个~50个字符,就不会看到\r\n添加了=。但问题是我可能想要发送一个超链接会比那个更长..。

金字塔文档(mailer/en/latest/)说,我可以使用Attachment而不是普通字符串。事实上,一旦我这样做,我就可以将这个Transfer-Content-Encoding设置为类似于base64的东西(如这里建议的:https://jeremytunnell.com/2009/01/04/really-hairy-problem-with-seemingly-random-crlf-and-spaces-inserted-in-emails/),但是我的消息会显示为附件,而不是常规消息.

似乎没有办法将这个Transfer-Content-Encoding添加到Message对象中.我试着使用Message.extra_headers = {'Transfer-Content-Encoding': 'base64'},但这没有帮助。

我完全没有主意了,如果能帮忙的话.

-编辑--

感谢下面“乱糟糟”的回答:

代码语言:javascript
复制
from pyramid_mailer.message import Attachment
my_message = "very long text, at least 75 characters long so Office 365 will break it and insert annoying '=' into message"
body_html = Attachment(data=my_message, transfer_encoding="base64", disposition='inline')
body_text = Attachment(data=my_message, transfer_encoding="base64", disposition='inline')

然后将body_htmlbody_text传递给Message构造函数。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-21 15:55:49

这是您需要设置的“内容处理”标题,以控制接收方如何使用该内容。

将其设置为“附件”以允许下载文件,使用“内联”可以将内容(例如徽标)直接包含到电子邮件中,等等:

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition

我希望它能指引你走向正确的方向。

编辑:

使用pyramid_mailer包应该是这样的:

代码语言:javascript
复制
from pyramid_mailer.message import Attachment
attachment = Attachment(data=some_data, transfer_encoding="base64", disposition='inline')
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54292462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档