如何在Python3中替换Python2的MimeWriter.MimeWriter?

问题描述 投票:0回答:1

我们正在用新服务器替换旧服务器,默认安装的Python是Python3。 我们正在尝试将Python2代码更新为Python3。我已经达到了 Python3 中似乎不存在的东西。 Python2 代码如下所示:

import MimeWriter, cStringIO

#...
out = cStringIO.StringIO()
writer = MimeWriter.MimeWriter(out)
#...

现在,我明白了:

Traceback (most recent call last):
  File "EventsMailer.py", line 2, in <module>
    import MimeWriter, cStringIO
ModuleNotFoundError: No module named 'MimeWriter'

有关此更改的信息很少。我发现的是:

  1. Python 2.7:“MimeWriter 现在在导入时引发 DeprecationWarning。”
  2. Python 3.6:“MimeWriter 模块和 mimify 模块已 已弃用;请改用电子邮件套餐。”

但是Python3的“email”模块documentation甚至没有提到“MimeWriter”;没有关于我如何替换此代码的提示/说明。

python-3.x
1个回答
0
投票

您没有显示支持代码,并且实际上没有表明您是否正在尝试构建电子邮件。但是,假设您正在尝试构建一封电子邮件,这里有一个一般示例,它应该说明从头开始创建多部分 MIME 电子邮件的步骤,包括替代正文格式(如 HTML)和单独的附件,并获取整个结果:一个字符串(因为您是在 StringIO 对象上构建它的)。如果你仔细看看,电子邮件包文档下还有一些其他示例。

from email.message import EmailMessage
from email.policy import SMTP
m = EmailMessage()
m['To'] = '[email protected]'
m['From'] = '[email protected]'
m['Subject'] = 'Test'
m.set_content('Test plain text')
m.add_alternative("<html><body>test HTML</body></html>", subtype="html")
m.add_attachment(b'bytes as an attachment', maintype='application', subtype='octet-stream')
print(m.as_string())
print(m.as_bytes(policy=SMTP))

在当前版本的Python3中,smtplib库实际上可以获取EmailMessage对象,因此如果您要发送电子邮件,则不需要将其作为字符串或字节获取。

顺便说一句,不要按原样发送上面的示例。很可能有人实际上拥有 [电子邮件受保护]

© www.soinside.com 2019 - 2024. All rights reserved.