C#使用隐式ssl发送电子邮件

时间:2012-01-16 09:59:49

标签: c# .net email ssl

是否有任何库可以免费使用,以便使用隐式ssl协议发送电子邮件。我的托管服务提供商支持ssl电子邮件...但标准.net电子邮件客户端无法处理。

7 个答案:

答案 0 :(得分:3)

System.Net.Mail支持“显式SSL”(也称为“StartTLS” - 通常在端口25或587上),但不支持“隐式SSL”(又名“SMTPS” - 通常在端口465上)。

据我所知,显式SSL从不安全的连接开始,然后给出STARTTLS命令,最后建立SSL安全连接。 另一方面,隐式SSL要求在双方开始谈话之前设置SSL连接。

某些服务器(如gmail)同时接受这两种服务器,因此您只需将EnableSsl设置为true并发送到正确的端口即可。但是,如果您的服务器不支持明确SSL,则这种“简单方法”不是一种选择。

我还在寻找使用带有隐式SSL的System.Net.Mail的一般解决方案,到目前为止没有运气。

无论如何看看this article,它可能会给你一些见解。

[编辑:@Nikita是对的,固定端口号以避免混淆]

答案 1 :(得分:1)

使用TLS端口(即587)而不是SSL端口。几个月来我遇到了同样的问题,直到我找到了这个解决方案。

Sending email in .NET through Gmail

答案 2 :(得分:1)

尝试在https://sourceforge.net/p/netimplicitssl/wiki/Home/

上查看AIM(Aegis隐式邮件)

答案 3 :(得分:0)

您仍然可以使用已弃用的System.Web.Mail.MailMessage API(并设置其"http://schemas.microsoft.com/cdo/configuration/smtpusessl"选项,用于显式SSL / TLS):

System.Web.Mail.MailMessage mailMsg = new System.Web.Mail.MailMessage();
// ...
mailMsg.Fields.Add
            ("http://schemas.microsoft.com/cdo/configuration/smtpusessl",
                 true);

或者,如果可以,您可以在本地运行类似stunnel的内容,以建立从localhost到SMTP服务器的SSL / TLS隧道。然后,您必须正常连接(没有SSL / TLS)到隧道的localhost端作为您的SMTP服务器。

答案 4 :(得分:0)

作为选项之一,我们的SecureBlackbox包含SMTP组件,该组件通过隐式和显式SSL工作,并支持不同的身份验证机制(包括SASL,NTLM等)。

答案 5 :(得分:0)

AspNetEmail支持显式SSL和隐式ssl

http://www.advancedintellect.com/download.aspx

答案 6 :(得分:0)

您可以使用AIM(Aegis Implicit Mail)通过隐式SSL发送电子邮件:

  1. 首先安装软件包:Install-Package AIM
  2. 然后使用示例代码发送电子邮件

    class Mail
    {
        private static string mailAddress = "{you email address}";
        private static string host = "{your host server}";
        private static string userName = "{your user name}";
        private static string password = "{your password}";
        private static string userTo = "{to address}";
        private static void SendEmail(string subject, string message)
        {
            //Generate Message 
            var mailMessage = new MimeMailMessage();
            mailMessage.From = new MimeMailAddress(mailAddress);
            mailMessage.To.Add(userTo);
            mailMessage.Subject = subject;
            mailMessage.Body = message;
    
            //Create Smtp Client
            var mailer = new MimeMailer(host, 465);
            mailer.User = userName;
            mailer.Password = password;
            mailer.SslType = SslMode.Ssl;
            mailer.AuthenticationMode = AuthenticationType.Base64;
    
            //Set a delegate function for call back
            mailer.SendCompleted += compEvent;
            mailer.SendMailAsync(mailMessage);
        }
    
        //Call back function
        private static void compEvent(object sender, AsyncCompletedEventArgs e)
        {
            if (e.UserState != null)
                Console.Out.WriteLine(e.UserState.ToString());
    
            Console.Out.WriteLine("is it canceled? " + e.Cancelled);
    
            if (e.Error != null)
                Console.Out.WriteLine("Error : " + e.Error.Message);
        }
    }