到目前为止,我还无法在 stackexchange 或 Google 上找到解决此特定问题的方法。
在 Python 中有很多将文件附加到多部分消息的示例,但我想从已解析的消息中提取附件,然后将其重新附加到新的多部分电子邮件中。
在我对文档的解释之后,这就是我执行此任务的方式,并在一个小的工作测试脚本中进行了演示。
#!/usr/bin/env python
import sys
from email.parser import Parser
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
email = Parser().parse(sys.stdin)
payloads = email.get_payload()
newMail = MIMEMultipart()
newMail['From'] = 'me@domain.tld'
newMail['Subject'] = 'Some subject'
newMail['To'] = 'someguy@ibm.com'
newMail.preamble = 'You need a MIME reader'
for p in payloads:
p.add_header('Content-Disposition', 'attachment', filename='att.eml')
newMail.attach(p)
body = MIMEText('This is some body')
newMail.attach(body)
o = open('testoutput', 'w')
o.write(newMail.as_string())
o.close()
sys.exit(0)
这实际上是一个成功的测试,当我检查生成的 testoutput 文件时看起来就像预期的那样。
但是,这是我正在尝试制作的代码,但它失败并显示以下消息。
Traceback (most recent call last):
File "../devops/spam/spamutbildning.py", line 232, in <module>
if main():
File "../devops/spam/spamutbildning.py", line 127, in main
messageText = newMail.as_string()
File "/usr/lib/python2.6/email/message.py", line 135, in as_string
g.flatten(self, unixfrom=unixfrom)
File "/usr/lib/python2.6/email/generator.py", line 83, in flatten
self._write(msg)
File "/usr/lib/python2.6/email/generator.py", line 115, in _write
self._write_headers(msg)
File "/usr/lib/python2.6/email/generator.py", line 161, in _write_headers
header_name=h, continuation_ws='\t').encode()
File "/usr/lib/python2.6/email/header.py", line 403, in encode
return self._encode_chunks(newchunks, maxlinelen)
File "/usr/lib/python2.6/email/header.py", line 363, in _encode_chunks
_max_append(chunks, s, maxlinelen, extra)
File "/usr/lib/python2.6/email/quoprimime.py", line 97, in _max_append
L.append(s.lstrip())
AttributeError: 'tuple' object has no attribute 'lstrip'
我不明白第newMail.as_string()
127 行和我试图用作字符串的这个元组之间的关系。
编辑:我无法回答我自己的问题,但我已经确定了问题。具体__setitem__
在Message
对象中的使用。
它应该是这样的。
msg['from'] = 'from me'
这就是我正在做的事情,但是当我改用 add_header 时,它的效果要好得多。每当我使用缩写形式 [..]=foo 时,都会出现元组错误。