Próbuję wysłać wiadomość e-mail (Gmail) za pomocą języka Python, ale otrzymuję następujący błąd.
Traceback (most recent call last):
File "emailSend.py", line 14, in <module>
server.login(username,password)
File "/usr/lib/python2.5/smtplib.py", line 554, in login
raise SMTPException("SMTP AUTH extension not supported by server.")
smtplib.SMTPException: SMTP AUTH extension not supported by server.
Skrypt w języku Python jest następujący.
import smtplib
fromaddr = '[email protected]'
toaddrs = '[email protected]'
msg = 'Why,Oh why!'
username = '[email protected]'
password = 'pwd'
server = smtplib.SMTP('smtp.gmail.com:587')
server.starttls()
server.login(username,password)
server.sendmail(fromaddr, toaddrs, msg)
server.quit()
Odpowiedzi:
Musisz powiedzieć,
EHLO
zanim wpadniesz prosto naSTARTTLS
:Ponadto należy stworzyć naprawdę
From:
,To:
aSubject:
nagłówki wiadomości, oddzielone od treści wiadomości przez pustą linię i użyciaCRLF
jako znaczniki EOL.Na przykład
źródło
EHLO
literówkę. Po tym, jak wiele razy próbowałem HELO, ale odpowiedź była inna. Wiele godzin zajęło ustalenie, że EHLO jest tak naprawdę poleceniem zrozumiałym dla SMTP i zrobiłem literówkę.jeśli chcesz użyć portu 465, musisz utworzyć
SMTP_SSL
obiekt:źródło
Wpadłem na podobny problem i natknąłem się na to pytanie. Wystąpił błąd uwierzytelnienia SMTP, ale moja nazwa użytkownika / hasło było prawidłowe. Oto, co to naprawiło. Przeczytałem to:
https://support.google.com/accounts/answer/6010255
Krótko mówiąc, Google nie zezwala na logowanie się za pomocą smtplib, ponieważ oznaczało ten rodzaj logowania jako „mniej bezpieczny”, więc musisz przejść do tego linku, gdy jesteś zalogowany na swoje konto Google, i zezwól na dostęp:
https://www.google.com/settings/security/lesssecureapps
Po ustawieniu (patrz mój zrzut ekranu poniżej), powinno działać.
Zaloguj się teraz działa:
Odpowiedź po zmianie:
Odpowiedź wcześniej:
Wciąż nie działa? Jeśli nadal pojawia się błąd SMTPAuthenticationError, ale teraz kod to 534, to dlatego, że lokalizacja jest nieznana. Śledź ten link:
https://accounts.google.com/DisplayUnlockCaptcha
Kliknij Kontynuuj, co powinno dać 10 minut na zarejestrowanie nowej aplikacji. Przejdź teraz do kolejnej próby logowania i powinno to działać.
AKTUALIZACJA : Wydaje się, że to nie działa od razu, możesz utknąć na chwilę, otrzymując ten błąd w smptlib:
Komunikat mówi, aby zalogować się za pomocą przeglądarki:
Po włączeniu „lesssecureapps” idź na kawę, wróć i ponownie spróbuj użyć linku „DisplayUnlockCaptcha”. Z doświadczenia użytkownika może upłynąć nawet godzina, zanim zmiana zostanie wprowadzona. Następnie spróbuj ponownie się zalogować.
źródło
Nie rozumiesz OOP?
źródło
To działa
Utwórz hasło do aplikacji Gmail!
Po utworzeniu pliku utwórz plik o nazwie
sendgmail.py
Następnie dodaj ten kod :
Jeśli więc ci się powiedzie, zobaczysz taki obraz:
Przetestowałem, wysyłając wiadomość e-mail zi do siebie.
źródło
Można go znaleźć tutaj: http://jayrambhia.com/blog/send-emails-using-python
źródło
Nie ma bezpośredniego związku, ale nadal warto podkreślić, że moja paczka próbuje sprawić, by wysyłanie wiadomości Gmail było naprawdę szybkie i bezbolesne. Próbuje także utrzymywać listę błędów i natychmiast wskazuje rozwiązanie.
Dosłownie wystarczyłby ten kod, aby zrobić dokładnie to, co napisałeś:
Lub jedna wkładka:
Pakiet / instalację można znaleźć na git lub pip , dostępnym zarówno dla Pythona 2, jak i 3.
źródło
Oto przykład interfejsu API Gmaila. Chociaż jest to bardziej skomplikowane, jest to jedyna metoda, którą znalazłem, która działa w 2019 roku. Ten przykład został wzięty i zmodyfikowany z:
https://developers.google.com/gmail/api/guides/sending
Musisz stworzyć projekt z interfejsami API Google za pośrednictwem ich strony internetowej. Następnie musisz włączyć interfejs API GMAIL dla swojej aplikacji. Utwórz poświadczenia, a następnie pobierz je, zapisz jako poświadczenia. Json.
źródło
Obecnie dostępny jest interfejs API Gmaila, który umożliwia wysyłanie wiadomości e-mail, czytanie wiadomości e-mail i tworzenie wersji roboczych za pośrednictwem usługi REST. W przeciwieństwie do wywołań SMTP, nie blokuje, co może być dobrą rzeczą dla serwerów opartych na wątkach wysyłających wiadomości e-mail w wątku żądania (np. Serwery python). Interfejs API jest również dość wydajny.
Najłatwiej jest skonfigurować, jeśli masz uprawnienia administratora Google Apps w domenie, ponieważ wtedy możesz udzielić klientowi ogólnych uprawnień. W przeciwnym razie musisz majstrować przy uwierzytelnianiu i autoryzacji OAuth.
Oto jego istota:
https://gist.github.com/timrichardson/1154e29174926e462b7a
źródło
świetna odpowiedź od @David, tutaj jest dla Python 3 bez ogólnego try-wyjątkiem:
źródło
Włącz mniej bezpieczne aplikacje na swoim koncie Gmail i użyj (Python> = 3.6):
źródło
<{gmailUser}>
go<YourAlias>
.Wydaje się, że to problem starego
smtplib
. Wepython2.7
wszystkim działa dobrze.Aktualizacja : Tak,
server.ehlo()
również może pomóc.źródło
źródło
źródło