Używam następującej metody do wysyłania poczty z Pythona przy użyciu SMTP. Czy jest to właściwa metoda, czy też brakuje mi jakichś pułapek?
from smtplib import SMTP
import datetime
debuglevel = 0
smtp = SMTP()
smtp.set_debuglevel(debuglevel)
smtp.connect('YOUR.MAIL.SERVER', 26)
smtp.login('USERNAME@DOMAIN', 'PASSWORD')
from_addr = "John Doe <[email protected]>"
to_addr = "[email protected]"
subj = "hello"
date = datetime.datetime.now().strftime( "%d/%m/%Y %H:%M" )
message_text = "Hello\nThis is a mail from your server\n\nBye\n"
msg = "From: %s\nTo: %s\nSubject: %s\nDate: %s\n\n%s"
% ( from_addr, to_addr, subj, date, message_text )
smtp.sendmail(from_addr, to_addr, msg)
smtp.quit()
Odpowiedzi:
Skrypt, którego używam, jest dość podobny; Umieszczam to tutaj jako przykład wykorzystania modułów email. * Do generowania wiadomości MIME; więc ten skrypt można łatwo zmodyfikować, aby dołączyć zdjęcia itp.
Polegam na moim dostawcy usług internetowych, aby dodać nagłówek daty i godziny.
Mój dostawca usług internetowych wymaga ode mnie używania bezpiecznego połączenia SMTP do wysyłania poczty, polegam na module smtplib (do pobrania pod adresem http://www1.cs.columbia.edu/~db2501/ssmtplib.py )
Podobnie jak w Twoim skrypcie, nazwa użytkownika i hasło (podane poniżej wartości fikcyjne) używane do uwierzytelniania na serwerze SMTP są w źródle zwykłym tekstem. To jest słabość bezpieczeństwa; ale najlepsza alternatywa zależy od tego, jak ostrożnie musisz (chcesz?) dbać o ich ochronę.
=========================================
źródło
from ssmtplib import SMTP_SSL as SMTP
zefrom smtplib import SMTP_SSL as SMTP
i ten przykład będzie działać ze standardowej biblioteki Pythona.msg['To'] = ','.join(destination)
, w przeciwnym razie miejsce docelowe nie jest wyświetlane w GmailuMetoda, której często używam ... niewiele się różni, ale trochę
Otóż to
źródło
from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText
Również jeśli chcesz wykonać uwierzytelnianie smtp z TLS w przeciwieństwie do SSL, musisz po prostu zmienić port (użyj 587) i wykonaj smtp.starttls (). To zadziałało dla mnie:
źródło
Główną wadą, jaką widzę, jest to, że nie obsługujesz żadnych błędów: .login () i .sendmail () mają udokumentowane wyjątki, które mogą zgłaszać, i wygląda na to, że .connect () musi mieć jakiś sposób wskazania, że tak było nie można się połączyć - prawdopodobnie wyjątek zgłoszony przez podstawowy kod gniazda.
źródło
Upewnij się, że nie masz żadnych zapór blokujących SMTP. Gdy pierwszy raz próbowałem wysłać wiadomość e-mail, została ona zablokowana zarówno przez Zaporę systemu Windows, jak i przez McAfee - znalezienie ich obu zajęło wieczność.
źródło
A co z tym?
źródło
następujący kod działa dobrze dla mnie:
Ref: http://www.mkyong.com/python/how-do-send-email-in-python-via-smtplib/
źródło
smtpserver.close()
Musi to być:,smtpserver.quit()
ponieważclose()
nie zakończy poprawnie połączenia TLS!close()
zostanie wywołana w trakciequit()
.Powinieneś upewnić się, że formatujesz datę w odpowiednim formacie - RFC2822 .
źródło
Przykładowy kod, który zrobiłem do wysyłania poczty przy użyciu SMTP.
źródło
Widzisz te wszystkie obszerne odpowiedzi? Proszę, pozwólcie mi się promować, robiąc to wszystko w kilku linijkach.
Importuj i połącz:
W takim razie jest to tylko jedna linijka:
W rzeczywistości zamknie się, gdy znajdzie się poza zakresem (lub może zostać zamknięty ręcznie). Ponadto pozwoli ci to zarejestrować swoją nazwę użytkownika w swojej bazie kluczy, dzięki czemu nie będziesz musiał wpisywać hasła w swoim skrypcie (naprawdę przeszkadzało mi to przed napisaniem
yagmail
!)Aby zapoznać się z pakietem / instalacją, wskazówkami i sztuczkami, spójrz na git lub pip , dostępne zarówno dla Pythona 2, jak i 3.
źródło
możesz to zrobić
źródło
Oto działający przykład dla Pythona 3.x
źródło
Na podstawie tego przykładu wykonałem następującą funkcję:
jeśli tylko zdasz,
body
zostanie wysłana zwykła wiadomość tekstowa, ale jeśli przekażeszhtml
argument wraz zbody
argumentem, zostanie wysłany e-mail w formacie HTML (z powrotem do treści tekstowej dla klientów poczty e-mail, które nie obsługują typów html / mime).Przykładowe użycie:
Przy okazji. Jeśli chcesz używać Gmaila jako testowego lub produkcyjnego serwera SMTP, włącz tymczasowy lub stały dostęp do mniej zabezpieczonych aplikacji:
źródło