HTML标记和属性使客户端无法通过匿名帐户使用SmtpClient接收电子邮件

时间:2017-06-14 11:52:27

标签: c# outlook smtp

我正在开始寻找解决这种奇怪行为的方法 我做了很多测试和实验,并尝试使用我的代码,但没有成功。

服务器:Windows服务器2012 .net framework 4.0上的Windows服务。

客户端: windows 7 os,outlook 2010.

问题:消息正文中的html标记和\或属性正在影响客户端接收电子邮件,并且服务器上没有异常。
有几种情况,身体信息中的html阻止客户端接收电子邮件到他的Outlook收件箱。

示例:如果我正在调用SendHtmlEmail(),那么一切都正常工作:

Exchange.InvokeEmail.SendHtmlEmail("testTrue", "<div dir=rtl><br/>test</div>", "jonathana@xxx.net",null, "מערכת ניהול פרויקטים", null,true);

但如果我删除了<br/>代码,则客户端不会收到电子邮件,并且会抛出没有异常:

Exchange.InvokeEmail.SendHtmlEmail("testTrue", "<div dir=rtl> test</div>", "jonathana@xxx.net",null, "מערכת ניהול פרויקטים", null,true);

另一个例子是使用dir属性:

"<body dir=rtl> test </body>" // not working
"<body ><br/>test</body>" // working
"<div dir=rtl> test </div>" // not working
"<div ><br/>test</div>" // working

我试图改变身体的编码,但没有任何帮助。
另外,因为没有异常被提出我认为问题出在客户端(?)(outlook 2010,windows 7 os)。

谢谢。

服务器代码:

public static bool SendHtmlEmail(string _subject, string _body,
    string _to, string _cc = null,
    string _DisplayName = "מערכת ניהול פרויקטים", string _FileName = null,bool Isanonymous = true)
{
    try
    {

        MailMessage msg = new MailMessage();

        // from
        if (Isanonymous == false)
            msg.From = new MailAddress("pmsapp@partner.co.il");
        else
            msg.From = new MailAddress("PmsApplication@partner.co.il", _DisplayName);

        // to
        foreach (var address in _to.Split(new[] { ";" }, StringSplitOptions.RemoveEmptyEntries))
        {
            msg.To.Add(address);
        }

        // cc
        if (_cc != null && _cc.Contains("@"))
        {
            foreach (var address in _cc.Split(new[] { ";" }, StringSplitOptions.RemoveEmptyEntries))
            {
                msg.CC.Add(address);
            }
        }

        msg.Subject = _subject;
        msg.Body = _body;
        msg.IsBodyHtml = true;

        SmtpClient client = new SmtpClient();
        client.UseDefaultCredentials = false;

        if (Isanonymous==false)
        client.Credentials = new System.Net.NetworkCredential("xxxxx", "xxxxxxx");

        client.Port = 25;
        client.Host = ConfigurationManager.AppSettings["Exchange.SmtpServerName"];
        client.DeliveryMethod = SmtpDeliveryMethod.Network;
        client.EnableSsl = true;

        client.Send(msg);
        return true;
    }
    catch (Exception ex)
    {
        string error = ex.ToString(); // TODO: write to database
        return false;
    }
}

0 个答案:

没有答案