ASP.NET通过SMTP和ESMTP实现邮件发送带图片内容的邮件
介绍SMTP命令和ESMTP过程
什么是 SMTP
SMTP (Simple Mail Transfer Protocol) : 电子邮件从客户机传输到服务器或从某一个服务器传输到另一个服务器使用的传输协议。 SMTP 是请求/响应协议,命令和响应都是基于 ASCII 文本,并以 CR 和 LF 符结束。响应包括一个表示返回状态的三位数字代码。SMTP 在 TCP 协议 25 端口监听连接请求。
什么是 ESMTP
ESMTP (Extended SMTP),顾名思义,扩展 SMTP 就是对标准 SMTP 协议进行的扩展。它与 SMTP 服务的区别仅仅是,使用 SMTP 发信不需要验证用户帐户,而用 ESMTP 发信时, 服务器会要求用户提供用户名和密码以便验证身份。验证之后的邮件发送过程与 SMTP 方式没有两样。
SMTP 命令
SMTP 命令包括:
HELO 向服务器标识用户身份。发送者能欺骗,说谎,但一般情况下服务器都能检测到。
EHLO 向服务器标识用户身份。发送者能欺骗,说谎,但一般情况下服务器都能检测到。
MAIL FROM 命令中指定的地址是发件人地址
RCPT TO 标识单个的邮件接收人;可有多个 RCPT TO;常在 MAIL 命令后面。
DATA 在单个或多个 RCPT 命令后,表示所有的邮件接收人已标识,并初始化数据传输,以 CRLF.CRLF 结束
VRFY 用于验证指定的用户/邮箱是否存在;由于安全方面的原因,服务器常禁止此命令
EXPN 验证给定的邮箱列表是否存在,扩充邮箱列表,也常被禁用
HELP 查询服务器支持什么命令
NOOP 无操作,服务器应响应 OK
RSET 重置会话,当前传输被取消
QUIT 结束会话
以上这些是SMTP和ESMPT的基本知识,特别是这些命令,对我们操作ESMTP协议帮助会比较大的,说白了,ESMTP就是通过Socket流方式和邮件服务器进行交互,基本上目前所有的服务器都会提供对ESMTP协议的支持,SMTP协议在dotnet中实现就是通过调用System.Net.Mail .SmtpClient实现的。
发送嵌入图片或者文件邮件的原理就是,把图片资源提交(和附件类似方式,但是不同),然后通过修改HTML的IMG标识的SRC实现实现内容的相对引用的。
如我们插入本地图片文件的时候,文件的地址是“D:\test.jpg",如果这样发送出去,那么肯定是查看不到的了,我们要将它修改为:<img src=\"cid:test\">
然后,我们在邮件正文中附加相关的文件就可以了,这个有点类似于一种特殊的定位格式。具体的示例代码如下所示。
System.Net.Mail.MailMessage mailMessage = new System.Net.Mail.MailMessage();