使用Python smtp模块发送/接收电子邮件

时间:2011-08-10 03:45:03

标签: python smtplib smtpd

我正在尝试使用Python smtpd模块创建一个简单的smtp服务器。我可以收到一封电子邮件并打印出来。我试着发送一封电子邮件回给那个给我发电子邮件的人,上面写着一封你好的世界信息,我最终得到了一个无限循环。我尝试使用自己的服务器发送电子邮件,它只是将其解释为另一封已收到的电子邮件。

如何使用它来发送和接收电子邮件?

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 个答案:

答案 0 :(得分:1)

应该将消息发送给你自己 ...

执行MX lookup并将邮件发送到相应的SMTP服务器。