我正在将 Visual Studio 2010 与 .Net Framework 4.0 结合使用,并尝试发送电子邮件。
当我使用在 System.Web.Mail 中定义的 MailMessage 时,一切正常,直到我设置MailMessage.BodyFormat = MailFormat.Html
为止,它将抛出未知错误,但是如果MailMessage.BodyFormat = MailFormat.Text
不会发生此错误。
尽管我使用 System.Net.Mail MailMessage.IsBodyHtml = true
来实现我的目标,但我仍然想知道是什么原因导致此未知错误,并且有什么办法可以解决?
< / p>
下面的这段代码将引发未知的错误,例如https://imgur.com/a/VcvkAie
public static string SendMail(string strsender, string strReceiver, string strsubject, string strbody)
{
try
{
MailMessage vMailMessage = new MailMessage();
char[] separator = { ',' };
vMailMessage.From = GetEmailAddress(strsender.Trim(), separator); //寄件人 //存取被拒
vMailMessage.To = GetEmailAddress(strReceiver.Trim(), separator); //收件人
//vMailMessage.Cc = GetEmailAddress(vDataRow["CC"].ToString().Trim(), separator); //副本
//vMailMessage.Bcc = GetEmailAddress(vDataRow["BCC"].ToString().Trim(), separator); //密件副本
vMailMessage.Subject = strsubject.Trim(); //主旨
vMailMessage.BodyFormat = MailFormat.Html;
vMailMessage.Body = strbody;
SmtpMail.SmtpServer = "Webmail"; //設定Mail伺服器
SmtpMail.Send(vMailMessage); //發送mail
//SmtpMail.Send(vMailMessage.From, vMailMessage.To, vMailMessage.Subject, vMailMessage.Body); //發送mail
return "ok";
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
下面的这段代码将能够发送文本格式为https://imgur.com/a/1Djq5uI的电子邮件
public static string SendMail(string strsender, string strReceiver, string strsubject, string strbody)
{
try
{
MailMessage vMailMessage = new MailMessage();
char[] separator = { ',' };
vMailMessage.From = GetEmailAddress(strsender.Trim(), separator); //寄件人 //存取被拒
vMailMessage.To = GetEmailAddress(strReceiver.Trim(), separator); //收件人
//vMailMessage.Cc = GetEmailAddress(vDataRow["CC"].ToString().Trim(), separator); //副本
//vMailMessage.Bcc = GetEmailAddress(vDataRow["BCC"].ToString().Trim(), separator); //密件副本
vMailMessage.Subject = strsubject.Trim(); //主旨
vMailMessage.BodyFormat = MailFormat.Text;
vMailMessage.Body = strbody;
SmtpMail.SmtpServer = "Webmail"; //設定Mail伺服器
SmtpMail.Send(vMailMessage); //發送mail
//SmtpMail.Send(vMailMessage.From, vMailMessage.To, vMailMessage.Subject, vMailMessage.Body); //發送mail
return "ok";
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
答案 0 :(得分:0)
根据MSDN文档,MailFormat现在已过时。警告应显示为:
警告
该API现在已过时。推荐的替代方法:System.Net.Mail。
我建议使用MailMessage.AlternateViews
属性为MailMessage
提供HTML和文本替代。
有关MailMessage.AlternateViews的更多信息。根据AlternateViews文档:
使用AlternateViews属性指定电子邮件的副本 以不同的格式。例如,如果您使用HTML发送消息, 可能还希望提供纯文本版本,以防某些 收件人使用无法显示HTML内容的电子邮件阅读器。为 该示例演示如何创建具有备用视图的消息,请参见 AlternateViews。
您修改后的代码如下:
public static string SendMail(string strsender, string strReceiver, string strsubject, string strbody)
{
try
{
MailMessage vMailMessage = new MailMessage();
char[] separator = { ',' };
vMailMessage.From = GetEmailAddress(strsender.Trim(), separator); //寄件人 //存取被拒
vMailMessage.To.Add(GetEmailAddress(strReceiver.Trim(), separator)); //收件人
//vMailMessage.Cc = GetEmailAddress(vDataRow["CC"].ToString().Trim(), separator); //副本
//vMailMessage.Bcc = GetEmailAddress(vDataRow["BCC"].ToString().Trim(), separator); //密件副本
vMailMessage.Subject = strsubject.Trim(); //主旨
vMailMessage.IsBodyHtml = true;
vMailMessage.Body = strbody;
SmtpMail.SmtpServer = "Webmail"; //設定Mail伺服器
SmtpMail.Send(vMailMessage); //發送mail
return "ok";
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}