SMTP proxy w Pythonie

Podczas tworzenia projektu w PHP często zdarza się, że musimy przetestować pewien fragment kodu wykorzystujący funkcję mail. Od dłuższego czasu stosuję w tym celu wygodne rozwiązanie wykorzystujące Pythona i konto na Gmailu. Skrypt jest bardzo krótki, i świetnie obrazuje filozofię „batteries included” Pythona:

import smtpd
import asyncore
import smtplib

SMTP_SERVER = 'smtp.gmail.com'
SMTP_PORT = 587
SMTP_LOGIN = 'user@gmail.com'
SMTP_PASSWORD = 'pass'

class MSMTPServer(smtpd.SMTPServer):
    def process_message(self, peer, mailfrom, rcpttos, data):
        session = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
        session.ehlo(SMTP_LOGIN)
        session.starttls()
        session.ehlo(SMTP_LOGIN)
        session.login(SMTP_LOGIN, SMTP_PASSWORD)
        session.sendmail(SMTP_LOGIN, rcpttos, data)
        session.quit()

if __name__ == "__main__":
    server = MSMTPServer(('127.0.0.1', 25), None)
    try:
        asyncore.loop()
    except KeyboardInterrupt:
        print("Ctr+C pressed...")

Jak widać głównym elementem jest klasa dziedziczącą po smtpd.SMTPServer, w której nadpisana została metoda process_message. Po uruchomieniu skryptu tworzony jest serwer SMTP, który zaczyna nasłuchiwać na porcie 25 localhosta. Wszystkie wiadomości przychodzące wysyłane zostają za pośrednictwem wskazanego konta Gmail.

Reklamy

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj / Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj / Zmień )

Zdjęcie na Google+

Komentujesz korzystając z konta Google+. Wyloguj / Zmień )

Connecting to %s