我们有一个Asp.Net解决方案,使用System.Net.Mail.MailMessage和空构造函数已经生产了2年以上:
using (MailMessage _mailMessage = new MailMessage()) // Exception thrown here
{
_mailMessage.From = new MailAddress(sFrom); // Setting additional properties - never gets here
_mailMessage.Body = sBody;
_mailMessage.Subject = sSubject;
_mailMessage.IsBodyHtml = true;
昨天我们有一个实时网站报告异常:指定的字符串不在电子邮件地址的必填表单中。我们通过将所需节点添加到web.config文件来修复它。
问题是:为什么这个有用?或者它曾经有效吗?
错误: 指定的字符串不是电子邮件地址所需的格式。 at System.Net.Mail.MailAddressParser.ReadCfwsAndThrowIfIncomplete(String data,Int32 index) 在System.Net.Mail.MailAddressParser.ParseDomain(字符串数据,Int32&索引) at System.Net.Mail.MailAddressParser.ParseAddress(String data,Boolean expectMultipleAddresses,Int32& index) at System.Net.Mail.MailAddressParser.ParseAddress(String data) at System.Net.Mail.MailAddress..ctor(String address,String displayName,Encoding displayNameEncoding) 在System.Net.Mail.MailMessage..ctor()
由于
编辑:
答案 0 :(得分:3)
答案有点晚了。但我遇到了同样的问题。如果您使用Web.Config中的smtp设置,则需要在Web.Config中设置from
。查看此MSDN Link了解详情
<mailSettings>
<smtp from="xxxxx@gmail.com">// This is important when constructing new mail message. Make sure from is an email address.
<network host="smtp.gmail.com" password="yourpassword" userName="xxxxx@gmail.com" port="587" />
</smtp>
</mailSettings>
如果你没有使用来自Web.Config的SMTPCLIENT
,那么从Web.Config中完全删除from
属性,并用这样的代码构建你自己的smtpclient
var fromAddress = new MailAddress("xxxxxx@gmail.com", "Mr XXXXX");
string fromPassword = "yourpassword";
message.From = fromAddress;
SmtpClient client = new SmtpClient()
{
Host = "smtp.gmail.com",
Port = 587,
EnableSsl = false,
DeliveryMethod = SmtpDeliveryMethod.Network,
Credentials = new NetworkCredential(fromAddress.Address, fromPassword),
Timeout = 20000
};
答案 1 :(得分:1)
您的代码是否在此using语句后设置了一些属性?
默认构造函数已经并且仍然可以工作,只要您在实际触发发送之前在代码中稍后设置了必需的属性。 web.config节点通常只为这些属性提供默认值。
我会调查它,看看是否有些属性没有正确设置,为什么。