今天我正在尝试在visual studio中创建一个单元测试,用于发送电子邮件,我正在努力寻找最佳方法,并使用SendCompleted
事件作为实际发送消息的验证。
这里我的代码我申请发送电子邮件,但在使用许多不同的方式后我只是粘贴在这里干净的代码,也许你可以告诉我我做错了或给我更好的解决方法。
这是我迄今为止尝试过的代码:
[TestClass]
public class sendEmailTest
{
[TestMethod]
public void sendAsyncEmailTest()
{
string from = "sender@test.com";
string to = "receiver@test.com";
MailMessage mail = new MailMessage(from, to);
mail.Subject = "Unit Test MVC";
mail.Body = "Unit Test for sending mail in MVC app";
mail.IsBodyHtml = true;
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.test.com";
smtp.EnableSsl = true;
NetworkCredential networkCredential = new NetworkCredential(from, "testpassword");
smtp.UseDefaultCredentials = true;
smtp.Credentials = networkCredential;
smtp.Port = 587;
smtp.SendAsync(mail, null);
smtp.SendCompleted += new SendCompletedEventHandler(smtp_SendCompleted);
}
static void smtp_SendCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
}
}
答案 0 :(得分:1)
您可能需要的是虚拟开发SMTP服务器。
您可以从here
获取一旦它在您的开发机器上运行,您就可以发送电子邮件将smtp.Host设置为“localhost”并使用虚拟电子邮件地址。
然而,如评论中所述,这样的单元测试完全没有用,因为电子邮件是否成功发送取决于许多外部因素,例如网络连接。如果您在本地计算机上通过测试,则并不意味着每次在生产服务器上发送电子邮件都会成功。