Создание и сохранение.eml файл с python 3.3
Я пытаюсь генерировать электронные письма, используя стандартную библиотеку электронной почты, и сохранять их как .файлы eml.
Я, должно быть, не понимаю, как электронная почта.генератор работает, потому что я продолжаю получать ошибку ' 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)
Есть идеи?
2 ответов:
Вы должны передать открытый файл (в режиме записи) в
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)Примечание:
with open(outfile_name, 'w') as outfileоткрывает файл по путиoutfile_nameв режиме записи и присваивает файловому указателю на открытый файл значениеoutfile. Менеджер контекста также позаботится о закрытии файла для вас после выхода из блокаwith.
os.path.join()присоединится пути в форме кросс-Платта, поэтому вы должны предпочесть его сцеплению путей вручную.
os.getcwd()вернет ваш текущий рабочий каталог. Если вы хотите, чтобы ваш файл был сохранен в другом месте, просто измените его соответствующим образом.
Вот модифицированное решение, которое работает и с дополнительными заголовками. (Это было проверено с Python 2.6)
import os from email import generator from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText html_data = ... msg = MIMEMultipart('alternative') msg['Subject'] = ... msg['From'] = ... msg['To'] = ... msg['Cc'] = ... msg['Bcc'] = ... headers = ... dict of header key / value pairs ... for key in headers: value = headers[key] if value and not isinstance(value, basestring): value = str(value) msg[key] = value part = MIMEText(html_data, 'html') msg.attach(part) outfile_name = os.path.join("/", "temp", "email_sample.eml") with open(outfile_name, 'w') as outfile: gen = generator.Generator(outfile) gen.flatten(msg) print "=========== DONE ============"
Comments