C#基于SMTP协议发送电子邮件.docx

上传人:scccc 文档编号:14369500 上传时间:2022-02-04 格式:DOCX 页数:15 大小:27.38KB
返回 下载 相关 举报
C#基于SMTP协议发送电子邮件.docx_第1页
第1页 / 共15页
C#基于SMTP协议发送电子邮件.docx_第2页
第2页 / 共15页
C#基于SMTP协议发送电子邮件.docx_第3页
第3页 / 共15页
C#基于SMTP协议发送电子邮件.docx_第4页
第4页 / 共15页
C#基于SMTP协议发送电子邮件.docx_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《C#基于SMTP协议发送电子邮件.docx》由会员分享,可在线阅读,更多相关《C#基于SMTP协议发送电子邮件.docx(15页珍藏版)》请在三一文库上搜索。

1、C#基于SMTP协议发送电子邮件本代码示例演示了使用TcpClient和NetWorkStream基于SMTP协议发送电子邮件的全部过程,代码在VS2010中可以直接运行调用方式如下:ClsSendMail obj = new ClsSendMail();obj.UserName = 你的邮箱;obj.PassWord = 邮箱密码;bool flag = obj.Send(smtp地址, 你的邮箱, 发送人姓名, 收件人, 抄送人,true, 主题, 邮件内容);public class ClsSendMail #region 构造函数 public ClsSendMail() _listM

2、ailTo = new List(); _listMailccTo = new List(); _listAttachments = new List(); InitSmtpCode(); public ClsSendMail(string strSmtpServer, int intPort, string strUserName, string strPassword) this._strSmtpServer = strSmtpServer; this._intPort = intPort; this._strUserName = strUserName; this._strPassWor

3、d = strPassword; _listMailTo = new List(); _listMailccTo = new List(); _listAttachments = new List(); InitSmtpCode(); #endregion #region 成员变量 private string _strSmtpServer = ; /邮件服务器地址 private int _intPort = 25; /服务器端口 private string _strUserName = ; / SMTP认证时使用的用户名 private string _strPassWord = ; /

4、 SMTP认证时使用的密码 private string _strMailFrom = ; / 发件人地址 private string _strMailFromName = ; / 发件人姓名 private List _listMailTo; / 收件人列表 private List _listMailccTo; / 抄送收件人列表 private bool _IsHtml = false; / 是否Html邮件 private string _strPriority = Normal; / 邮件发送优先级 private string _strSubject = ; / 邮件主题 pri

5、vate string _strBody = ; / 邮件正文 private List _listAttachments; / 邮件附件列表 private string _strCharSet = GB2312; / 设定语言代码,默认设定为GB2312 private TcpClient client; / TcpClient对象,用于连接服务器 private NetworkStream NetStream; / NetworkStream对象 private Hashtable hsErrCode = new Hashtable(); / SMTP错误代码哈希表 private Ha

6、shtable hsRigCode = new Hashtable(); / SMTP正确代码哈希表 private string CRLF = rn; /回车符号 private string ErrMsg = ; /记录错误消息 #region MailPriority / / 邮件发送优先级(可设置为High,Normal,Low或1,3,5) / public enum MailPriority High, Normal, Low #endregion #region SmtpServer / / 邮件服务器地址 / public string SmtpServer get retur

7、n this._strSmtpServer; set this._strSmtpServer = value; #endregion #region Port / / 服务器端口 / public int Port get return this._intPort; set this._intPort = value; #endregion #region UserName / / SMTP认证时使用的用户名 / public string UserName get return this._strUserName; set this._strUserName = value; #endreg

8、ion #region PassWord / / SMTP认证时使用的密码 / public string PassWord get return this._strPassWord; set this._strPassWord = value; #endregion #region Priority / / 优先级 / public string Priority get return this._strPriority; set this._strPriority = value; #endregion #region CharSet / / 设定语言代码,默认设定为GB2312 / pu

9、blic string CharSet get return this._strCharSet; set this._strCharSet = value; #endregion #endregion #region 成员函数 #region InitSmtpCode 初始化SMTP服务器返回结果Hash表 / / 初始化SMTP服务器返回结果Hash表 / private void InitSmtpCode() hsErrCode.Add(500, 邮箱地址错误); hsErrCode.Add(501, 参数格式错误); hsErrCode.Add(502, 命令不可实现); hsErrCo

10、de.Add(503, 服务器需要SMTP验证); hsErrCode.Add(504, 命令参数不可实现); hsErrCode.Add(421, 服务未就绪,关闭传输信道); hsErrCode.Add(450, 要求的邮件操作未完成,邮箱不可用(例如,邮箱忙)); hsErrCode.Add(550, 要求的邮件操作未完成,邮箱不可用(例如,邮箱未找到,或不可访问)); hsErrCode.Add(451, 放弃要求的操作;处理过程中出错); hsErrCode.Add(551, 用户非本地,请尝试); hsErrCode.Add(452, 系统存储不足,要求的操作未执行); hsErr

11、Code.Add(552, 过量的存储分配,要求的操作未执行); hsErrCode.Add(553, 邮箱名不可用,要求的操作未执行(例如邮箱格式错误)); hsErrCode.Add(432, 需要一个密码转换); hsErrCode.Add(534, 认证机制过于简单); hsErrCode.Add(538, 当前请求的认证机制需要加密); hsErrCode.Add(454, 临时认证失败); hsErrCode.Add(530, 需要认证); hsRigCode.Add(220, 服务就绪); hsRigCode.Add(250, 要求的邮件操作完成); hsRigCode.Add(

12、251, 用户非本地,将转发向); hsRigCode.Add(354, 开始邮件输入,以.结束); hsRigCode.Add(221, 服务关闭传输信道); hsRigCode.Add(334, 服务器响应验证Base64字符串); hsRigCode.Add(235, 验证成功); #endregion #region Base64EnCode 字符串转换为base64码 / / 字符串转换为base64码 / / / private string Base64EnCode(string strValue) byte barray; barray = Encoding.Default.G

13、etBytes(strValue); return Convert.ToBase64String(barray); #endregion #region Base64DeCode base64码转换为普通字符 / / 将Base64字符串解码为普通字符串 / / / private string Base64DeCode(string strValue) byte barray; barray = Convert.FromBase64String(strValue); return Encoding.Default.GetString(barray); #endregion #region M

14、ailToAdd 添加收件人 / / 添加收件人 / / public void MailToAdd(string strMailToAddress) _listMailTo.Add(strMailToAddress); #endregion #region MailToAdd 添加一组收件人 / / 添加一组收件人 / / public void MailToAdd(string strMailAddress) foreach (string str in strMailAddress) MailToAdd(str); #endregion #region MailToClear 清空收件人

15、 / / 清空收件人 / public void MailToClear() _listMailTo.Clear(); #endregion #region MailccToAdd 添加抄送人 / / 添加抄送人 / / public void MailccToAdd(string strMialAddress) _listMailccTo.Add(strMialAddress); #endregion #region MailccToAdd 添加一组抄送人 / / 添加一组抄送人 / / public void MailccToAdd(string strMailAddress) forea

16、ch (string str in strMailAddress) MailccToAdd(str); #endregion #region MailccToClear 清空抄送人 / / 清空抄送人 / public void MailccToClear() _listMailccTo.Clear(); #endregion #region AttachmentAdd 邮件添加附件 / / 邮件添加附件 / / public void AttachmentAdd(string strFilePath) _listAttachments.Add(strFilePath); #endregion

17、 #region AttachmentClear 清空邮件附件 / / 清空邮件附件 / public void AttachmentClear() _listAttachments.Clear(); #endregion #region GetFileStream 获取附件文件流 / / 获取附件文件流 / / / private string GetFileStream(string strFilePath) FileStream file = new FileStream(strFilePath, System.IO.FileMode.Open); byte byStream = new

18、 byteSystem.Convert.ToInt32(file.Length); file.Read(byStream, 0, byStream.Length); file.Close(); return (System.Convert.ToBase64String(byStream); #endregion #region SendStream 向SMTP服务器发送数据 / / 向SMTP服务器发送数据 / / / private bool SendStream(string strCmd) byte SendBuffer; SendBuffer = Encoding.Default.Ge

19、tBytes(strCmd); try NetStream.Write(SendBuffer, 0, SendBuffer.Length); return true; catch (Exception ex) ErrMsg = 网络连接错误: + ex.Message; return false; #endregion #region ReceiveStream 接收SMTP服务器返回数据 / / 接收SMTP服务器返回数据 / / private string ReceiveStream() int StreamSize; string ReturnStream = ; byte ReadB

20、uffer = new byte1024; try StreamSize = NetStream.Read(ReadBuffer, 0, ReadBuffer.Length); if (StreamSize != 0) ReturnStream = Encoding.Default.GetString(ReadBuffer).Substring(0, StreamSize); catch (Exception ex) ErrMsg = 网络连接错误: + ex.Message; return ReturnStream; #endregion #region CheckCommand 校验数据发

21、送状态 / / 校验数据发送状态 / / / private bool CheckCommand(string strCmd) if (SendStream(strCmd) string strReturn = ReceiveStream(); if (strReturn = ) return false; string strReturnCode = strReturn.Substring(0, 3); if (hsRigCodestrReturnCode != null) return true; else if (hsErrCodestrReturnCode != null) ErrMs

22、g += (strReturnCode + hsErrCodestrReturnCode.ToString(); ErrMsg += CRLF; else ErrMsg += strReturn; return false; else return false; private bool CheckCommand(string strCmds) for (int i = 0; i strCmds.Length; i+) if (CheckCommand(strCmdsi) continue; else return false; return true; #endregion #region

23、SendMail 发送邮件 / / 发送邮件 / / private bool SendMail() /连接网络 try client = new TcpClient(_strSmtpServer, _intPort); catch (Exception ex) ErrMsg += ex.Message; return false; NetStream = client.GetStream(); /验证网络连接是否正确 if (hsRigCodeReceiveStream().Substring(0, 3) = null) ErrMsg += 网络连接失败; return false; str

24、ing SendCmdStrings; string SendCmdString; /进行SMTP验证 if (UserName != ) SendCmdStrings = new String4; SendCmdStrings0 = EHLO + _strSmtpServer + CRLF; SendCmdStrings1 = AUTH LOGIN + CRLF; SendCmdStrings2 = Base64EnCode(UserName) + CRLF; SendCmdStrings3 = Base64EnCode(PassWord) + CRLF; if (!CheckCommand

25、(SendCmdStrings) return false; else SendCmdString = HELO + _strSmtpServer + CRLF; if (!CheckCommand(SendCmdString) return false; SendCmdString = MAIL FROM: + CRLF; if (!CheckCommand(SendCmdString) return false; for (int i = 0; i _listMailTo.Count; i+) SendCmdString = RCPT TO: + CRLF; if (!CheckCommand(SendCmdString) return false; SendCmdString = DATA + CRLF; if (!CheckCommand(SendCmdString) return false; /构造发送数据 SendCmdString = From: + _strMailFromName + + CRLF; SendCmdString += To:; for (int i = 1; i _listMailTo.Count; i+)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1