2015-05-05 27 views
5

Znalazłem wiele przykładów w sieci, w jaki sposób dołączyć pliki lokalne do wiadomości e-mail. Co chcę zrobić, to dołączyć plik podobny do wiadomości e-mail. Dlaczego pytasz? więc nie muszę zajmować się czyszczeniem plików. Poniżej znajduje się mój kod i mój błąd. Po dużo googling ja nadal nie udało się dostać do pracy, każda pomoc będzie bardzo mile widziane :)Dołącz plik podobny do obiektu do wiadomości e-mail python 3

def email_sup_teams(team_name, contact_list, file_attachemnt): 
    message_list = [] 
    for jobs in file_attachemnt: 
     for k, v in jobs.items(): 
      message_list.append(v + ',') 
    attachment_text = "\n".join(message_list) 
    print(type(attachment_text)) 

    msg = MIMEText(' Failed jobs list. Please see attachment') 
    msg['Subject'] = 'Not run Jobs for ' + team_name 
    msg['From'] = '[email protected]' 
    msg['To'] = '[email protected]' 

    f = io.StringIO(attachment_text) 
    attachment = MIMEText(f.read()) 
    attachment.add_header('Content-Disposition', 'attachment', filename='test_attach')   
    msg.attach(attachment) 

    s = smtplib.SMTP('smlsmtp') 
    s.sendmail(msg['From'], msg['To'], msg.as_string()) 
    s.quit() 
    print('\n' + team_name + ' Email Sent') 

błąd:

<class 'str'> 
Traceback (most recent call last): 
    File "queue_cleaner_main.py", line 85, in <module> 
    sys.exit(main()) 
    File "queue_cleaner_main.py", line 82, in main 
    queue_cleaner_functions.email_sup_teams(t, team_members_emails, attachment_file_of_jobs) 
    File "D:\oppssup\old_job\queue_cleaner_functions.py", line 179, in email_sup_teams 
    msg.attach(attachment) 
    File "C:\Python34\lib\email\mime\nonmultipart.py", line 22, in attach 
    'Cannot attach additional subparts to non-multipart/*') 
email.errors.MultipartConversionError: Cannot attach additional subparts to non-multipart/* 

Odpowiedz

5

Okazuje się, że powinienem przeczytać

https://docs.python.org/3/library/email-examples.html

ściślej. Jestem pewien, że to dlatego, że do budowy poczty e-mail użyłem tylko jednego obiektu typu MIME, ale próbowałem dodać wiele obiektów MIME. Zasadniczo, aby to działało, użyłem poniższego kodu. Szczęśliwe dni!

def email_sup_teams(team_name, contact_list, file_attachemnt): 
    message_list = [] 
    for jobs in file_attachemnt: 
     for k, v in jobs.items(): 
      message_list.append(v + ',') 
    attachment_text = "\n".join(message_list) 
    print(type(attachment_text)) 
    # Create the container (outer) email message. 
    msg = MIMEMultipart() 
    #msg = MIMEText(' Failed jobs list. Please see attachment') 
    msg['Subject'] = 'Not run Jobs for ' + team_name 
    msg['From'] = '[email protected]' 
    msg['To'] = '[email protected]' 
    msg.preamble = 'Failed jobs list. Please see attachment' 
    f = io.StringIO(attachment_text) 
    attachment = MIMEText(f.getvalue()) 
    attachment.add_header('Content-Disposition', 'attachment', filename='jobs_not_run.xls')   
    msg.attach(attachment) 

    s = smtplib.SMTP('smlsmtp') 
    s.sendmail(msg['From'], msg['To'], msg.as_string()) 
    s.quit() 
    print('\n' + team_name + ' Email Sent')