Python:如何更改 smtp/MIME 脚本中的“to”字段而不是添加一个新字段?

Posted

技术标签:

【中文标题】Python:如何更改 smtp/MIME 脚本中的“to”字段而不是添加一个新字段?【英文标题】:Python: How can I change the "to" field in smtp/MIME script rather than adding a new one? 【发布时间】:2011-08-11 20:57:38 【问题描述】:

这是我正在使用的代码的摘录。我正在循环添加电子邮件的部分;我的问题不是更改每个循环上的“to”字段,而是附加“to”数据。显然这会导致一些问题,因为 to 字段最终会变得越来越长。我试过 msgRoot.del_param('To') 无济于事。我什至尝试将 msgRoot['To'] 设置为引用列表的第一个索引,这样我就可以简单地更改该列表项的值(也不起作用)。

from email.MIMEMultipart import MIMEMultipart
msgRoot = MIMEMultipart('related')
msgRoot['To'] = 'email@email.com'

【问题讨论】:

【参考方案1】:

您可以使用replace_header method。

replace_header(_name, _value)

替换标题。替换消息中与_name 匹配的第一个标头,保留标头顺序和字段名称大小写。如果没有找到匹配的标头,则会引发 KeyError。

2.2.2 版中的新功能。

例如,

if msgRoot.has_key('to'):
    msgRoot.replace_header('to', someAdress)
else:
    msgRoot['to'] = 'email@email.com'

【讨论】:

在 Python 3.5 中我不得不使用 if 'to' in message:,因为 has_key 已被弃用。 Python 3 更改了 dict 语法。请参阅docs.python.org/3/whatsnew/3.0.html#builtins“已删除。dict.has_key() - 改用 in 运算符。”【参考方案2】:

我只是这样做:

del msgRoot["To"]
msgRoot["To"] = "email@email.com"

我在http://www.royalbarrel.com/ 的自制博客平台使用 Mime 消息以这种方式存储其博客文章。效果很好。如果有人添加评论,我会将消息升级到 MimeMultipart,并让第一个有效负载成为实际的博客文章,随后的有效负载是 cmets。

【讨论】:

以上是关于Python:如何更改 smtp/MIME 脚本中的“to”字段而不是添加一个新字段?的主要内容,如果未能解决你的问题,请参考以下文章

python 是不是有一个强大的 pop3、smtp、mime 库,我可以在其中构建 web 邮件界面?

PEAR 邮件 SMTP/MIME 和 HTML 格式

如何使用 python 脚本更改 tcp keepalive 计时器?

如何保存对 Python 列表所做的更改,以便在重新运行脚本后更新? [复制]

如何在 PHP 中从不同的电子邮件源获取 XML/TXT 附件?

如何在 Python 脚本中为 Autodesk Maya 2016 中的对象添加颜色?