C#邮件发送触发System.FormatException异常求助
解决MailAddress实例化时的System.FormatException问题
嘿,我帮你找到了几个触发这个格式异常的关键点,咱们一步步来修复:
1. 初始化Mail时传入了无效的邮箱占位符
你在Form1里初始化Mail类的时候,传的是"email address type":
Mail mail = new Mail("email address type");
这个字符串完全不符合标准邮箱的格式(xxx@xxx.xxx),MailAddress的构造函数会严格校验邮箱格式,这种占位文本直接就会抛出System.FormatException。你需要把它替换成真实的合法邮箱地址,比如:
Mail mail = new Mail("your-actual-email@gmail.com");
2. 空收件人邮箱未被拦截就传入SetToAddress
在按钮点击事件里,你虽然判断了收件人邮箱为空的情况,但判断后没有终止后续代码,空字符串还是会被传入SetToAddress方法,而空字符串同样会触发MailAddress的格式校验失败。修改判断逻辑,加上return来阻止后续执行:
if (toAddress == "") { MessageBox.Show("type in email address"); return; // 加上这行,避免继续执行SetToAddress } if (subject == "") { MessageBox.Show("type in email title"); return; } if (body == "") { MessageBox.Show("type in email contents"); return; }
3. 优化异常捕获,方便调试
现在你的catch块只返回"send mail fail",完全看不到具体的错误原因,建议把异常信息也返回出来,这样调试时能快速定位问题:
catch (Exception e) { return $"send mail fail: {e.Message}"; }
额外提醒:MailAddress的格式要求
MailAddress类遵循RFC邮件格式标准,要求输入的字符串必须是合法的邮箱地址,比如:
- 必须包含
@符号,且前后都有有效内容 - 本地部分(@前面)不能有非法特殊字符(除非符合转义规则)
- 域名部分(@后面)必须是有效的域名或IP地址
内容的提问来源于stack exchange,提问作者AJ Studio
相关产品推荐
相关产品推荐

