Saya menggunakan metode berikut untuk mengirim email dari Python menggunakan SMTP. Apakah ini metode yang tepat untuk digunakan atau adakah masalah yang saya lewatkan?
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()
Jawaban:
Skrip yang saya gunakan sangat mirip; Saya mempostingnya di sini sebagai contoh cara menggunakan modul email. * Untuk menghasilkan pesan MIME; sehingga skrip ini dapat dengan mudah dimodifikasi untuk melampirkan gambar, dll.
Saya mengandalkan ISP saya untuk menambahkan header waktu tanggal.
ISP saya mengharuskan saya menggunakan koneksi smtp yang aman untuk mengirim email, saya mengandalkan modul smtplib (dapat diunduh di http://www1.cs.columbia.edu/~db2501/ssmtplib.py )
Seperti pada skrip Anda, nama pengguna dan sandi, (diberikan nilai dummy di bawah), digunakan untuk otentikasi di server SMTP, dalam teks biasa di sumbernya. Ini adalah kelemahan keamanan; tetapi alternatif terbaik tergantung pada seberapa hati-hati Anda perlu (ingin?) untuk melindungi ini.
=======================================
sumber
from ssmtplib import SMTP_SSL as SMTP
denganfrom smtplib import SMTP_SSL as SMTP
, dan contoh ini akan bekerja dari pustaka Python standar.msg['To'] = ','.join(destination)
, Jika tidak, tujuan tidak dilihat di gmailCara yang biasa saya gunakan ... tidak jauh berbeda tapi sedikit
Itu dia
sumber
from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText
Juga jika Anda ingin melakukan smtp auth dengan TLS sebagai lawan dari SSL maka Anda hanya perlu mengubah port (gunakan 587) dan lakukan smtp.starttls (). Ini berhasil untuk saya:
sumber
Gotcha utama yang saya lihat adalah Anda tidak menangani kesalahan apa pun: .login () dan .sendmail () keduanya telah mendokumentasikan pengecualian yang dapat mereka lempar, dan sepertinya .connect () harus memiliki beberapa cara untuk menunjukkan bahwa itu tidak dapat terhubung - mungkin pengecualian yang diberikan oleh kode soket yang mendasarinya.
sumber
Pastikan Anda tidak memiliki firewall yang memblokir SMTP. Pertama kali saya mencoba mengirim email, itu diblokir oleh Windows Firewall dan McAfee - butuh waktu lama untuk menemukan keduanya.
sumber
Bagaimana dengan ini?
sumber
kode berikut berfungsi dengan baik untuk saya:
Ref: http://www.mkyong.com/python/how-do-send-email-in-python-via-smtplib/
sumber
smtpserver.close()
Ini harus:,smtpserver.quit()
karenaclose()
tidak akan memutuskan koneksi TLS dengan benar!close()
akan dipanggil selamaquit()
.Anda harus memastikan Anda memformat tanggal dalam format yang benar - RFC2822 .
sumber
Kode contoh yang saya lakukan untuk mengirim email menggunakan SMTP.
sumber
Lihat semua jawaban yang panjang itu? Izinkan saya untuk mempromosikan diri sendiri dengan melakukan semuanya dalam beberapa baris.
Impor dan Hubungkan:
Maka itu hanya satu baris:
Ini benar-benar akan menutup ketika keluar dari ruang lingkup (atau dapat ditutup secara manual). Selanjutnya, ini akan memungkinkan Anda untuk mendaftarkan nama pengguna Anda di keyring Anda sehingga Anda tidak perlu menulis kata sandi Anda di skrip Anda (itu benar-benar mengganggu saya sebelum menulis
yagmail
!)Untuk paket / instalasi, tips dan trik silahkan lihat di git atau pip , tersedia untuk Python 2 dan 3.
sumber
kamu bisa melakukan seperti itu
sumber
Berikut adalah contoh kerja untuk Python 3.x
sumber
Berdasarkan contoh ini saya membuat fungsi berikut:
jika Anda hanya meneruskan
body
maka surat teks biasa akan dikirim, tetapi jika Anda memberikanhtml
argumen bersama denganbody
argumen, email html akan dikirim (dengan fallback ke konten teks untuk klien email yang tidak mendukung jenis html / mime).Contoh penggunaan:
Btw. Jika Anda ingin menggunakan gmail sebagai server SMTP pengujian atau produksi, aktifkan sementara atau akses permanen ke aplikasi yang kurang aman:
sumber