我正在尝试编写一个简单的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()
答案 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')