我正在开始寻找解决这种奇怪行为的方法 我做了很多测试和实验,并尝试使用我的代码,但没有成功。
服务器: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;
}
}