在python中编写简单的SMTP服务器

时间:2014-11-18 05:59:44

标签: python smtp

我正在尝试编写一个简单的smtp服务器程序。我写了一个简单的smtp客户端(在C#中),它发送了一封电子邮件。我用smtp4dev测试了该程序。到目前为止一切正常。

我也想编写自己的简单程序来接收电子邮件(而不是smtp4dev)。我尝试了很多不同的代码段(例如:Here),我在网络上找到了这些代码段,但我似乎无法让它们正常工作。

我也尝试过使用twisted

首先,我可以看到使用TCPView代码中的端口号不是正在使用的端口号。

我感觉自己错过了一些概念性的东西并走向了错误的方向。

修改

如果您有兴趣

,请参阅C#代码
MailMessage mail = new MailMessage();
mail.Subject = "Your Subject";
mail.From = new MailAddress("test@test.com.au");
mail.To.Add("soslab@soslab.lab");
mail.Body = "Hello! your mail content goes here...";
mail.IsBodyHtml = true;            

SmtpClient smtp = new SmtpClient("LOCALHOST", 26); 
smtp.EnableSsl = false;

try
{
    smtp.Send(mail);                
}
catch (Exception ex)
{
    MessageBox.Show(ex.ToString());
}

这里是python代码

import smtpd
import asyncore

class EmailServer(smtpd.SMTPServer):
    def process_message(self, peer, mailfrom, rcpttos, data):
        print 'a'

    def run():
        foo = EmailServer(('localhost', 26), None)
        try:
            asyncore.loop()
        except KeyboardInterrupt:
            pass

    if __name__ == '__main__':
    run()

mail tcp

2 个答案:

答案 0 :(得分:1)

由于某种原因,当我从命令行运行它时,该程序运行正常

import smtpd
import asyncore
import winsound

class PYEmailServer(smtpd.SMTPServer):
    def __init__(*args, **kwargs):
        smtpd.SMTPServer.__init__(*args, **kwargs)

    def process_message(self, peer, mailfrom, rcpttos, data):
        winsound.Beep(2500, 1000)

def run():
    foo = PYEmailServer(('localhost', 26), None)
    try:
        asyncore.loop()
    except KeyboardInterrupt:
        foo.close()

if __name__ == '__main__':    
    run()

当我从IDLE运行它时,它不起作用。 (C#程序只是抛出一个异常,就像服务不在那里)。我不知道为什么会这样,但我原来的问题在起作用。

答案 1 :(得分:0)

要测试smtp服务器,您需要在另一个终端上设置smtpclient对象

import smtplib
smtpclient=smtplib.SMTP('127.0.0.1',8001)
smtpClient.sendmail('sender@gmail.com','recivers@gmail.com','sadfsdf')