Python ile Gmail Üzerinden E-Posta Göndermek
Geçenlerde, e-posta adresime posta göndermek için bir python betiğine ihtiyacım olmuştu. İnternette biraz araştırınca güzel bir kod buldum. Kodda, Gmail adresimize bağlanarak istediğimiz adrese e-posta atabiliyoruz. Bir zaman o kodu kullandım ama hem içindekileri biraz daha anlamak hem de kendim yazarak deneyim kazanmak için internetteki belgeleri okumaya başladım. Kafamdaki sorulara bir ölçüde yanıt bularak yeni bir e-posta betiği (script) yazdım. Kod, yukarıda örneğini verdiğim koda benzer.
posta_olustur fonksiyonuyla e-postamız oluşturulmaya başlanıyor. Önce bazı başlık bilgileri (header) ekleniyor. Ardından attach fonksiyonuyla postamıza mesajımız (yazı kısmı) ekleniyor. For döngüsü ile de dosyalarımız teker teker eklenerek posta oluşturma işlemi sona erer.
posta_gonder fonksiyonuyla da gmail sunucusuna giriş yapılıp (login) e-postamız belirttiğimiz adrese gönderilir.
En son olarak da kullanıcıdan bilgiler istenip, gerekli fonksiyonlar çalıştırılır.
Uygulamanın Tam Kodu:
#Batuhan Bayrakçı - Python ile Gmail Üzerinden E-posta Göndermek
#!/usr/bin/python2.6
#-*-coding:utf-8-*-
import smtplib, os
#MIME tipinde posta oluşturmak için gerekli modüller
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email import encoders
posta = MIMEMultipart()
dosyalar=[""]
def posta_olustur():
posta['Subject']=konu
posta['From']=gmail_kullanici
posta['To']=kime
posta.attach(MIMEText(mesaj)) #mesaj (yazı) kısmımız postamıza ekleniyor
for dosya in dosyalar: #dosyalar eklenmeye başlar
if (dosya!=""):
try:
eklenti = MIMEBase("application", "octet-stream")
eklenti.set_payload(open(dosya, "rb").read())
encoders.encode_base64(eklenti)
eklenti.add_header("Content-Disposition", "attachment", filename=os.path.basename(dosya))
posta.attach(eklenti)
except:
print "Dosya eklemede hata, dosya adını yanlış girmiş olabilirsiniz..."
else: continue
def posta_gonder():
smtpserver = smtplib.SMTP("smtp.gmail.com",587)
smtpserver.ehlo()
smtpserver.starttls()
smtpserver.ehlo
smtpserver.login(gmail_kullanici, gmail_sifre)
print "Baglantı sağlandı"
smtpserver.sendmail(gmail_kullanici, kime, posta.as_string())
print "Posta Gönderildi"
smtpserver.close()
kime = raw_input("Kime Göndereceksiniz?: ")
gmail_kullanici = raw_input("Gmail Hesabınızın Kullanıcı Adı: ")
gmail_sifre = raw_input("Gmail Hesabınızın Şifresi: ")
konu = raw_input ("Posta Konusu: ")
mesaj = raw_input ("Mesajınız: ")
#Dosyaların eklemesi yapılmaya başlanır
while True:
cevap = raw_input("Dosya eklemek ister misiniz? (e/h): ")
if(cevap=='e' or cevap=='E'):
dosya_gonder = raw_input("Dosya göndermek istiyorsanız dosyanızın tam konumunu veya " + os.getcwd() + " dizinindeyse sadece adını yazın: ")
if (dosya_gonder!=""):
dosyalar.append(dosya_gonder)
else:
break
elif(cevap=='h' or cevap=='H'):
break
else:
print "Geçersiz giriş"
continue
#Dosya eklenme işi biter
posta_olustur()
posta_gonder()
Yararlı Kaynaklar:
http://www.tutorialspoint.com/python/python_sending_email.htm
http://docs.python.org/library/email
http://docs.python.org/library/smtplib.html
http://www.devshed.com/c/a/Python/Python-Email-Libraries-SMTP-and-Email-Parsing/
İyi Çalışmalar…

eline sağlık
smtplib güzelmiş. Binlerce mailden oluşan listelere toplu mail gönderim programı hazırlanabilir mesela. Ama gmail’in günlük mail gönderim sınırı var sanırım… Herneyse eline sağlık. İyi çalışmalar…
Sınırlama var mı bilmiyorum. Bu kodu yazarken onlarca mail gönderme denemesi yaptım, bir sorun çıkmadı.
Sağolun…
Belki birilerinin ihtiyacı olur:
http://mail.google.com/support/bin/answer.py?answer=22839