Email

Mengirim email dengan Python

Python dapat mengirim email tanpa menginstal apa pun. Pustaka standar menyediakan smtplib untuk koneksi SMTP dan email.message.EmailMessage untuk menyusun pesan, sehingga skrip yang berfungsi hanya sekitar lima belas baris. Berikut skrip tersebut dengan TLS yang dilakukan dengan benar, lalu alasan untuk beralih ke HTTP API begitu lalu lintas nyata muncul.

Bagaimana cara mengirim email dengan pustaka standar?

EmailMessage menyusun pesan dan mengatur header untuk Anda. smtplib.SMTP_SSL membuka koneksi terenkripsi pada port 465:

import smtplib
from email.message import EmailMessage

msg = EmailMessage()
msg["From"] = "you@yourdomain.com"
msg["To"] = "recipient@example.org"
msg["Subject"] = "Your receipt"
msg.set_content("Thanks for your order. This is the plain-text version.")
msg.add_alternative("<p>Thanks for your order.</p>", subtype="html")

with smtplib.SMTP_SSL("smtp.example.com", 465) as server:
    server.login("smtp-user", "smtp-password")
    server.send_message(msg)

set_content menulis body teks biasa dan add_alternative melampirkan versi HTML, sehingga klien memilih yang dapat mereka render. Mengirim kedua bagian adalah praktik yang baik dan membantu deliverability.

SSL atau STARTTLS?

Ada dua jalur enkripsi dan keduanya menggunakan port yang berbeda. SMTP_SSL pada 465 menegosiasikan TLS sejak byte pertama. Alternatifnya adalah SMTP biasa pada 587 diikuti starttls(), yang meng-upgrade koneksi cleartext:

with smtplib.SMTP("smtp.example.com", 587) as server:
    server.starttls()
    server.login("smtp-user", "smtp-password")
    server.send_message(msg)

Pilih salah satu berdasarkan yang didukung mail server Anda. Jangan kirim kredensial melalui koneksi yang tidak terenkripsi. Simpan username dan password di environment variable, dibaca dengan os.environ, bukan di-hard-code.

Bagaimana cara menambahkan lampiran?

add_attachment menerima byte beserta tipe MIME. Baca file dalam mode biner:

with open("invoice.pdf", "rb") as f:
    msg.add_attachment(
        f.read(),
        maintype="application",
        subtype="pdf",
        filename="invoice-1042.pdf",
    )

Mengapa meninggalkan SMTP mentah untuk produksi?

Skrip ini berfungsi, tetapi produksi menambah masalah yang tidak diselesaikan oleh pustaka standar. Anda memerlukan mail server dengan reputasi IP yang bersih, record SPF, DKIM, dan DMARC yang benar, logika coba lagi untuk kegagalan sementara, dan cara untuk melihat bounce serta komplain. HTTP API menangani semua itu. Anda melakukan autentikasi dengan kunci, mengirim JSON, dan membaca respons terstruktur alih-alih mem-parse kode status SMTP.

Kirim dengan Bird

Bird Python SDK mengirim pesan yang sama tanpa plumbing SMTP:

import bird

client = bird.Bird(api_key=os.environ["BIRD_API_KEY"])

data, error = client.emails.send(
    from_="you@yourdomain.com",
    to="delivered@bird.dev",
    subject="Hello from Python",
    html="<p>It works.</p>",
)

Alamat sandbox delivered@bird.dev selalu menerima email, sehingga percobaan pertama memvalidasi kunci dan payload Anda sebelum Anda mengarahkan ke penerima sesungguhnya. SDK mengembalikan pasangan (data, error), yang menjaga penanganan error tetap eksplisit alih-alih menangkap exception SMTP. Jika PHP lebih cocok untuk Anda, panduan PHPMailer membahas padanannya di ekosistem tersebut.

FAQ

Apakah saya perlu menginstal sesuatu untuk mengirim email di Python?

Tidak. smtplib dan email.message ada di pustaka standar, jadi pengiriman SMTP dasar tidak memerlukan paket tambahan. Anda hanya perlu menambahkan dependensi jika menginginkan klien tingkat lebih tinggi atau HTTP API.

Apa perbedaan antara port 465 dan 587?

Port 465 mengharapkan TLS sejak awal, yang ditangani oleh smtplib.SMTP_SSL. Port 587 dimulai dalam cleartext dan di-upgrade dengan starttls(). Keduanya berakhir terenkripsi; hanya berbeda pada titik negosiasinya.

Kapan sebaiknya saya beralih dari smtplib ke API?

Ketika Anda peduli dengan keterkiriman, coba lagi, dan pelacakan event. Pustaka standar mengirim pesan; pustaka ini tidak mengelola reputasi atau melaporkan apa yang terjadi setelah pengiriman. API seperti Bird email menangani lapisan tersebut.

Untuk bentuk request dan response lengkap, panduan mengirim email membahas API secara menyeluruh.

Bangun di jaringan yang sama.

Kunci API uji coba langsung tersedia untuk Anda. Akses produksi terbuka saat Anda menambahkan metode pembayaran dan memverifikasi pengirim.

Ide Anda berikutnya.
Siap terhubung.