如果邮箱需要ssl加密访问 请问如何用c#发邮件?已经有现成的发邮件程序
如果邮件帐户需要使用ssl加密(比如GMAIL)  应该如何修改呢

解决方案 »

  1.   

    using System.Net.Mail;MailMessage mail = new MailMessage();                    
    mail.IsBodyHtml = true;                                  
    mail.SubjectEncoding = Encoding.GetEncoding("GB2312");   
    mail.BodyEncoding = Encoding.GetEncoding("GB2312");      
    mail.Priority = MailPriority.High;                       
    mail.From = new MailAddress("user");                     
    mail.To.Add("[email protected]");                        
    mail.Subject = "hello";                                  
    mail.Body = "hello";                                     
    SmtpClient smtp = new SmtpClient(server, port);          
    smtp.EnableSsl = true;                                   
    smtp.Credentials = new NetworkCredential("user", "pass");
    smtp.Send(mail);                                         sdk2.0
      

  2.   

    用jmail组件 regsvr32 jmail.dllpublic static string SendMail(string ReceiveMail,string MailSubject,string MailContent) 

    jmail.Message Jmail = new jmail.Message();
    Jmail.Silent = true;
    Jmail.Logging = true;
    Jmail.Charset = "GB2312";
    Jmail.ContentType = "text/html";
    Jmail.AddRecipient(ReceiveMail,"","");
    Jmail.From = "***";
    Jmail.MailServerUserName = "***";
    Jmail.MailServerPassWord = "***";
    Jmail.Subject = MailSubject;
    Jmail.Body = MailContent;
    Jmail.Send("IP地址",false);
    Jmail.Close();
    return Jmail.ErrorCode.ToString();
    }
      

  3.   

    忘了说了,是在dos提示符下输入regsvr32 jmail.dll
      

  4.   

    .net 2.0中使用SslStream来进行socket操作。以下是连接及登陆的代码片断。
    其他的部分请自行实现。
    private static bool OnCertificateValidation(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
            {
                if (sslPolicyErrors == SslPolicyErrors.None)
                {
                    return true;
                }
                return false;
            } private SslStream GetConnection()
    {
                SslStream sslStream = null;
    try
    {
    if(null == this.Host || this.Host.Trim().Length == 0)
    {
    ErrorEventArgs e = new ErrorEventArgs("邮件服务器地址未设置!");
                        OnSmtpError(e);
    }
    else
    {
                        OnBeginConnect(EventArgs.Empty);
    tcpClient = new TcpClient(this.Host, this.Port);
                        RemoteCertificateValidationCallback callback = new RemoteCertificateValidationCallback(OnCertificateValidation); tcpClient.SendTimeout = this.SendTimeout;
    tcpClient.ReceiveTimeout = this.RecieveTimeout;
    tcpClient.ReceiveBufferSize = 1024;
    tcpClient.SendBufferSize = 1024; LingerOption linger = new LingerOption(true, 10);
    tcpClient.LingerState = linger;                    
                        sslStream = new SslStream(tcpClient.GetStream(), false, callback);
                        ReadFromStream(ref sslStream, ref returnMsg);
                        if (CheckError(returnMsg, ReplyConstants.SmtpReplyConstants.HELO_REPLY))
                        {
                            throw new Exception();
                        }
                        sslStream.AuthenticateAsClient(this.Host);
                        if (sslStream.IsAuthenticated)
                        {
                            OnConnect(EventArgs.Empty);
                            return sslStream;
                        }
    }
    }
    catch
    {
    ErrorEventArgs e = new ErrorEventArgs("无法连接到邮件服务器!");
                    OnSmtpError(e);
    }
                return sslStream;
    } private bool AuthLogin(ref SslStream sslStream)
    {
    if(null != this.Username && this.Username.Length > 0 && null != this.Password && this.Password.Length > 0)
    {
    WriteToStream(ref sslStream, "AUTH LOGIN\r\n");
    ReadFromStream(ref sslStream, ref returnMsg);
    if(AuthImplemented(returnMsg))
    {
                        OnBeginAuthenticate(EventArgs.Empty);
    string encodedUsername = Convert.ToBase64String(Encoding.ASCII.GetBytes(this.Username.ToCharArray()));
    WriteToStream(ref sslStream, encodedUsername + "\r\n"); ReadFromStream(ref sslStream, ref returnMsg);
    if(!CheckError(returnMsg, ReplyConstants.SmtpReplyConstants.SERVER_CHALLENGE))
    {
    return false;
    } string encodedPassword = Convert.ToBase64String(Encoding.ASCII.GetBytes(this.Password.ToCharArray()));
    WriteToStream(ref sslStream, encodedPassword + "\r\n");

    ReadFromStream(ref sslStream, ref returnMsg);
    if(!CheckError(returnMsg, ReplyConstants.SmtpReplyConstants.AUTH_SUCCESSFUL))
    {
    return false;
    }
                        OnAuthenticated(EventArgs.Empty);
    }
    }
    return true;
    }