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

求助:如何使用MailKit从自有网站域名发送邮件(附代码配置)

问题排查与修复方案

核心问题点

  • SSL连接参数错误:端口465要求SSL加密连接,原代码中ConnectAsync的第三个参数传false会导致连接失败。
  • 变量名大小写不匹配:代码中存在email_message/email_Message、fileBytes/filebytes这类大小写不一致的变量,会引发编译或运行错误。
  • 未配置发件人显示名称:配置中的DisplayName未被使用,发件人信息不完整。

修正后的代码

SendAsync方法修正

private async Task SendAsync(MimeMessage mailMessage)
{
    using (var client = new SmtpClient())
    {
        try
        {
            // 465端口使用SSL加密连接
            await client.ConnectAsync(_mailSettings.Host, _mailSettings.Port, SecureSocketOptions.SslOnConnect);
            client.AuthenticationMechanisms.Remove("XOAUTH2");
            await client.AuthenticateAsync(_mailSettings.UserName, _mailSettings.Password);
            await client.SendAsync(mailMessage);
        }
        catch (Exception error)
        {
            Console.WriteLine(error.Message);
            throw;
        }
        finally
        {
            await client.DisconnectAsync(true);
            client.Dispose();
        }
    }
}

CreateEmailMessage方法修正

private MimeMessage CreateEmailMessage(Message message)
{
    var emailMessage = new MimeMessage();
    // 使用配置中的DisplayName和UserName构建发件人
    emailMessage.From.Add(new MailboxAddress(_mailSettings.DisplayName, _mailSettings.UserName));
    emailMessage.To.AddRange(message.To);
    emailMessage.Subject = message.Subject;

    var bodyBuilder = new BodyBuilder { HtmlBody = message.Content };
    if (message.Attachments != null && message.Attachments.Count > 0)
    {
        byte[] fileBytes;
        foreach (var attachment in message.Attachments)
        {
            using (var ms = new MemoryStream())
            {
                attachment.CopyTo(ms);
                fileBytes = ms.ToArray();
            }
            // 修正变量名大小写:fileBytes而非filebytes
            bodyBuilder.Attachments.Add(attachment.Filename, fileBytes, ContentType.Parse(attachment.ContentType));
        }
    }
    emailMessage.Body = bodyBuilder.ToMessageBody();
    return emailMessage;
}

额外检查项

  1. 确认SMTP服务可用性:联系域名托管商,确认sigmaworldco.com的SMTP服务已开启,且允许从你的服务器IP访问。
  2. 端口与加密方式匹配:
    • 465端口对应SSL加密(SecureSocketOptions.SslOnConnect)
    • 587端口对应STARTTLS加密(SecureSocketOptions.StartTls)
  3. 验证账号密码:确保info@sigmaworldco.com的密码正确,部分托管商可能要求使用应用专用密码而非邮箱登录密码。
  4. 域名MX记录配置:确认域名的MX记录已正确指向托管商的邮件服务器,否则收件方可能无法接收邮件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 00:35:24