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

能否为MailMessage的To字段添加不含域名的用户名而非邮箱地址?

关于MailMessage指定用户名作为收件人的问题

好问题!我来帮你梳理清楚这个情况:

首先直接给结论:不能直接用mmsg.To.Add("Winfrey");这种写法。因为SMTP协议本身要求收件人地址必须符合RFC标准的邮箱格式(包含@和域名),MailMessage的To.Add(string)方法会自动验证格式,传入不含@的字符串会直接抛出FormatException异常。

不过你可以通过两种方式实现类似“显示用户名”的需求:

1. 最通用的方案:设置收件人显示名称

如果你只是希望收件人在邮箱客户端里看到的是用户名(比如"Winfrey"),而非完整的邮箱地址,完全可以用MailAddress的重载构造函数来实现:

MailMessage mmsg = new MailMessage();
// 第一个参数是实际投递用的完整邮箱地址,第二个参数是显示给收件人的名称
mmsg.To.Add(new MailAddress("Winfrey@user.com", "Winfrey"));

这种方式兼容性拉满,所有SMTP服务器都支持,收件人收到邮件时,收件人列表里显示的就是你设置的"Winfrey",而非完整邮箱。

2. 企业Exchange环境的特殊场景

如果你的邮件系统是企业内部的Exchange服务器,并且管理员已经配置允许使用AD用户名(别名)作为收件人,那可能可以实现直接用用户名投递,但这不是MailMessage本身的功能,而是服务器端的配置支持。这种情况下,你可能需要改用Exchange Web Services (EWS) 或者专门的Exchange客户端SDK,原生的MailMessage+SMTP客户端还是需要标准邮箱格式才能正常投递。

额外注意

不管是.NET Framework的System.Net.Mail.MailMessage,还是.NET Core/.NET 5+里的System.Net.Mail.MailAddress,都严格遵循SMTP协议的地址格式要求,所以不要尝试直接传入不含@的字符串,必然会触发格式验证错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:35:50