【C#】发送邮件含25及465端口
写在最前面:
刚开始接触发送邮件是25端口的方式,但是在实际使用中发现 我在本地调试正常,放到阿里云服务器就没有响应。
再确定本地替换服务器文件没有问题的情况下,再次百度才得知各大云厂商默认就封了25端口,如果需要发邮件要改用465端口发送。
465端口【此方法在阿里云服务器测试成功】:
使用时需引用System.Web
System.Web.Mail.MailMessage mail = new System.Web.Mail.MailMessage(); try { mail.To = "111111111@qq.com"; mail.From = "111111111111@163.com"; mail.Subject = "关于公司春节放假的通知"; mail.BodyFormat = System.Web.Mail.MailFormat.Html; mail.Body = "哈哈哈哈哈"; mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1"); //身份验证 mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", mail.From); //邮箱登录账号,这里跟前面的发送账号一样就行 mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "1111111111111"); //这个密码要注意:如果是一般账号,要用授权码;企业账号用登录密码 mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport", 465);//端口 mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpusessl", "true");//SSL加密 System.Web.Mail.SmtpMail.SmtpServer = "smtp.163.com"; //企业账号用smtp.exmail.qq.com System.Web.Mail.SmtpMail.Send(mail); //邮件发送成功 Console.Write("成功"); Console.ReadKey(); } catch (Exception ex) { //失败,错误信息:ex.Message; Console.WriteLine(ex.Message); Console.ReadKey(); }
25端口:
EmailHelper类:
public class EmailHepler { private MailMessage mMailMessage; //主要处理发送邮件的内容(如:收发人地址、标题、主体、图片等等) private SmtpClient mSmtpClient; //主要处理用smtp方式发送此邮件的配置信息(如:邮件服务器、发送端口号、验证方式等等) private int mSenderPort; //发送邮件所用的端口号(htmp协议默认为25) private string mSenderServerHost; //发件箱的邮件服务器地址(IP形式或字符串形式均可) private string mSenderPassword; //发件箱的密码 private string mSenderUsername; //发件箱的用户名(即@符号前面的字符串,例如:hello@163.com,用户名为:hello) private bool mEnableSsl; //是否对邮件内容进行socket层加密传输 private bool mEnablePwdAuthentication; //是否对发件人邮箱进行密码验证 ///<summary> /// 构造函数 ///</summary> ///<param name="server">发件箱的邮件服务器地址</param> ///<param name="toMail">收件人地址(可以是多个收件人,程序中是以“;"进行区分的)</param> ///<param name="fromMail">发件人地址</param> ///<param name="subject">邮件标题</param> ///<param name="emailBody">邮件内容(可以以html格式进行设计)</param> ///<param name="username">发件箱的用户名(即@符号前面的字符串,例如:hello@163.com,用户名为:hello)</param> ///<param name="password">发件人邮箱密码</param> ///<param name="port">发送邮件所用的端口号(htmp协议默认为25)</param> ///<param name="sslEnable">true表示对邮件内容进行socket层加密传输,false表示不加密</param> ///<param name="pwdCheckEnable">true表示对发件人邮箱进行密码验证,false表示不对发件人邮箱进行密码验证</param> public EmailHepler(string server, string toMail, string fromMail, string subject, string emailBody, string username, string password, string port, bool sslEnable, bool pwdCheckEnable) { try { mMailMessage = new MailMessage(); string[] arr = toMail.Split(';'); for (int i = 0; i < arr.Length; i++) { mMailMessage.To.Add(arr[i]); } //mMailMessage.To.Add(toMail); mMailMessage.From = new MailAddress(fromMail); mMailMessage.Subject = subject; mMailMessage.Body = emailBody; mMailMessage.IsBodyHtml = true; mMailMessage.BodyEncoding = System.Text.Encoding.UTF8; mMailMessage.Priority = MailPriority.Normal; this.mSenderServerHost = server; this.mSenderUsername = username; this.mSenderPassword = password; this.mSenderPort = Convert.ToInt32(port); this.mEnableSsl = sslEnable; this.mEnablePwdAuthentication = pwdCheckEnable; } catch (Exception ex) { Console.WriteLine(ex.ToString()); } } ///<summary> /// 添加附件 ///</summary> ///<param name="attachmentsPath">附件的路径集合,以分号分隔</param> public void AddAttachments(string attachmentsPath) { try { string[] path = attachmentsPath.Split(';'); //以什么符号分隔可以自定义 Attachment data; ContentDisposition disposition; for (int i = 0; i < path.Length; i++) { data = new Attachment(path[i], MediaTypeNames.Application.Octet); disposition = data.ContentDisposition; disposition.CreationDate = File.GetCreationTime(path[i]); disposition.ModificationDate = File.GetLastWriteTime(path[i]); disposition.ReadDate = File.GetLastAccessTime(path[i]); mMailMessage.Attachments.Add(data); } } catch (Exception ex) { Console.WriteLine(ex.ToString()); } } ///<summary> /// 邮件的发送 ///</summary> public void Send() { try { if (mMailMessage != null) { mSmtpClient = new SmtpClient(); //mSmtpClient.Host = "smtp." + mMailMessage.From.Host; mSmtpClient.Host = this.mSenderServerHost; mSmtpClient.Port = this.mSenderPort; mSmtpClient.UseDefaultCredentials = false; mSmtpClient.EnableSsl = this.mEnableSsl; if (this.mEnablePwdAuthentication) { System.Net.NetworkCredential nc = new System.Net.NetworkCredential(this.mSenderUsername, this.mSenderPassword); //mSmtpClient.Credentials = new System.Net.NetworkCredential(this.mSenderUsername, this.mSenderPassword); //NTLM: Secure Password Authentication in Microsoft Outlook Express mSmtpClient.Credentials = nc.GetCredential(mSmtpClient.Host, mSmtpClient.Port, "NTLM"); } else { mSmtpClient.Credentials = new System.Net.NetworkCredential(this.mSenderUsername, this.mSenderPassword); } mSmtpClient.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network; mSmtpClient.Send(mMailMessage); } } catch (Exception ex) { Console.WriteLine(ex.ToString()); } }
具体发送:
try { //smtp.163.com string senderServerIp = "smtp.163.com"; //"123.125.50.133"; //smtp.gmail.com //string senderServerIp = "74.125.127.109"; //smtp.qq.com //string senderServerIp = "58.251.149.147"; //string senderServerIp = "smtp.sina.com"; string toMailAddress = "1111111111@qq.com"; string fromMailAddress = "111111111@163.com"; string subjectInfo = "Test sending e_mail"; string bodyInfo = "Hello Eric, This is my first testing e_mail"; string mailUsername = "2000"; string mailPassword = "AVGXXXXXXXXX"; //发送邮箱的授权码 string mailPort = "25"; //要发送的文件内容 string attachPath = "E:\\123123.txt;E:\\haha.doc"; //E:\\123123.txt;E:\\haha.pdf EmailHepler email = new EmailHepler(senderServerIp, toMailAddress, fromMailAddress, subjectInfo, bodyInfo, mailUsername, mailPassword, mailPort, false, false); //添加附件 附件的路径集合,以分号分隔 email.AddAttachments(attachPath); email.Send(); } catch (Exception ex) { Console.WriteLine(ex.ToString()); }
参考网址忘记了,如果原作者发现了记得提醒我加上转载的网址,感谢各位前行者!

浙公网安备 33010602011771号