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

使用C#通过O365域名发送邮件的最佳方案及认证问题咨询

SMTP认证邮件发送方案及开发者账号使用疑问解答

一、SMTP要求认证时的代码发送最佳方式

你遇到的错误核心是未正确配置SMTP认证凭证,原代码里UseDefaultCredentials = true会导致后续自定义凭证被覆盖,且没有提供具体的账号密码信息。以下是修正后的标准写法:

修正代码示例

string server = "smtp.example.com"; // 替换为你的SMTP服务器地址
string to = "recipient@example.com";
string from = "sender@example.com";
string smtpUsername = "your-smtp-username";
string smtpPassword = "your-smtp-password";

MailMessage message = new MailMessage(from, to);
message.Subject = "Subject";
message.Body = "Body";

SmtpClient client = new SmtpClient(server);
// 关键:先禁用默认凭证,否则自定义凭证不生效
client.UseDefaultCredentials = false;
// 设置SMTP服务器要求的认证账号密码
client.Credentials = new System.Net.NetworkCredential(smtpUsername, smtpPassword);
client.Port = 587; // 替换为对应SMTP服务器的端口(常见587/465)
client.EnableSsl = true;

try
{
    client.Send(message);
}
catch (Exception ex)
{
    // 处理发送异常
    Console.WriteLine($"发送失败:{ex.Message}");
}
finally
{
    message.Dispose();
    client.Dispose();
}

关键配置说明

  • UseDefaultCredentials = false必须优先设置:这是高频踩坑点,如果先设置Credentials再修改UseDefaultCredentials,会清空之前的凭证配置。
  • 凭证正确性:确保smtpUsername和smtpPassword是SMTP服务器认可的有效账号,部分服务商(如Gmail)需要启用应用专用密码,而非个人登录密码。
  • 端口与SSL:确认端口和SSL设置与服务商要求一致(比如465端口通常对应SSL直连,587对应STARTTLS)。

二、创建开发者类型账号是否属于不良实践?

这要分场景判断,合理使用的话不仅不是不良实践,反而是推荐做法:

  • 开发/测试环境:专门的开发者账号是最佳选择,避免用生产环境的业务账号发送测试邮件,防止误发给真实用户,同时隔离权限,就算账号泄露也不会影响生产业务。
  • 生产环境:应使用专用服务账号(比如企业邮箱的应用专属账号),而非个人开发者账号。这类账号应遵循最小权限原则,只赋予发送邮件的权限,避免关联其他敏感操作。
  • 禁忌:绝对不要硬编码账号密码在代码里,建议用加密的配置文件、环境变量或者密钥管理服务存储凭证,防止泄露。

你遇到的错误提示:"The SMTP server requires a secure connection or the client was not authenticated."

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 11:35:29