2015-06-09 9 views
7

Próbuję zaimplementować funkcję w python, w którym chcę wysłać plik jako załącznik do ostrzeżenia e-mail Wszystko działa dobrze. Otrzymuję powiadomienie e-mail o wymaganym przedmiocie, ale jedynym problemem jest to, że dwa razy otrzymuję ten sam załącznik w swoim e-mailu.Załączniki dołączane dwa razy przy użyciu smptplib w pytonie

fileMsg = email.mime.base.MIMEBase('application','octet-stream') 
    fileMsg.set_payload(file('/home/bsingh/python_files/file_dict.txt').read()) 
    #email.encoders.encode_base64(fileMsg) 
    fileMsg.add_header('Content-Disposition','attachment;filename=LogFile.txt') 
    emailMsg.attach(fileMsg) 

    # send email 
    server = smtplib.SMTP(smtp_server) 
    server.starttls() 
    server.login(username, password) 
    server.sendmail(from_add, to_addr,emailMsg.as_string()) 
    server.quit() 
+0

Ten kod nie działa. Jak powstaje 'emailMsg'? – knitti

+0

emailMsg = email.MIMEMultipart.MIMEMultipart ("alternatywa") –

+0

wszystko działa ... to tylko część kodu, który tutaj pokazałem ... tylko problem polega na tym, że otrzymuję załącznik dwa razy i chcę tylko raz –

Odpowiedz

0

Wystąpił problem z wersją. Został rozwiązany

3

Cały Celem yagmail (Jestem deweloper) jest, aby to naprawdę łatwe do wysyłania e-maili, zwłaszcza z potrzebami HTML lub załączników.

Spróbuj następujący kod:

import yagmail 
yag = yagmail.SMTP(from_add, password) 
contents = ['See my attachment below', '/home/bsingh/python_files/file_dict.txt'] 
yag.send(contents = contents) 

zauważy magiczną tutaj: contents jest lista, gdzie element równe ścieżki plik zostanie automatycznie załadowany, mimetype domyślić, i załączeniu.

W grę wchodzi dużo więcej magii, takich jak łatwe do osadzania obrazy, skrypty bez haseł, skrypty bez nazwy użytkownika, łatwe aliasy, inteligentne ustawienia domyślne (zauważ, że pominąłem argumenty to i subject?) I wiele więcej. Radzę/zachęcam do przeczytania jej strony: github :-). Możesz zgłaszać problemy lub dodawać nowe funkcje!

Można uzyskać yagmail za pomocą pip, aby go zainstalować:

pip install yagmail # Python 2 
pip3 install yagmail # Python 3 
+0

moja poczta już to przechodzę wraz z załącznikiem ... tylko problem jest przywiązanie idzie dwa razy ni chcesz go rozwiązać .. –

+0

@ ShrutiSrivastava Korzystanie z tego pakietu pozwoli Ci zaoszczędzić linie kodów (dosłownie te 4 linie są wszystko, czego potrzebujesz), uczyń swoje życie bardzo wygodnym i co najważniejsze, załóż je tylko raz. – PascalVKooten

+0

co z tematem wiadomości e-mail ... czy mogę to również edytować? –

5

I były problemy z tym sam. Miałem 'alternative' jako typ MIMEMultipart mojej wiadomości. Kiedy zmieniłem na domyślny, 'mixed', duplikat zniknął.

Więc jeśli utworzyłeś emailMsg używając MIMEMultipart('alternative'), możesz mieć ten sam problem.

Wierzę, że 'alternative' służy do oferowania zarówno treści tekstowej, jak i html treści wiadomości, więc myślę, że oprócz tego, że z nich korzystasz, musisz zaoferować zarówno dodatek, jak i załącznik.

Mam nadzieję, że to pomaga.

Nie znalazłem jeszcze dobrego wytłumaczenia tego gdziekolwiek; e-mail może się dość skomplikować.

+0

mixed pracował dla mnie przy dołączaniu pliku PDF ... z alternatywą otrzymywałem plik załączony dwa razy. Cieszę się, że natknąłem się na to, ponieważ ścigałem mój ogon. – JeffSpicoli

+1

Ustawienie typu MIMEMultipart na "mieszany" powoduje zerwanie wiadomości e-mail zawierających wersje tekstowe i HTML ciała, tzn. Ciało zostaje dwukrotnie powtórzone. –

Powiązane problemy