我正在尝试使用标准电子邮件库生成电子邮件并将其保存为 .eml 文件。
我一定不明白 email.generator 是如何工作的,因为我不断收到错误“AttributeError:'str'对象没有属性'write'”。
from email import generator
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
active_dir = 'c:\\'
class Gen_Emails(object):
def __init__(self):
self.EmailGen()
def EmailGen(self):
sender = 'sender'
recepiant = 'recipiant'
subject = 'subject'
msg = MIMEMultipart('alternative')
msg['Subject'] = subject
msg['From'] = sender
msg['To'] = recepiant
html = """\
<html>
<head></head>
<body>
<p> hello world </p>
</body>
</html>
"""
part = MIMEText(html, 'html')
msg.attach(part)
self.SaveToFile(msg)
def SaveToFile(self,msg):
out_file = active_dir
gen = generator.Generator(out_file)
gen.flatten(msg)
有任何想法吗?
您应该将打开的文件(以写入模式)传递给Generator()。目前,您仅向其传递一个字符串,这就是为什么它在尝试调用时失败的原因.write()
在绳子上。
所以做这样的事情:
import os
cwd = os.getcwd()
outfile_name = os.path.join(cwd, 'message.eml')
class Gen_Emails(object):
# ...
def SaveToFile(self,msg):
with open(outfile_name, 'w') as outfile:
gen = generator.Generator(outfile)
gen.flatten(msg)
Note: with open(outfile_name, 'w') as outfile
打开路径中的文件outfile_name
处于写模式并将文件指针分配给打开的文件outfile
。退出后,上下文管理器还会为您关闭文件。with
block.
os.path.join()
将以跨平台的方式连接路径,这就是为什么您应该更喜欢它而不是手动连接路径。
os.getcwd()
将返回您当前的工作目录。如果您希望将文件保存在其他地方,只需相应地更改它即可。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)