Wysyłanie maila z konsoli - skrypt Pythona

Jakiś czas temu postawiłem subversion na serwerze developerskim, który służył do testowania aplikacji którą piszę. Chciałem żeby informacje o każdym commit-cie były wysyłane na maila. Postanowiłem zrobić to przy pomocy skryptu w Pythonie.

import smtplib
import getopt
import email.Message
import sys

def main(argv):
    opts, args = getopt.getopt(argv, "u:p:s:h:t:r:t:", ["server=", "port=", "sender=", password=", "to=", "subject=", "text="])
    for opt, arg in opts:
        if opt in ["-u", "--server"]:
            serverURL = arg
        elif opt in ["-p", "--port"]:
            port = arg
        elif opt in ["-s", "--sender"]:
            sender = arg
        elif opt in ["-h", "--password"]:
            password = arg
        elif opt in ["-t", "--to"]:
            to = arg
        elif opt in ["-r", "--subject"]:
            subject = arg
        elif opt in ["-t", "--text"]:
            text = arg

    message = email.Message.Message()
    message["To"]      = to
    message["From"]    = sender
    message["Subject"] = subject
    message.set_payload(text)
    if port:
        mailServer = smtplib.SMTP(serverURL, port)
    else:
        mailServer = smtplib.SMTP(serverURL)
    mailServer.ehlo()
    mailServer.starttls()
    mailServer.ehlo()
    mailServer.login(sender, password)
    
    mailServer.sendmail(sender, to, message.as_string())
    mailServer.quit()

Wiadomość ma wysyłać się z serwera SMTP na gmailu, więc istotna jest tu część kodu:

mailServer.ehlo()
mailServer.starttls()
mailServer.ehlo()

Żeby wysłać maila, wystarczy wpisać polecenie: python /srv/mail.py --server=smtp.gmail.com --port=587 --sender=<adres_nadawcy> --password=<hasło_nadawcy> --to=<adres_odbiorcy> --subject="temat" --text="tresc wiadomosci"

Komentarze

  1. 02 lutego 2009 | #

    A polskie literki obsługuje to poprawnie? Wydaje mi się, że nie -- nie widzę ani kodowania nagłówków, ani ustalania kodowania znaków dla treści (jedno i drugie da się zrobić przy pomocy modułu 'email').
    Jeżeli obsługa znaków spoza ASCII była umyślnie pominięta, to warto wyraźnie o tym wspomnieć. Inaczej ktoś może tego użyć w środowisku, gdzie używa się polskich znaczków, a to skończyłoby się problemami.
    Poza tym całkiem elegancki skrypcik, ale ja użyłbym gotowca – np. "nail" ;)

  2. 02 lutego 2009 | #

    A po co to wymyślać koło na nowo? Ja używam do tego małego i lekkiego ssmtp i puszczam standardowo przez mail.

  3. 02 lutego 2009 | #

    Ale nakombinowane ;) Dlaczego używasz mało wygodnego getopt, a nie optparse?

  4. 10 lutego 2009 | #

    @Jajcuś: nie skupiałem się na polskich literkach, potrzebowałem to tylko do wysyłania informacji o rewizjach z svn.

    @trójkąt: pierwsze rozwiązanie które przyszło mi do głowy i w miarę szybko je zastosowałem. Nie zagłębiałem się i nie szukałem innych.

    @zen: można powiedzieć, że w zasadzie zaczynam programować w Pythonie, więc nawet nie wiedziałem o istnieniu optparse.

Napisz komentarz