如何在C# Windows Forms邮件程序中从文本框获取发件人地址
解决Windows Forms邮件发送程序中
msg.From.Add()的错误 问题原因
MailMessage.From是单个MailAddress对象,用来表示唯一的发件人地址,它本身不具备Add方法——而msg.To属于MailAddressCollection集合类型,所以支持Add方法批量添加收件人。你试图用集合的操作方式给单个属性赋值,这就是代码报错的核心原因。
修正方案
直接将msg.From赋值为一个新的MailAddress实例,传入文本框的内容即可。同时建议添加邮箱格式验证,避免无效地址引发运行时异常。
修正后的完整代码
MailMessage msg = new MailMessage(); SmtpClient client = new SmtpClient(); client.Credentials = new System.Net.NetworkCredential("xyz@hotmail.com", "1234"); client.Port = 587; client.Host = "smtp.live.com"; client.EnableSsl = true; // 收件人地址(集合类型,支持Add方法) msg.To.Add(textBox1.Text); // 修正发件人地址的赋值逻辑 try { msg.From = new System.Net.Mail.MailAddress(textBox4.Text); } catch (FormatException ex) { // 提示用户输入有效邮箱 MessageBox.Show("发件人邮箱格式错误:" + ex.Message); return; } msg.Subject = textBox2.Text; msg.Body = textBox3.Text; // 发送邮件并处理异常 try { client.Send(msg); MessageBox.Show("邮件发送成功!"); } catch (Exception ex) { MessageBox.Show("邮件发送失败:" + ex.Message); }
额外提示
- 硬编码SMTP凭据(邮箱和密码)存在安全风险,建议改为通过用户输入或配置文件读取。
- 若使用.NET 5及以上版本,
SmtpClient已被标记为过时,推荐使用MailKit库替代,它提供更完善的邮件发送功能和更好的兼容性。
内容的提问来源于stack exchange,提问作者CuriousJunior1
相关产品推荐
相关产品推荐

