Bagaimana cara mengirim email melalui Gmail dengan Python?
Diterbitkan: 2021-06-06Mengirim sebagian besar email secara manual adalah tugas yang membosankan. Anda dapat menggunakan layanan pihak ketiga untuk mengirim email secara massal sekaligus.
Bagaimana kalau Anda membuat skrip khusus Anda sendiri untuk mengirim email?
Bukankah itu indah?
Ya itu dia. Kami akan menulis skrip dengan Python untuk mengirim email.
Python memiliki perpustakaan yang disebut smtplib yang digunakan untuk mengirim email. Perpustakaan smtplib didasarkan pada SMTP (Simple Mail Transport Protocol). SMTP digunakan untuk mengirim email ke orang lain.
Siapkan Gmail
Di sini, kita akan menggunakan Gmail sebagai penyedia email. Google tidak mengizinkan skrip untuk masuk. Dan kami perlu membuat perubahan dalam keamanan akun Gmail kami yang memungkinkan skrip untuk masuk ke akun Gmail kami.
Mengubah opsi keamanan di akun Gmail kami tidak baik karena memungkinkan orang lain untuk mengakses akun dengan sangat mudah. Disarankan untuk membuat akun Gmail baru. Buka pengaturan di sini dan aktifkan pengaturan Izinkan aplikasi yang kurang aman: AKTIF .
Jika Anda tidak nyaman dengan mengaktifkan pengaturan di atas, Anda dapat menggunakan Google API untuk masuk ke akun Gmail Anda. Anda dapat menemukan skrip untuk menggunakan Google API untuk autentikasi di sini.
Langkah-langkah Mengirim Email
Langkah-langkah tertentu perlu dilakukan untuk mengirim email menggunakan perpustakaan smtplib . Mari kita lihat langkah-langkahnya terlebih dahulu dan kemudian kita akan menulis skripnya.
#1. Menghubungkan ke server SMTP
Setiap penyedia layanan akan memiliki nama domain dan port server SMTP yang berbeda. Kita harus menggunakan nama domain server SMTP dan port penyedia email yang akan kita gunakan dalam skrip. Nama domain dan port server SMTP untuk Gmail adalah smtp.gmail.com dan <em>465</em> .
Kami akan menggunakan enkripsi SSL untuk koneksi server SMTP karena lebih aman daripada enkripsi TSL . Jika Anda ingin menggunakan enkripsi TSL , gunakan port 587 alih-alih 465 . Nama domain server SMTP akan berbeda berdasarkan penyedia layanan email.
Kode untuk terhubung ke server SMTP
server = smtplib.SMTP_SSL(smtp_server_domain_name, port, context=ssl_context)#2. Gabung
Setelah koneksi dibuat ke server SMTP, kita dapat masuk menggunakan alamat email dan kata sandi dengan metode objek SMTP login . Kode terlihat sebagai berikut.
server.login(sender_email, password)#3. Kirim Email
Setelah login, tidak mungkin kita bisa menunggu untuk mengirim email. Kirim email menggunakan metode sendmail . Pastikan Anda mengirim email dalam format berikut.
Subjek: your_subject_for \newline mail_content
Spasi tidak diperlukan. Mereka hanya untuk klarifikasi dalam format di atas. Mari kita lihat contoh kodenya.
server.sendmail(sender_mail, email, f"Subject: {subject}\n{content}")#4. Berhenti
Jangan lupa untuk keluar dari SMTP c
Kami telah melihat langkah-langkah untuk mengirim email menggunakan Python. Tapi, kita belum membahas kode lengkapnya. Mari kita cepat melalui kode.
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)Kami telah membuat kelas yang disebut Mail . Dan ia memiliki metode yang disebut send untuk mengirim surat. Kelas menulis atau tidak terserah Anda. Kelas membuatnya lebih mudah dibaca. Kami telah menerapkan semua langkah yang dibahas di atas satu per satu dalam metode kirim .
Hore! Anda telah mengirim email menggunakan skrip Python.
Konten HTML
Bagaimana jika Anda ingin mengirim email dalam HTML? Apa itu mungkin?
Ya kenapa tidak. Kami dapat mengirim email menggunakan HTML perpustakaan yang disebut email.mime . Ini adalah perpustakaan built-in.
MIME adalah standar yang digunakan untuk memperluas format email untuk mendukung program aplikasi, video, gambar, dll.,
Ada dua kelas yang kita butuhkan dari modul email.mime . Mereka adalah MIMEText dan MIMEMultipart . Mari kita lihat penjelasan singkat tentang mereka.
#1. Teks MIME
Kelas MIMEText digunakan untuk menulis konten email kita dalam HTML. Kami akan membuat instance kelas MIMEText dengan melewatkan konten HTML dan tipe konten. Lihat contoh kode di bawah ini.

html_content = MIMEText(html_template, 'html')Beberapa layanan email tidak mendukung rendering HTML. Jadi, lebih baik membuat dua instance kelas MIMEText untuk teks biasa dan HTML.
#2. MIMEMultipart
Kelas MIMEMultipart digunakan untuk menyederhanakan format dan penulisan subjek, dari alamat, ke alamat dll, Kami akan memberikan konten yang dibuat dengan kelas MIMEText ke MIMEMultipart menggunakan metode attach .
Kita perlu memastikan bahwa instance MIMEMultipart dibuat dengan alternative argumen untuk merender teks biasa atau HTML. Mari kita mengirim email dengan konten 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'] = 'Geekflare Celebrations' mail['From'] = self.sender_mail mail['To'] = email text_template = """ Geekflare Hi {0}, We are delighted announce that our website hits 10 Million views this month. """ html_template = """ <h1>Geekflare</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) Anda juga dapat menambahkan blind carbon copy menggunakan atribut Bcc di instance MIMEMultipart.
Menambahkan Lampiran
Attachment bisa berupa gambar, pdf, docs, sheets, dll. Ada yang disebut MIMEBase di kelas email.mime . Ini digunakan untuk menambahkan lampiran ke surat.
Mari tambahkan lampiran ke email di atas.
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 = "Geekflare-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)Kirim ke Surat Massal Sekaligus
Kami telah menggunakan loop untuk mengirim email yang sama ke beberapa anggota. Itu satu kasus (bila Anda tidak ingin penerima tahu tentang penerima lain).
Asumsikan Anda harus mengirim email yang sama ke 1000 anggota sekaligus dari grup yang sama. Dalam kasus seperti itu, menggunakan loop tidak akan sesuai. Kami dapat menambahkan beberapa email di bidang Kepada dalam penulisan surat umum. Bagaimana melakukannya dalam skrip Python?
Kita perlu menggabungkan daftar email sebagai string yang dipisahkan dengan koma dan spasi . Kita dapat menggunakan string metode join untuk menggabungkan semua email sebagai string. Lihat kode untuk menggabungkan email sebagai string.
", ".join(emails)Ganti bidang Ke dalam skrip di atas menggunakan string di atas. Itu saja, Anda telah mengirim surat ke surat massal sekaligus.
Kesimpulan
Ada beberapa perpustakaan pihak ketiga untuk mengirim email dengan Python. Beberapa di antaranya adalah Amplop, Yagmail, Flanker, dll., Pustaka ini membantu kita menulis skrip dengan beberapa baris kode. Anda juga dapat menjelajahinya.
Sekarang, Anda dapat mengotomatiskan hal-hal email Anda menggunakan skrip Python. Struktur pengiriman email akan berbeda berdasarkan kasus penggunaan Anda. Kami telah melihat berbagai skenario pengiriman email. Anda dapat dengan mudah menyesuaikan skrip yang dibahas dalam tutorial dengan kasus penggunaan Anda. Saya telah mengambil referensi dari artikel ini.
Selamat Coding
