发送邮件不支持465加密方式的解决方案

由于邮箱服务商关闭了80端口,改为465端口,代码未动,但是邮件发送失败。

后查找原因:

  1. .NET Framework的限制‌:.NET Framework的System.Net.Mail组件默认不支持Implicit SSL,而465端口通常使用Implicit SSL进行加密。因此,直接使用.NET Framework发送邮件时,可能会遇到不支持465端口的问题‌1。

  2. 邮件服务器的配置‌:某些邮件服务器(如阿里云)默认禁止了25端口,推荐使用465端口进行加密传输。然而,.NET Framework的SmtpClient类不支持Implicit SSL,导致无法通过465端口发送邮件‌12。

解决465端口发送邮件的方法‌:

  1. 使用CDO.Message组件‌:可以通过引用CDO.Message组件来发送邮件,该组件支持通过465端口发送邮件。具体步骤包括引用CDOSYS.DLL,设置SMTP服务器、端口、发件人等信息‌1。

  2. 使用第三方库‌:可以考虑使用如MailKitMimeKit等第三方库,这些库提供了更灵活的邮件发送功能,支持包括465端口在内的多种加密方式‌

最终采用方法二,因为微软官方也是推荐此方法

示例代码:

using MailKit.Net.Smtp;
using MimeKit;
using System;
using System.IO;

public static void SendMailKit(string[] tos)
{
    var message = new MimeMessage();
    message.From.Add(new MailboxAddress("发件人名称", AppConfig.From));

    foreach (var s in tos)
    {
        if (!string.IsNullOrWhiteSpace(s))
        {
            message.To.Add(new MailboxAddress("收件人名称", s));
        }
    }

    message.Subject = "邮件标题";  //邮件标题
    var builder = new BodyBuilder
    {
        //TextBody = "Hey geffzhang<br>DennisDong"//不支持Html
        HtmlBody = "Hey geffzhang<br>DennisDong"//支持Html
    };

    //添加附件
    //builder.Attachments.Add($@"{Directory.GetCurrentDirectory()}\1.png");//包含图片附件,或者正文中有图片会被当成垃圾邮件退回,所以不建议放图片内容(跟Mail类库框架无关)
    builder.Attachments.Add($@"{Directory.GetCurrentDirectory()}\ConsoleApp1.exe.config");
    message.Body = builder.ToMessageBody();

    using (var client = new SmtpClient())
    {
        client.ServerCertificateValidationCallback = (s, c, h, e) => true;

        var mSendMail = "XXX@163.com";
        var mSendPwd = "XXXXX";//163和qq都是授权码,不是邮箱密码
        client.Connect("smtp.163.com", 465, true);//网易、QQ支持 25(未加密),465和587(SSL加密)

        client.Authenticate(mSendMail, mSendPwd);

        try
        {
            client.Send(message);//发送邮件
            client.Disconnect(true);
        }
        catch (SmtpCommandException ex)
        {
            Console.WriteLine(ex.ErrorCode);
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值