Ręczne wysyłanie wielu wiadomości e-mail jest żmudnym zadaniem. Możesz korzystać z usług innych firm, aby wysyłać e-maile zbiorczo naraz.
Co powiesz na stworzenie własnego dostosowanego skryptu do wysyłania wiadomości e-mail?
Czy to nie cudowne?
Tak jest. Zamierzamy napisać skrypt w Pythonie do wysyłania e-maili.
Python ma bibliotekę o nazwie smtplib, która służy do wysyłania wiadomości e-mail. Biblioteka smtplib jest oparta na protokole SMTP (Simple Mail Transport Protocol). SMTP służy do wysyłania wiadomości e-mail do innych osób.
Spis treści:
Skonfiguruj Gmaila
Tutaj użyjemy Gmaila jako dostawcy poczty e-mail. Google nie zezwala na logowanie się skryptów. Musimy też wprowadzić zmianę w zabezpieczeniach naszego konta Gmail, która umożliwi skryptom logowanie się na nasze konto Gmail.
Zmiana opcji bezpieczeństwa na naszym koncie Gmail nie jest dobra, ponieważ umożliwia innym bardzo łatwy dostęp do konta. Zaleca się utworzenie nowego konta Gmail. Przejdź do ustawień tutaj i włącz ustawienie Zezwalaj na mniej bezpieczne aplikacje: WŁ.
Jeśli nie masz ochoty włączyć powyższego ustawienia, możesz użyć Google API, aby zalogować się na swoje konto Gmail. Możesz znaleźć skrypt do używania interfejsów API Google do uwierzytelniania tutaj.
Kroki, aby wysłać pocztę
Aby wysłać wiadomość e-mail przy użyciu biblioteki smtplib, należy wykonać określone czynności. Zobaczmy najpierw kroki, a potem napiszemy skrypt.
# 1. Łączenie z serwerem SMTP
Każdy usługodawca będzie miał inną nazwę domeny i port serwera SMTP. Musimy użyć nazwy domeny serwera SMTP i portu dostawcy poczty e-mail, którego będziemy używać w skrypcie. Nazwa domeny serwera SMTP i port Gmaila to smtp.gmail.com i 465.
Będziemy używać szyfrowania SSL do połączenia z serwerem SMTP, ponieważ jest ono bezpieczniejsze niż szyfrowanie TSL. Jeśli chcesz korzystać z szyfrowania TSL, użyj portu 587 zamiast 465. Nazwa domeny serwera SMTP będzie różna w zależności od dostawcy usług pocztowych.
Kod do połączenia z serwerem SMTP
server = smtplib.SMTP_SSL(smtp_server_domain_name, port, context=ssl_context)
#2. Zaloguj sie
Po nawiązaniu połączenia z serwerem SMTP możemy zalogować się za pomocą adresu e-mail i hasła metodą obiektu logowania SMTP. Kod wygląda następująco.
server.login(sender_email, password)
#3. Wyślij maila
Po zalogowaniu nie ma możliwości, abyśmy mogli czekać z wysłaniem wiadomości. Wyślij wiadomość za pomocą metody sendmail. Upewnij się, że wysyłasz wiadomość e-mail w następującym formacie.
Temat: your_subject_for newline mail_content
Spacje nie są konieczne. Służą tylko do wyjaśnienia w powyższym formacie. Zobaczmy przykładowy kod.
server.sendmail(sender_mail, email, f"Subject: {subject}n{content}")
#4. Zrezygnować
Nie zapomnij zamknąć SMTP c
Widzieliśmy kroki, aby wysłać pocztę za pomocą Pythona. Ale nie omówiliśmy całego kodu. Przejdźmy szybko przez kod.
import smtplib, ssl class Mail: def __init__(self): self.port = 465 self.smtp_server_domain_name = "smtp.gmail.com" self.sender_mail = "GMAIL_ADDRESS" self.password = "SECURE_PASSWORD" def send(self, emails, subject, content): ssl_context = ssl.create_default_context() service = smtplib.SMTP_SSL(self.smtp_server_domain_name, self.port, context=ssl_context) service.login(self.sender_mail, self.password) for email in emails: result = service.sendmail(self.sender_mail, email, f"Subject: {subject}n{content}") service.quit() if __name__ == '__main__': mails = input("Enter emails: ").split() subject = input("Enter subject: ") content = input("Enter content: ") mail = Mail() mail.send(mails, subject, content)
Stworzyliśmy klasę o nazwie Mail. I ma metodę o nazwie send, aby wysłać e-maile. Pisanie lekcji lub po prostu nie zależy od Ciebie. Klasa czyni go bardziej czytelnym. Zaimplementowaliśmy wszystkie kroki omówione powyżej jeden po drugim w metodzie send.
Hurra! wysłałeś wiadomość za pomocą skryptu Pythona.
Zawartość HTML
Co zrobić, jeśli chcesz wysłać wiadomość w formacie HTML? Czy to możliwe?
Tak czemu nie. Pocztę możemy wysłać za pomocą biblioteki HTML o nazwie email.mime. To wbudowana biblioteka.
The MIM to standard używany do rozszerzenia formatu wiadomości e-mail o obsługę programów użytkowych, wideo, obrazów itp.,
Z modułu email.mime potrzebujemy dwóch klas. Są to MIMEText i MIMEMultipart. Zobaczmy krótkie wyjaśnienie na ich temat.
# 1. Tekst MIME
Klasa MIMEText służy do zapisywania treści naszej poczty w formacie HTML. Stworzymy instancję klasy MIMEText przekazując treść HTML i typ zawartości. Zobacz przykładowy kod poniżej.
html_content = MIMEText(html_template, 'html')
Niektóre usługi pocztowe nie obsługują renderowania HTML. Dlatego lepiej jest utworzyć dwie instancje klasy MIMEText dla zwykłego tekstu i HTML.
#2. MIMEMWieloczęściowy
Klasa MIMEMultipart służy do uproszczenia formatowania i pisania tematu, od adresu do adresu itp. Treść utworzoną za pomocą klasy MIMEText przekażemy do MIMEMultipart za pomocą metody attach.
Musimy się upewnić, że instancja MIMEMultipart jest tworzona z argumentem alternatywnym do renderowania zwykłego tekstu lub HTML. Wyślijmy wiadomość z treścią HTML.
import smtplib, ssl from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart class Mail: def __init__(self): ... def send(self, emails): ssl_context = ssl.create_default_context() service = smtplib.SMTP_SSL(self.smtp_server_domain_name, self.port, context=ssl_context) service.login(self.sender_mail, self.password) for email in emails: mail = MIMEMultipart('alternative') mail['Subject'] = 'newsblog.pl Celebrations' mail['From'] = self.sender_mail mail['To'] = email text_template = """ newsblog.pl Hi {0}, We are delighted announce that our website hits 10 Million views this month. """ html_template = """ <h1>newsblog.pl</h1> <p>Hi {0},</p> <p>We are delighted announce that our website hits <b>10 Million</b> views last month.</p> """ html_content = MIMEText(html_template.format(email.split("@")[0]), 'html') text_content = MIMEText(text_template.format(email.split("@")[0]), 'plain') mail.attach(text_content) mail.attach(html_content) service.sendmail(self.sender_mail, email, mail.as_string()) service.quit() if __name__ == '__main__': mails = input("Enter emails: ").split() mail = Mail() mail.send(mails)
Możesz także dodać ślepą kopię, używając tego atrybutu Bcc w instancji MIMEMultipart.
Dodawanie załączników
Załącznikami mogą być obrazy, pliki pdf, dokumenty, arkusze itp. W klasie email.mime jest MIMEBase. Służy do dodawania załączników do wiadomości.
Dodajmy załącznik do powyższej wiadomości.
import smtplib, ssl from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.base import MIMEBase from email import encoders from pathlib import Path class Mail: def __init__(self): ... def send(self, emails): ## login... for email in emails: ## MIMEMultipart instance ## text and html templates ## MIMEText instances ## attaching messages to MIMEMultipart ## attaching an attachment file_path = "newsblog.pl-logo.png" mimeBase = MIMEBase("application", "octet-stream") with open(file_path, "rb") as file: mimeBase.set_payload(file.read()) encoders.encode_base64(mimeBase) mimeBase.add_header("Content-Disposition", f"attachment; filename={Path(file_path).name}") mail.attach(mimeBase) ## sending mail service.quit() if __name__ == '__main__': mails = input("Enter emails: ").split() mail = Mail() mail.send(mails)
Wysyłaj wiadomości masowe jednocześnie
Użyliśmy pętli, aby wysłać tę samą wiadomość do wielu członków. To jeden przypadek (kiedy nie chcesz, aby odbiorcy wiedzieli o innych odbiornikach).
Załóżmy, że musisz wysłać tę samą wiadomość do 1000 członków tej samej grupy jednocześnie. W takich przypadkach użycie pętli nie będzie odpowiednie. Możemy dodać wiele e-maili w polu Do w ogólnym komponowaniu poczty. Jak to zrobić w skrypcie Pythona?
Musimy połączyć listę e-maili jako ciąg oddzielony przecinkiem i spacją. Możemy użyć łańcucha metody join, aby połączyć wszystkie e-maile jako ciąg. Zobacz kod do łączenia wiadomości e-mail jako ciąg znaków.
", ".join(emails)
Zastąp pole Do w powyższym skrypcie, używając powyższego ciągu. To wszystko, od razu wysłałeś pocztę do masowych maili.
Wniosek
Istnieje kilka bibliotek innych firm do wysyłania wiadomości e-mail w Pythonie. Niektórzy z nich są Koperty, Jagmail, Flankeritp., Biblioteki te pomagają nam pisać skrypty z kilkoma liniami kodu. Możesz je również eksplorować.
Teraz możesz zautomatyzować swoje wiadomości e-mail za pomocą skryptów Pythona. Struktura wysyłania wiadomości e-mail będzie różna w zależności od przypadku użycia. Widzieliśmy różne scenariusze wysyłania e-maili. Możesz łatwo dostosować skrypty omówione w samouczku do swojego przypadku użycia. Odniesienie wziąłem z tego artykuł.
Miłego kodowania 🙂