使用.nettestingSMTP

我需要configuration一个SMTP服务器来testing我的网站发送邮件(注册确认等)。

我实际上不想要发送电子邮件,我只是想确保我的代码是正确的。 所以我希望能够检查电子邮件是否放在队列文件夹中。

任何人都可以推荐一个容易configuration的SMTP服务器吗?

还有Papercut这是一个SMTP服务器,它将接收消息,但不能在任何地方传送(允许您确保它们正在正确发送)。 接收到的消息在一个小的GUI中可见,并写入到一个目录中。

在.NET中,SmtpClient可以configuration为通过将其放置在拾取目录中来发送电子邮件。

SmtpClient的默认构造函数从app.config中获取其设置,因此对于testing环境,我们可以按如下方式进行configuration。

<configuration> <system.net> <mailSettings> <smtp deliveryMethod="specifiedPickupDirectory"> <specifiedPickupDirectory pickupDirectoryLocation="path to a directory" /> </smtp> </mailSettings> </system.net> </configuration> 

MSDN参考 – app.config mailSettings元素http://msdn.microsoft.com/en-us/library/w355a94k.aspx

smtp4dev项目是另一个虚拟SMTP服务器。 我喜欢它,因为它有一个很好的,简单的用户界面,logging消息,并让你查看最近的消息的内容。 用C#写的MSI安装程序。 源代码可用。

对于那些.NET的人。 保持简单。

我们正在研究这个问题,然后其中一位开发人员想起了一个configuration设置,它允许你重写电子邮件的发送方式。

这将每个电子邮件创build一个文件,并保持独立。

 <system.net> <mailSettings> <smtp deliveryMethod="SpecifiedPickupDirectory"> <specifiedPickupDirectory pickupDirectoryLocation="\\SharedFolder\MailDrop\" /> </smtp> </mailSettings> </system.net> 

我认为这个博客文章简单的SMTP服务器模拟为.NET给你你需要的:一个SMTP服务器模拟

一个SMTP服务器模拟基本上是一个虚假的SMTP服务器,可用于发送电子邮件的应用程序的unit testing。

另外, 谷歌searchsmtp模拟服务器将为您提供一系列用于testing目的的SMTP服务器。 喜欢:

  • 笨笨 – Java假的SMTP服务器
  • nDumbster – Dumbster的 .NET端口

另一种方法是创build一个实现相同接口的SmtpClient的包装器。 然后注入并在你的课堂上使用包装。 在做unit testing的时候,你可以用一个对方法调用和响应有期望的模拟包装来代替。

编辑 :包装是需要的(至lessRhinoMocks),因为SmtpClient不从一个接口派生,并没有虚拟的方法。 如果你使用一个模拟框架,可以直接模拟一个没有虚拟方法的类,你可以跳过这个包装器并直接注入SmtpClient模拟。

 public class SmtpClientWrapper { private SmtpClient Client { get; set; } public SmtpClientWrapper( SmtpClient client ) { this.Client = client; } public virtual void Send( MailMessage msg ) { this.Client.Send( msg ); } ... } public class MyClass { private SmtpClientWrapper Client { get; set; } public MyClass( SmtpClientWrapper client ) { this.Client = client; } public void DoSomethingAndNotify() { ... this.Client.Send( msg ); } } 

testing(与RhinoMocks)为:

 public void DoSomethingAndNotifySendsAMessageTest() { SmtpClientWrapper client = MockRepository.GenerateMock<SmtpClientWrapper>(); client.Expect( c => c.Send( new MailMessage() ) ).IgnoreArguments(); MyClass klass = new MyClass( client ); klass.DoSomethingAndNotify(); client.VerifyAllExpectations(); } 

我使用Antix SMTP Server For Developers ,就像打开一个应用程序一样简单。 它将消息存储在一个文件夹中,您可以使用UI查看它们。 很快捷/简单的解决scheme。 我想在这里提到它。

另请参阅: 用于Windows的开发smtp服务器

DevNull SMTP服务器logging有关客户端和SMTP服务器之间通信的所有细节。 看起来如果你试图诊断你的发送代码不工作,这将是有用的。

它是用Java编写的,并作为一个可执行的jar部署。 源代码似乎不可用。

如果您在Mac OS X上,则可以使用MockSMTP.app

你也可以使用netDumbster。

http://netdumbster.codeplex.com/

还有我自己的http://ssfd.codeplex.com/这是一个开源的SMTP模拟器。; 接收电子邮件并将其放入可由任务图标访问的文件夹中

请注意,由tvanfosson提出的SmtpClientWrapper类在Send方法的声明中需要所有重要的“虚拟”关键字,否则就像试图直接模拟SmtpClient一样。

根据许多其他build议,我使用了一个免费的工具很多: http : //www.toolheap.com/test-mail-server-tool/

不是真正的TDD,但在手动testing中很有用,因为它可以popupOutlook Express窗口,每个电子邮件将被发送。

如果你已经安装了Python,你可以运行下面的一行代码在控制台中运行一个debuggingsmtp服务器,将消息转储到stdout:

sudo python -m smtpd -n -c DebuggingServer localhost:25

从这里挂钩: http : //muffinresearch.co.uk/archives/2010/10/15/fake-smtp-server-with-python/

正如肖恩·卡彭特(Sean Carpenter)所指出的那样, Papercut是当地发展的强大解决scheme。 但是,如果您也运行临时或testing服务器,则整体而言, mailtrap.io可能是一个更简单的解决scheme,因为您可以对开发和临时环境使用相同的方法。