Создание и сохранение.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)


Есть идеи?

751   2  

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

    Ничего не найдено.