保存自动生成的电子邮件

本文关键字:电子邮件 自动生成 保存 | 更新日期: 2023-09-27 18:10:31

可能重复:
如何将MailMessage对象保存为*.eml或*.msg文件到磁盘

我正在开发一个C#程序,当满足某些条件时,它会给人们发电子邮件。我希望能够保存一份电子邮件的副本以备记录,但无法弄清楚。我觉得奇怪的是,没有像message.Save()那样的内置it函数。

我在下面包含了一个非常基本的电子邮件示例:

MailMessage message = new MailMessage("from_email", "to_email");
message.Subject = "Email Alert"; 
message.Body = "This is a test email.";
SmtpClient Smtp = new SmtpClient("smtp server");
Smtp.Send(message);

我想保存一份电子邮件的副本作为记录。我真的没有考虑存储消息的所有方式选择,很抱歉。我想要一份副本,以防收件人没有收到电子邮件,我可以从档案中转发一份副本。我认为一个.msg会很好用。

另外,我希望能够保存电子邮件,然后在一天结束时发送一批。如果我收到需要添加的更新,我可能需要在电子邮件中添加新条目,这样收件人就不会被多封电子邮件过载。然而,在某些情况下,他们会达到升级级别,无论一天中的什么时间,都会自动发送电子邮件。

保存自动生成的电子邮件

为什么不将电子邮件密件抄送给管理员帐户?

好吧,你没有太具体地说明你在寻找什么,所以这里有几个选项:

  1. BCC自己。这将(私下(向自己发送一份电子邮件副本
  2. 如果要保存到文件,请自己执行保存。没那么难。实际上,你只想保存一些文本。我们可以这样实现:

    private void SaveEmailToDisk(MailMessage message, string saveTo)
    {
        var builder = new StringBuilder();
        builder.AppendFormat("To: {0}'n", String.Join("; ", message.To.Select(m => m.Address).ToArray()));
        builder.AppendFormat("From: {0}'n",message.From.Address);
        builder.AppendFormat("Subject: {0}", message.Subject);
        builder.AppendFormat("Body: {0}", message.Body);
        File.WriteAllText(saveTo, builder.ToString());
    }
    

当然,你可以根据自己的需要进行调整。

;"备份";您的电子邮件,以便在必要时重新发送:

  • ProcMail根据您使用的MTA,编写ProcMail配方以在MTA发送邮件时存档邮件是很容易的。如果您使用的是Exchange,那么在服务器端也可以这样做。

  • XML序列化创建MailMessage类的每个实例后,将其序列化并存储在文件系统或数据库中。应该足够容易在需要时为实例补水。

  • 分拣目录CCD_ 3类可以被配置为";发送";消息到";分拣目录"这通常用于将MTA(邮件传输代理(配置为监视特定目录的配置中。然后,发送邮件包括将一个包含符合RFC 2822的消息的文件放入目录,MTA很快就会在该目录中收集并发送邮件。如果没有将MTA配置为监视收件目录,则邮件将被丢弃在那里。

    这是一种在不涉及真正MTA的情况下测试邮件应用程序的有用方法。当人们收到垃圾信息时,他们往往会变得脾气暴躁。

    这也是一种有用的存档技术:在程序中配置2个SmtpClient实例:一个配置为与MTA对话,另一个配置用于将邮件放入拾取目录。将您创建的每个MailMessage发布到这两个实例中,您就有了自己的存档。

这些技术中的任何一种都应该适用于您。如果您确实需要重新发送电子邮件,XML序列化可能是您的最佳选择,因为通过XML序列化重新水合对象实例非常简单。

这里要问的重要问题是:保存到哪里

这就是为什么没有内置的Save()方法。电子邮件通常不能简单地保存到文件系统中(并不是说不能(。但有很多信息并不是简单存储的,比如To/From地址、Subject行、不同的部分(即MIME替换部分、附件(。

使用

         MailAddress bcc = new MailAddress("youremail@domain.com");
         message.Bcc.Add(bcc);

你会得到一份信息的副本。

为什么不在发送电子邮件之前将数据写入数据库表?然后,您就有了发送电子邮件的日志。