C# 通过QQ邮箱和阿里云邮箱自动发送邮件(对System.Web.Mail与System.Net.M ...

打印 上一主题 下一主题

主题 862|帖子 862|积分 2586

1. 实现功能:
  通过程序自动发送邮件。使用QQ邮箱(个人/企业)或阿里云邮箱(企业)。
 
2. 编码过程中的尝试结果:
  2.1 测试配置:见3.1 app.config配置
  2.2 测试结果

 
  
3. 代码实现
  3.1 app.config配置
    3.1.1 QQ邮箱配置
  1. 1 <connectionStrings>   
  2. 2   <add name="MailServerIP" connectionString="smtp.exmail.qq.com" />
  3. 3     <add name="MailServerPort" connectionString="465" />
  4. 4     <add name="fromMailAddress" connectionString="xxx@yyy.com" />
  5. 5     <add name="toMailAddress" connectionString="xxx2@yyy.com"/>
  6. 6     <add name="mailUsername" connectionString="usernamexxx" />
  7. 7     <add name="mailPassword" connectionString="passwordxxx" />
  8. 8     <add name="ccMailAddress" connectionString="usercc@yyy.com" />
  9. 9 </connectionStrings><br>注:若是QQ个人邮箱,则mailPassword需配置成授权码
复制代码
    3.1.2 阿里云邮箱配置
  1. 1 <connectionStrings>  
  2. 2   <add name="MailServerIP" connectionString="smtp.qiye.aliyun.com" />
  3. 3   <add name="MailServerPort" connectionString="25" />
  4. 4   <add name="fromMailAddress" connectionString="xxx@yyy.com" />
  5. 5   <add name="toMailAddress" connectionString="xxx1@yyy.com"/>
  6. 6   <add name="mailUsername" connectionString="usernamexxx" />
  7. 7   <add name="mailPassword" connectionString="passwordxxx" />
  8. 8   <add name="ccMailAddress" connectionString="usercc@yyy.com" />
  9. 9 </connectionStrings>
复制代码
 
  3.2 调用
  1. 1 public void EventOccured(string EventID)
  2. 2 {
  3. 3     string subjectInfo = "一些要发送邮件的事件发生咯";
  4. 4     string bodyInfo = "<p style ="font-size: 10pt">Hi,all</p>";
  5. 5     bodyInfo += "<p style ="font-size: 10pt;color:red">事件:" + EventID + "已经发生,请注意监控。</p>";
  6. 6     bodyInfo += "<p style ="font-size: 10pt">以上内容为系统自动发送,请勿直接回复,谢谢。</p>";
  7. 7
  8. 8     SendMailHelper.Sendmail_(subjectInfo, bodyInfo);
  9. 9 }
复制代码
  1. 1 public static void Sendmail_(string subjectInfo, string bodyInfo)
  2. 2 {
  3. 3     try
  4. 4     {
  5. 5         string senderServerIp = ConfigurationManager.ConnectionStrings["MailServerIP"].ConnectionString;
  6. 6         string toMailAddress = ConfigurationManager.ConnectionStrings["toMailAddress"].ConnectionString;
  7. 7         string fromMailAddress = ConfigurationManager.ConnectionStrings["fromMailAddress"].ConnectionString;
  8. 8         string mailUsername = ConfigurationManager.ConnectionStrings["mailUsername"].ConnectionString;
  9. 9         string mailPassword = ConfigurationManager.ConnectionStrings["mailPassword"].ConnectionString;
  10. 10         string mailPort = ConfigurationManager.ConnectionStrings["MailServerPort"].ConnectionString;
  11. 11         string cc = ConfigurationManager.ConnectionStrings["ccMailAddress"].ConnectionString;
  12. 12
  13. 13         MyEmail email = new MyEmail(senderServerIp, toMailAddress, fromMailAddress, subjectInfo, bodyInfo, mailUsername, mailPassword, mailPort, cc, true, false);  //注: aliyun需将最后参数改为:false,true
  14. 14         email.Send();
  15. 15     }
  16. 16     catch (Exception ex)
  17. 17     {
  18. 18         Console.WriteLine(ex.ToString());
  19. 19     }
  20. 20 }
复制代码
 
  3.3 具体实现
  3.3.1 QQ邮箱:使用System.Web.Mail
  1. 1 private System.Web.Mail.MailMessage mMessage;
  2. 2
  3. 3 public MyEmail(string server, string toMail, string fromMail, string subject, string emailBody, string username, string password, string port,string cc, bool sslEnable, bool pwdCheckEnable)
  4. 4 {
  5. 5     try
  6. 6     {
  7. 7         //for System.Web.Mail: QQ MAIL
  8. 8         mMessage = new System.Web.Mail.MailMessage();
  9. 9         mMessage.Priority = System.Web.Mail.MailPriority.Normal;
  10. 10         mMessage.From = fromMail;
  11. 11         mMessage.To = toMail;
  12. 12         mMessage.Cc = cc;
  13. 13         mMessage.Subject = subject;
  14. 14         mMessage.BodyFormat = System.Web.Mail.MailFormat.Html;
  15. 15         mMessage.BodyEncoding = Encoding.UTF8;
  16. 16         mMessage.Body = emailBody;
  17. 17         mMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1"); //basic authentication
  18. 18         mMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", fromMail); //set your username here
  19. 19         mMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", password); //set your password here
  20. 20         mMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport", port);//set port
  21. 21         mMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpusessl", sslEnable);//set is ssl
  22. 22         System.Web.Mail.SmtpMail.SmtpServer = server;
  23. 23     }
  24. 24     catch (Exception ex)
  25. 25     {
  26. 26     }
  27. 27 }
复制代码
  1. 1 public void Send()
  2. 2 {
  3. 3     try
  4. 4     {
  5. 5         //for System.Web.Mail
  6. 6         if (mMessage != null)
  7. 7         {
  8. 8             System.Web.Mail.SmtpMail.Send(mMessage);
  9. 9         }
  10. 10     }
  11. 11     catch (Exception ex)
  12. 12     {
  13. 13         Console.WriteLine(ex.ToString());
  14. 14     }
  15. 15 }
复制代码
 
  3.3.2 阿里云邮箱:使用System.Net.Mail
  1. 1 private MailMessage mMailMessage;   
  2. 2 private SmtpClient mSmtpClient;    
  3. 3 private int mSenderPort;         
  4. 4 private string mSenderServerHost;
  5. 5 private string mSenderPassword;
  6. 6 private string mSenderUsername;
  7. 7 private bool mEnableSsl;
  8. 8 private bool mEnablePwdAuthentication;
  9. 9
  10. 10 public MyEmail(string server, string toMail, string fromMail, string subject, string emailBody, string username, string password, string port,string cc, bool sslEnable, bool pwdCheckEnable)
  11. 11 {
  12. 12     try
  13. 13     {
  14. 14         //for System.Net.Mail: Aliyun
  15. 15         mMailMessage = new MailMessage();
  16. 16         mMailMessage.To.Add(toMail);
  17. 17         mMailMessage.From = new MailAddress(fromMail);
  18. 18         mMailMessage.Subject = subject;
  19. 19         mMailMessage.Body = emailBody;
  20. 20         mMailMessage.IsBodyHtml = true;
  21. 21         mMailMessage.BodyEncoding = System.Text.Encoding.UTF8;
  22. 22         mMailMessage.Priority = MailPriority.Normal;
  23. 23         if (!string.IsNullOrEmpty(cc))
  24. 24             mMailMessage.CC.Add(cc);
  25. 25         this.mSenderServerHost = server;
  26. 26         this.mSenderUsername = fromMail;
  27. 27         this.mSenderPassword = password;
  28. 28         this.mSenderPort = Convert.ToInt32(port);
  29. 29         this.mEnableSsl = sslEnable;
  30. 30         this.mEnablePwdAuthentication = pwdCheckEnable;
  31. 31     }
  32. 32     catch (Exception ex)
  33. 33     {
  34. 34         Console.WriteLine(ex.ToString());
  35. 35     }
  36. 36 }
复制代码
  1. 1 public void Send()
  2. 2 {
  3. 3     try
  4. 4     {
  5. 5         //for System.Net.Mail
  6. 6         if (mMailMessage != null)
  7. 7         {
  8. 8             mSmtpClient = new SmtpClient();
  9. 9             //mSmtpClient.Host = "smtp." + mMailMessage.From.Host;
  10. 10             mSmtpClient.Host = this.mSenderServerHost;
  11. 11             mSmtpClient.Port = this.mSenderPort;
  12. 12             mSmtpClient.UseDefaultCredentials = false;
  13. 13             mSmtpClient.EnableSsl = this.mEnableSsl;
  14. 14             if (this.mEnablePwdAuthentication)
  15. 15             {
  16. 16                 System.Net.NetworkCredential nc = new System.Net.NetworkCredential(this.mSenderUsername, this.mSenderPassword);
  17. 17                 //mSmtpClient.Credentials = new System.Net.NetworkCredential(this.mSenderUsername, this.mSenderPassword);
  18. 18                 //NTLM: Secure Password Authentication in Microsoft Outlook Express
  19. 19                 mSmtpClient.Credentials = nc.GetCredential(mSmtpClient.Host, mSmtpClient.Port, "NTLM");
  20. 20             }
  21. 21             else
  22. 22             {
  23. 23                 mSmtpClient.Credentials = new System.Net.NetworkCredential(this.mSenderUsername, this.mSenderPassword);
  24. 24             }
  25. 25             mSmtpClient.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
  26. 26             mSmtpClient.Send(mMailMessage);
  27. 27         }
  28. 28     }
  29. 29     catch (Exception ex)
  30. 30     {
  31. 31         Console.WriteLine(ex.ToString());
  32. 32     }
  33. 33 }
复制代码
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

没腿的鸟

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表