ServicePointManager

發布 C# 2142

C#發送郵件異常:根據驗證過程,遠程證書無效

今天在做發送郵件功能時,開始用qq郵箱和163郵箱都可以正常發送,后再改用我公司的郵箱和smtp時竟然報錯了。



    

異常提示-----“根據驗證過程,遠程證書無效”,后來通過查詢資料解決該問題,上代碼:



    


    
using log4net;

    
using System;

    
using System.Collections.Generic;

    
using System.Linq;

    
using System.Net;

    
using System.Net.Mail;

    
using System.Net.Security;

    
using System.Security.Cryptography.X509Certificates;

    
using System.Text;

    
namespace BLL

    {

    
public class emailHandle

     {

    
private string _serviceType = "SMTP";

    
private string _host;

    
/// <summary>

     /// 發送者郵箱

    
/// </summary>

     public string From { get; set; }

    
/// <summary>

     /// 接收者郵箱列表

    
/// </summary>

     public List<string> To { get; set; }

    
/// <summary>

     /// 抄送者郵箱列表

    
/// </summary>

     public string[] Cc { get; set; }

    
/// <summary>

     /// 秘抄者郵箱列表

    
/// </summary>

     public string[] Bcc { get; set; }

    
/// <summary>

     /// 郵件主題

    
/// </summary>

     public string Subject { get; set; }

    
/// <summary>

     /// 郵件內容

    
/// </summary>

     public string Body { get; set; }

    
/// <summary>

     /// 是否是HTML格式

    
/// </summary>

     public bool IsBodyHtml { get; set; }

    
/// <summary>

     /// 附件列表

    
/// </summary>

     public string[] Attachments { get; set; }

    
/// <summary>

     /// 郵箱服務類型(Pop3,SMTP,IMAP,MAIL等),默認為SMTP

    
/// </summary>

     public string ServiceType

     {

    
get { return _serviceType; }

    
set { _serviceType = value; }

     }

    
/// <summary>

     /// 郵箱服務器,如果沒有定義郵箱服務器,則根據serviceType和Sender組成郵箱服務器

    
/// </summary>

     public string Host

     {

    
get { return _host; }

    
set { _host = value; }

     }

    
/// <summary>

     /// 郵箱賬號(默認為發送者郵箱的賬號)

    
/// </summary>

     public string UserName { get; set; }

    
/// <summary>

     /// 郵箱密碼(默認為發送者郵箱的密碼),默認格式GB2312

    
/// </summary>

     public string Password { get; set; }

    
/// <summary>

     /// 郵箱優先級

    
/// </summary>

     public MailPriority MailPriority { get; set; }

    
/// <summary>

     /// 郵件正文編碼格式

    
/// </summary>

     public Encoding Encoding { get; set; }

    
/// <summary>

     /// 構造參數,發送郵件,使用方法備注:公開方法中調用

    
/// </summary>

     public int Send()

     {

    
var mailMessage = new MailMessage();

    
//讀取To 接收者郵箱列表

     try

     {

    
if (this.To != null && this.To.Count > 0)

     {

    
foreach (string to in this.To)

     {

    
if (string.IsNullOrEmpty(to)) continue;

     mailMessage.To.Add(
new MailAddress(to.Trim()));

     }

     }

    
//讀取Cc 抄送者郵件地址

     if (this.Cc != null && this.Cc.Length > 0)

     {

    
foreach (var cc in this.Cc)

     {

    
if (string.IsNullOrEmpty(cc)) continue;

     mailMessage.CC.Add(
new MailAddress(cc.Trim()));

     }

     }

    
//讀取Attachments 郵件附件

     if (this.Attachments != null && this.Attachments.Length > 0)

     {

    
foreach (var attachment in this.Attachments)

     {

    
if (string.IsNullOrEmpty(attachment)) continue;

     mailMessage.Attachments.Add(
new Attachment(attachment));

     }

     }

    
//讀取Bcc 秘抄人地址

     if (this.Bcc != null && this.Bcc.Length > 0)

     {

    
foreach (var bcc in this.Bcc)

     {

    
if (string.IsNullOrEmpty(bcc)) continue;

     mailMessage.Bcc.Add(
new MailAddress(bcc.Trim()));

     }

     }

    
//讀取From 發送人地址

     mailMessage.From = new MailAddress(this.From);

    
//郵件標題

     Encoding encoding = Encoding.GetEncoding("GB2312");

     mailMessage.Subject
= this.Subject;

    
//郵件正文是否為HTML格式

     mailMessage.IsBodyHtml = this.IsBodyHtml;

    
//郵件正文

     mailMessage.Body = this.Body;

     mailMessage.BodyEncoding
= this.Encoding;

    
//郵件優先級

     mailMessage.Priority = this.MailPriority;

    
//發送郵件代碼實現

     var smtpClient = new SmtpClient

     {

     Host
= this.Host,

     EnableSsl
= true,

     Credentials
= new NetworkCredential(this.UserName, this.Password)

     };

    
//加這段之前用公司郵箱發送報錯:根據驗證過程,遠程證書無效

    
//加上后解決問題

     ServicePointManager.ServerCertificateValidationCallback =

    delegate(Object obj, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) { return true; };

    
//認證

     smtpClient.Send(mailMessage);

    
return 1;

     }

    
catch (Exception ex)

     {

    
var loger = LogManager.GetLogger(typeof(emailHandle));

     loger.Info(
string.Format("發送郵件異常,收信郵箱:{0}", this.To[0]), ex);

    
return -1;

     }

     }

     }

    }


    
 
黑龙江36选7结果查询