You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core 6 Web API中无密码配置MailKit发送邮件的方案

解决MailKit对接无密码SMTP服务器的认证问题

你遇到的错误是因为smtp.Authenticate()方法不存在仅传入单个邮箱地址的重载。既然公司SMTP服务器无需密码,直接跳过认证步骤即可,不需要调用Authenticate方法。

修正后的发送邮件方法示例

以下是适配你现有MailSettings类的完整实现:

using MailKit.Net.Smtp;
using MimeKit;

public class EmailService
{
    private readonly MailSettings _mailSettings;

    public EmailService(MailSettings mailSettings)
    {
        _mailSettings = mailSettings;
    }

    public async Task SendEmailAsync(string toEmail, string subject, string body)
    {
        // 构建邮件内容
        var message = new MimeMessage();
        message.From.Add(new MailboxAddress(_mailSettings.SenderName, _mailSettings.SenderEmail));
        message.To.Add(MailboxAddress.Parse(toEmail));
        message.Subject = subject;
        message.Body = new TextPart("html") { Text = body };

        using var client = new SmtpClient();
        // 连接SMTP服务器,根据实际情况调整SecureSocketOptions
        await client.ConnectAsync(_mailSettings.SmtpServer, _mailSettings.SmtpPort, MailKit.Security.SecureSocketOptions.Auto);
        
        // 无需认证,直接跳过Authenticate调用
        // await client.AuthenticateAsync(...); 这行代码删除
        
        await client.SendAsync(message);
        await client.DisconnectAsync(true);
    }
}

额外注意事项

  • 如果服务器允许匿名发送,上述代码即可正常工作,MailKit默认会以匿名模式和服务器交互。
  • 若后续发现服务器需要特定无密码认证(比如Windows集成认证),可改用对应重载,示例:
    // 使用当前Windows用户凭据进行集成认证(仅适用于支持NTLM的服务器)
    await client.AuthenticateAsync(System.Net.CredentialCache.DefaultNetworkCredentials);
    
    这种情况需要提前确认公司SMTP服务器的认证规则。

内容的提问来源于stack exchange,提问作者Ayobamilaye

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 15:06:16