如何使用 POP3 和 SmtpClient 转发多部分 MIME 电子邮件?

Posted

技术标签:

【中文标题】如何使用 POP3 和 SmtpClient 转发多部分 MIME 电子邮件?【英文标题】:How to forward multipart MIME emails using POP3 and SmtpClient? 【发布时间】:2015-07-12 17:58:19 【问题描述】:

我正在设置编写一个小工具来轮询 POP3 帐户,然后转发找到的邮件。我正在使用 OpenPop.NET 库进行 POP3 访问,并且很可能会使用 .NET SmtpClientMailMessage 类来转发邮件。

OpenPop.NET 给了我一个Message 类,它允许我将整个消息(即标题和所有部分)保存到一个文件中,但是当我想发送消息时,我只需要一个正文。现在Message 有一个集合部分,每个部分都有自己的Body 属性,其中Body 是一个字节数组。看起来我可以使用AlternateViews 集合将这些部分中的每一个附加到MailMessage,但我有点担心字节数组到字符串转换的编码问题。

我也愿意接受其他实现这一目标的方法的建议,但目前我正在考虑的过程是我知道的唯一一个。

【问题讨论】:

你有办法将正文保存为字符串吗? @Shaun07776 每个MessagePart 都有一个字节数组Body,我可以将其另存为字符串,如果这是您的要求。 你有没有找到将openpop消息转换为SMTP MailMessage并转发到其他ID的方法? @Biswajeet 我忘记了如何解决问题的细节,但我从OpenPOP 切换到MailKit,这是一个非常有用且功能强大的库。 【参考方案1】:

请为 AlternativeView 使用以下代码。

 _MailMessage.BodyEncoding = System.Text.Encoding.GetEncoding("utf-8");

            AlternateView plainView = AlternateView.CreateAlternateViewFromString(System.Text.RegularExpressions.Regex.Replace(_Body, "<(.|\\n)*?>", string.Empty), null, "text/plain");
            AlternateView htmlView = AlternateView.CreateAlternateViewFromString(_Body, null, "text/html");

            _MailMessage.AlternateViews.Add(plainView);
            _MailMessage.AlternateViews.Add(htmlView);

【讨论】:

我认为这有点过于简单了。如果电子邮件有多个部分怎么办? 只有那些将电子邮件客户端配置为接收纯文本电子邮件并且反垃圾邮件内容过滤器寻找一些文本来平衡图像的收件人才能看到您邮件的纯文本部分在您的 HTML 消息中。其他人只会看到您漂亮的 HTML 电子邮件设计。 如果收件人在一个哑 Unix 终端上使用 PINE 阅读您的电子邮件怎么办?不是每个人都使用支持 HTML 呈现的 Outlook 或 Thunderbird。 @jstedfast,或者一大堆依赖阅读纯文本来实现自动化的自动化电子邮件客户端。

以上是关于如何使用 POP3 和 SmtpClient 转发多部分 MIME 电子邮件?的主要内容,如果未能解决你的问题,请参考以下文章

使用 SmtpClient 时如何保存电子邮件而不是发送?

SmtpClient - 发送到不同的域

如何使用 SmtpClient.SendAsync 发送带有附件的电子邮件?

使用 SmtpClient 通过 C# 发送 HTML 电子邮件

.NET 使用 SmtpClient 和 Mandrill SMTP 发送失败

c# 资源中的 SmtpClient 由于其保护级别而无法访问