初始化空MailMessage对象触发"对象引用未设置到实例"异常
问题:初始化MailMessage时抛出空引用异常
使用System.Net.Mail库初始化MailMessage对象时,无论采用空初始化还是传入To/From地址初始化,都会在MailMessage msg = new MailMessage();行抛出Object reference not set to an instance of an object异常。需求是遍历多个邮箱地址添加至MailMessage的To字段,因此必须先初始化空对象。
相关代码如下:
SmtpClient smtp = new SmtpClient(); smtp.Host = "host-address"; smtp.Port = 25; smtp.EnableSsl = true; smtp.DeliveryMethod = SmtpDeliveryMethod.Network; MailMessage msg = new MailMessage(); string[] TOaddresses = emailModel.To.Split(';'); string[] BCCaddresses = emailModel.Bcc.Split(';'); string[] CCaddresses = emailModel.Cc.Split(';'); msg.From = new MailAddress(emailModel.From); foreach (var emailAddress in TOaddresses) msg.To.Add(emailAddress); foreach (var emailAddress in BCCaddresses) msg.Bcc.Add(emailAddress); foreach (var emailAddress in CCaddresses) msg.CC.Add(emailAddress); msg.Subject = "TEST: " + emailModel.Subject; msg.Body = emailModel.Body; msg.IsBodyHtml = true; smtp.Send(msg);
排查与解决建议
- 检查
emailModel实例状态:确认emailModel已被正确实例化,不存在null情况。调试器有时会显示错误的异常行号,实际异常可能来自后续访问emailModel属性时的空引用。 - 验证程序集引用:确保项目已正确引用
System.dll(System.Net.Mail命名空间包含在此程序集内),避免因缺少依赖导致实例化失败。 - 调整初始化方式:若空初始化失败,尝试直接传入From地址初始化
MailMessage,同时确保emailModel.From不为null或空字符串:MailMessage msg = new MailMessage(emailModel.From, string.Empty); - 添加空值检查:在拆分邮箱地址前,先判断对应属性是否为null或空,避免调用
Split时触发异常:string[] TOaddresses = !string.IsNullOrEmpty(emailModel.To) ? emailModel.To.Split(';') : Array.Empty<string>(); string[] BCCaddresses = !string.IsNullOrEmpty(emailModel.Bcc) ? emailModel.Bcc.Split(';') : Array.Empty<string>(); string[] CCaddresses = !string.IsNullOrEmpty(emailModel.Cc) ? emailModel.Cc.Split(';') : Array.Empty<string>(); - 排查环境权限:如果在服务器环境(如IIS)运行,检查应用程序池权限是否足够加载系统库,或是否有安全策略限制了
MailMessage的实例化操作。
内容的提问来源于stack exchange,提问作者Micah Stovall
相关产品推荐
相关产品推荐

