c#-使用SmtpClient时如何保存电子邮件而不是发送电子邮件?
我正在使用SmtpClient发送带有附件的电子邮件。但是,对于某些批次,我们需要以某种方式保存MailMessage而不是发送它们。然后,我们正在考虑/希望将邮件手动上传到用户的草稿文件夹。
是否可以保存附件完整的这些消息(不可能,我想过)。 或者将邮件上传到用户帐户中的文件夹?
如果有人对此有任何经验,我将非常感谢您的帮助或指导。
user17510 asked -07-14T02:17:56Z
5个解决方案
73 votes
在中进行测试时,我们将电子邮件保存到文件夹中,而不是通过电子邮件服务器发送。 也许您可以为批次更改这样的2965463549159159670784设置?
附加信息:
MSDN:元素(网络设置)
配置SmtpClient以将电子邮件拖放到磁盘上的文件夹中
Leah answered -07-14T02:18:39Z
12 votes
以及其他答案的SpecifiedPickupDirectory信息,如果您想确保将电子邮件发送到相对于站点根目录的文件夹-方便在不知道路径的构建服务器上进行测试-您可以添加快速检查 在您的电子邮件发送代码中:
SmtpClient client = new SmtpClient();
...
// Add "~" support for pickupdirectories.
if (client.DeliveryMethod == SmtpDeliveryMethod.SpecifiedPickupDirectory && client.PickupDirectoryLocation.StartsWith("~"))
{
string root = AppDomain.CurrentDomain.BaseDirectory;
string pickupRoot = client.PickupDirectoryLocation.Replace("~/", root);
pickupRoot = pickupRoot.Replace("/",@"\");
client.PickupDirectoryLocation = pickupRoot;
}
并且您的测试将如下所示(确保您使用App_Data,以便IIS可以写入该文件夹):
// Arrange - get SitePath from AppDomain.Current.BaseDirectory + ..\
string pickupPath = bine(SitePath, "App_Data", "TempSmtp");
if (!Directory.Exists(pickupPath))
Directory.CreateDirectory(pickupPath);
foreach (string file in Directory.GetFiles(pickupPath, "*.eml"))
{
File.Delete(file);
}
// Act (send some emails)
// Assert
Assert.That(Directory.GetFiles(pickupPath, "*.eml").Count(), Is.EqualTo(1));
Chris S answered -07-14T02:19:04Z
7 votes
这可以帮助-将Save()功能添加到.Mail.MailMessage
主要思想是对MailMessage进行扩展,通过反射来创建save方法。
Avram answered -07-14T02:19:29Z
6 votes
您可以在.Mail/app.config文件中使用System.Web.Mail设置进行配置。
此外,这是一个链接,其中包含有关从System.Web.Mail迁移到.Mail的信息。
dotjoe answered -07-14T02:19:53Z
1 votes
错误还需要在某些版本的框架中添加作为解决方法。 因此,完整的版本如下所示:
devjin answered -07-14T02:20:15Z