Отправка / получение электронной почты с помощью модуля Python smtpd - PullRequest
0 голосов
/ 10 августа 2011

Я пытаюсь сделать простой SMTP-сервер, используя модуль Python smtpd . Я могу получить электронное письмо и распечатать его. Я пытаюсь отправить электронное письмо обратно человеку, который отправил мне электронное письмо с приветственным сообщением, и я получаю бесконечный цикл. Я пытаюсь использовать свой собственный сервер для отправки электронного письма, и оно просто интерпретирует его как другое полученное электронное письмо.

Как я могу использовать это для отправки и получения электронной почты?

import smtplib, smtpd
import asyncore
import email.utils
from email.mime.text import MIMEText
import threading

class SMTPReceiver(smtpd.SMTPServer):
    def process_message(self, peer, mailfrom, rcpttos, data):
        print 'Receiving message from:', peer
        print 'Message addressed from:', mailfrom
        print 'Message addressed to  :', rcpttos
        print 'Message length        :', len(data)
        print data

        def send_response():
            msg = MIMEText('Hello world!')
            msg['To'] = email.utils.formataddr(('Recipient', mailfrom))
            msg['From'] = email.utils.formataddr(('Author', 'jsternberg@example.org'))
            msg['Subject'] = ''

            print 'Connecting to mail server'
            server = smtplib.SMTP()
            server.set_debuglevel(1)
            server.connect()
            print 'Attempting to send message'
            try:
                server.sendmail('jsternberg@example.org', [mailfrom], msg.as_string())
            except Exception, ex:
                print 'Could not send mail', ex
            finally:
                server.quit()
            print 'Finished sending message'
        threading.Thread(target=send_response).start()
        return

def main():
    server = SMTPReceiver(('', 25), None)
    asyncore.loop()

if __name__ == '__main__':
    main()

Примечание. В примере не используется реальный адрес электронной почты. Примечание 2: не использовать это в качестве почтового сервера. Просто хочу отправлять / получать простые электронные письма для простого обслуживания.

1 Ответ

1 голос
/ 10 августа 2011

Ты не должен отправить сообщение себе ...

Выполнить поиск MX и отправить сообщение насоответствующий SMTP-сервер.

...