MailMessage.BodyFormat等于MailFormat.Html时引发未知错误

时间:2019-01-16 02:26:22

标签: c# asp.net

我正在将 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);
            }
        }

1 个答案:

答案 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);
        }
    }