65.9K
CodeProject 正在变化。 阅读更多。
Home

一个用于在 C# 中发送带附件的电子邮件的类。

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.82/5 (52投票s)

2002年6月11日

2分钟阅读

viewsIcon

517614

downloadIcon

5241

一个用于在 C# 中发送带附件的电子邮件的类。

引言

这是一个 C# 中的 SMTP 客户端实现。它处理附件并将正文作为 HTML 发送。它还可以执行基本的 (AUTH LOGIN PLAIN) 和 Base64 (AUTH LOGIN) 身份验证。

不久前,我一直在寻找一个(免费的)类/库,以便在 C# 中发送电子邮件。我找到了一些示例,但没有一个符合我的需求。它们大多演示了基础知识,并没有涉及附件。因此,我决定编写自己的实现。

我查阅了几个 RFC(主要是 821 和 822),然后开始执行任务。最初的过程非常简单,证明了在 C# 中进行 Tcp 通信的一个很好的经验。附件过程有点令人困惑。我理解如何做我需要做的事情,但不确定确切地做什么,以及以什么顺序进行。与此相关的 RFC 和 MIME 相关的 RFC 并不完全清晰。这时我找到了 PJ Naughter 的 CSMTPConnection 类。 他的实现帮助我了解了 MIME 部分的正确顺序/结构,并且总体上非常有用。The Code Project 上的版本有点旧,但是,我建议从 PJ 的网站获取 http://www.naughter.com/smtp.html。非常感谢他提供了一个很好的示例。

解决方案中还有一个项目,它是一个使用此类的基本的电子邮件表单。

主类可以按如下方式使用

类的示例用法

SmtpEmailer emailer = new SmtpEmailer();
emailer.Host = "mymail.host.com";			
emailer.From = "someone@somwhere.com";
emailer.AuthenticationMode = AuthenticationType.Base64;
emailer.User = "myuserid";
emailer.Password = "mypassword";
emailer.Subject = "a test message";
emailer.Body = "this is only a test";
emailer.To.Add("toperson1@nowhere.com");
emailer.To.Add("toperson2@nowhere.com");
emailer.Attachments.Add(new SmtpAttachment(@"c:\file1.exe"));
emailer.Attachments.Add(new SmtpAttachment(@"c:\file2.txt"));      
emailer.SendMessage();

您还可以将正文作为 HTML 发送,并通过添加以下内容包含内联图像

emailer.SendAsHTML = true;

当您以 HTML 格式发送并且想要在 HTML 中包含内联图像时,您将按如下方式添加附件

emailer.Attachments.Add(new SmtpAttachment(@"c:\mypicture.jpg", 
                        "image/jpg", AttachmentLocation.Inline));

图像将被赋予一个 ID,即不带扩展名的文件名。然后,您将在 html 中将图像引用为

 <img src="cid:MY_FILENAME_WITHOUT_EXTENSION">

还有一个事件,OnMailSent,用于与 SendMessageAsync 方法一起使用。如果人们觉得这有用,那么我将发布更新/增强功能。尽情享受吧。

版本历史

1.4 - 添加了纯文本 (AUTH LOGIN PLAIN) 和 base64 (AUTH LOGIN) 身份验证。
添加了 CC/BCC 属性。

1.3 - 修复了 MIME 标头序列以及 Outlook 与 Outlook Express 之间的一些问题。

1.2 - 修复了 quoted-printable 编码问题和 Outlook 中的一个问题。

1.1 - 添加了 HTML 正文支持,更好的 MIME 处理。

1.0 - 初始版本。

© . All rights reserved.