15 Temmuz 2014 Salı

Python Kullanarak E-mail Göndermek

Merhabalar, mail gönderme durumuyla stajda uğraştığım projede karşılaştım. Ters bir sonuç olduğunda, uyarı niteliğinde yetkili kişilere mail yollamam gerekiyordu. Python ile kolayca yapılabiliyormuş, ben de sizlerle paylaşmak istedim :)

"smtp" kütüphanesi kullanılarak birkaç satırda hallediliyor. SMTP (simple mail transfer protocol) posta sunucuları arasında e-posta göndermek için kullanılan yaygın bir protokol.

"import smtplib" diyerek smtp modülünü yüklemiş oluyoruz.

Önce, Gmail'in SMTP sunucusuna bağlantı kurulmalı. Bu bağlantı TLS veya SSL biriyle yapılabilir. Bu örnekte, STARTTLS bağlantısı (port 587) kullandık. Son olarak Gmail hesabı kimlik bilgilerini ekledik.
server = smtplib.SMTP( "smtp.gmail.com", 587 )
server.starttls()
server.login( '<gmail_address>', '<gmail_password>' ) 

Metin mesajı, mobil taşıyıcıların e-posta avantajlarından yararlanarak gönderiliyor.

Örneğin, T-Mobile numarasına kısa mesaj göndermek için <number>@tmomail.net, AT&T numarasına metin mesajı göndermek için, <number>@mms.att.net biçiminde kullanmalısınız.

Sonra, mesajı ekleyip python dosyasını çalıştırdığımızda mail atmış oluyoruz.
server.sendmail( '<from>', '<number>@tmomail.net', 'Hello!' ) 

Kolay gelsin :)

 
  

9 yorum:

  1. Çok faydası oldu, kullandım bile. Thanks :)

    YanıtlaSil
  2. Peki pc de bulanan bi dosyayı yolunu yazarak maile nasıl ekleriz

    YanıtlaSil
  3. Bununla uğraşmamıştım ama şöyle yazınca dediğiniz iş yapılıyor:

    import smtplib

    server = smtplib.SMTP( "smtp.gmail.com", 587 )
    server.starttls()
    server.login( 'foo@gmail.com', 'bar' )

    file = '/home/deneme.txt'
    fo = open(file, "r")
    filecontent = fo.read()
    server.sendmail( 'asd@gmail.com', '123123123@tmomail.net', filecontent )

    deneme.txt içine birşeyler yazıp denedim, sadece smtplib kütüphanesiyle dosyayı kod içinde açıp bu şekilde yollanabiliyor. Ama bu linkte email kütüphanesi de kullanarak daha sağlıklısı yapılmış gibi geldi. http://stackoverflow.com/questions/3362600/how-to-send-email-attachments-with-python
    umarım işe yarar.

    YanıtlaSil
  4. server.login yaptıgımda hata veriyor

    YanıtlaSil
  5. server.login yaptıgımda hata veriyor

    YanıtlaSil
    Yanıtlar
    1. Hata çıktısını paylaşırsanız, yardımcı olmaya çalışırım.

      Sil
  6. Burayada bakabilirsiniz ;)
    Denedim sıkıntısız çalışıyor

    http://www.apkoyun.club/2017/03/python-3x-serisi-mail-gonderme-nasil.html?m=1

    YanıtlaSil
  7. peki bir txt dosyası içerisinde yazan mail adreslerine nasıl mail gönderebilirim? şu an kodum böyle ama hata alıyorum.
    #!/usr/bin/python
    import smtplib
    from email.mime.base import MIMEBase
    from email.mime.text import MIMEText
    from email.mime.multipart import MIMEMultipart
    from email import encoders
    email_user = 'benimmailadresim@gmail.com'
    email_password = 'mailşifrem'
    email_send = 'mailler.txt'
    dosya = open(email_send, 'r')

    subject = 'subject'
    msg = MIMEMultipart()
    msg['From'] = email_user
    msg['To'] = email_send

    print "Mailinizin konusunu girin: \n"
    subject = ''
    subject = raw_input(" ")
    msg['Subject'] = subject

    print "Gondermek istediginiz maili giriniz: \n"
    body = ''
    body = raw_input(" ")
    msg.attach(MIMEText(body,'plain'))

    sec = int(raw_input("Gondermek istediginiz dosya varsa 1'e, yoksa 2'ye basin.\n"))
    if sec == 1:
    print "Gondermek istediginiz dosya adini girin: "
    filename=''
    filename= raw_input(" ")
    attachment =open(filename,'rb')

    part = MIMEBase('application','octet-stream')
    part.set_payload((attachment).read())
    encoders.encode_base64(part)
    part.add_header('Content-Disposition',"attachment; filename= "+filename)

    attachment.close()
    msg.attach(part)
    text = msg.as_string()
    server = smtplib.SMTP('smtp.gmail.com',587)
    server.starttls()
    server.login(email_user,email_password)
    server.sendmail(email_user,dosya,text)
    dosya.close()
    server.quit()
    else:
    text = msg.as_string()
    server = smtplib.SMTP('smtp.gmail.com',587)
    server.starttls()
    server.login(email_user,email_password)
    server.sendmail(email_user,dosya,text)
    dosya.close()
    server.quit()

    YanıtlaSil
    Yanıtlar
    1. Selamlar, kodu deneme firsati bulamadim. ancak ilk aklima gelen cozumu yaziyorum. raw_input ile gondemek istenen maili kullanicidan deger alarak yapmissi, bunun yerine dosyadan okumak icin mesela mails.txt dosyasinda alt alta yazilmis 10 mail olsun.

      with open('mails.txt') as f:
      lines = f.readlines()

      lines in degerini yazdiracak olursan her satirdaki mail adresi, lines arrayi nin bir elemani olmus olur.
      (kaynak:https://stackoverflow.com/questions/3277503/how-do-i-read-a-file-line-by-line-into-a-list)

      Sil