Python - SMTP kullanarak E-posta Gönderme
Basit Posta Aktarım Protokolü (SMTP), e-posta göndermeyi ve posta sunucuları arasında e-posta yönlendirmeyi işleyen bir protokoldür.
Python sağlar smtplib SMTP veya ESMTP dinleyici arka plan programı olan herhangi bir İnternet makinesine posta göndermek için kullanılabilen bir SMTP istemci oturum nesnesini tanımlayan modül.
İşte daha sonra bir e-posta göndermek için kullanılabilecek bir SMTP nesnesi oluşturmak için basit bir sözdizimi -
import smtplib
smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )
İşte parametrelerin detayı -
host- Bu, SMTP sunucunuzu çalıştıran ana bilgisayardır. Ana bilgisayarın IP adresini veya tutorialspoint.com gibi bir alan adını belirtebilirsiniz. Bu isteğe bağlı bir argümandır.
port- Ana bilgisayar bağımsız değişkeni sağlıyorsanız , SMTP sunucusunun dinlediği bir bağlantı noktası belirtmeniz gerekir. Genellikle bu bağlantı noktası 25 olur.
local_hostname- SMTP sunucunuz yerel makinenizde çalışıyorsa , bu seçenekle yalnızca localhost'u belirtebilirsiniz .
Bir SMTP nesnesinin adı verilen bir örnek yöntemi vardır sendmail, genellikle bir iletiyi postalama işini yapmak için kullanılır. Üç parametre alır -
Gönderici - gönderenin adresi ile bir dize.
Alıcıları - dizeleri listesi, her alıcı için bir tane.
Mesajı - Çeşitli RFC'lerde belirtilen biçimlendirilmiş bir dize olarak bir mesaj.
Misal
Python komut dosyası kullanarak bir e-posta göndermenin basit bir yolu. Bir kez deneyin -
#!/usr/bin/python
import smtplib
sender = '[email protected]'
receivers = ['[email protected]']
message = """From: From Person <[email protected]>
To: To Person <[email protected]>
Subject: SMTP e-mail test
This is a test e-mail message.
"""
try:
smtpObj = smtplib.SMTP('localhost')
smtpObj.sendmail(sender, receivers, message)
print "Successfully sent email"
except SMTPException:
print "Error: unable to send email"
Burada, başlıkları doğru şekilde biçimlendirmeye dikkat ederek, üçlü bir alıntı kullanarak mesaja temel bir e-posta yerleştirdiniz. Bir e-posta, birFrom, To, ve Subject e-postanın gövdesinden boş bir satırla ayrılmış başlık.
Postayı göndermek için smtpObj'yi yerel makinedeki SMTP sunucusuna bağlanmak için kullanın ve ardından parametre olarak mesaj, gönderen adresi ve hedef adresle birlikte sendmail yöntemini kullanın (gönderen ve gönderen adresleri e -postanın kendisi, bunlar her zaman postayı yönlendirmek için kullanılmaz).
Yerel makinenizde bir SMTP sunucusu çalıştırmıyorsanız, uzak bir SMTP sunucusuyla iletişim kurmak için smtplib istemcisini kullanabilirsiniz . Bir web posta hizmeti (Hotmail veya Yahoo! Mail gibi) kullanmadığınız sürece, e-posta sağlayıcınız size bunları sağlayabileceğiniz giden posta sunucusu ayrıntılarını aşağıdaki gibi sağlamış olmalıdır -
smtplib.SMTP('mail.your-domain.com', 25)
Python kullanarak HTML e-posta gönderme
Python kullanarak bir metin mesajı gönderdiğinizde, tüm içerik basit metin olarak kabul edilir. Metin mesajına HTML etiketleri ekleseniz bile, basit metin olarak görüntülenir ve HTML etiketleri HTML sözdizimine göre biçimlendirilmez. Ancak Python, bir HTML mesajını gerçek HTML mesajı olarak gönderme seçeneği sunar.
Bir e-posta mesajı gönderirken, bir HTML e-postası göndermek için bir Mime sürümü, içerik türü ve karakter seti belirtebilirsiniz.
Misal
Aşağıda, HTML içeriğini e-posta olarak gönderme örneği verilmiştir. Bir kez dene -
#!/usr/bin/python
import smtplib
message = """From: From Person <[email protected]>
To: To Person <[email protected]>
MIME-Version: 1.0
Content-type: text/html
Subject: SMTP HTML e-mail test
This is an e-mail message to be sent in HTML format
<b>This is HTML message.</b>
<h1>This is headline.</h1>
"""
try:
smtpObj = smtplib.SMTP('localhost')
smtpObj.sendmail(sender, receivers, message)
print "Successfully sent email"
except SMTPException:
print "Error: unable to send email"
Ekleri E-posta Olarak Gönderme
Karışık içerikli bir e-posta göndermek için, Content-type başlık multipart/mixed. Ardından, metin ve ek bölümleri içinde belirtilebilirboundaries.
E-postanın mesaj kısmında görünmeyen iki tire ve ardından benzersiz bir sayı ile bir sınır başlatılır. E-postanın son bölümünü belirten son sınır da iki kısa çizgiyle bitmelidir.
Ekli dosyalar şu şekilde kodlanmalıdır: pack("m") iletimden önce base64 kodlamasına sahip olmak için işlev.
Misal
Bir dosya gönderen örnek aşağıdadır /tmp/test.txtek olarak. Bir kez deneyin -
#!/usr/bin/python
import smtplib
import base64
filename = "/tmp/test.txt"
# Read a file and encode it into base64 format
fo = open(filename, "rb")
filecontent = fo.read()
encodedcontent = base64.b64encode(filecontent) # base64
sender = '[email protected]'
reciever = '[email protected]'
marker = "AUNIQUEMARKER"
body ="""
This is a test email to send an attachement.
"""
# Define the main headers.
part1 = """From: From Person <[email protected]>
To: To Person <[email protected]>
Subject: Sending Attachement
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=%s
--%s
""" % (marker, marker)
# Define the message action
part2 = """Content-Type: text/plain
Content-Transfer-Encoding:8bit
%s
--%s
""" % (body,marker)
# Define the attachment section
part3 = """Content-Type: multipart/mixed; name=\"%s\"
Content-Transfer-Encoding:base64
Content-Disposition: attachment; filename=%s
%s
--%s--
""" %(filename, filename, encodedcontent, marker)
message = part1 + part2 + part3
try:
smtpObj = smtplib.SMTP('localhost')
smtpObj.sendmail(sender, reciever, message)
print "Successfully sent email"
except Exception:
print "Error: unable to send email"