问题描述
|
我从站点(.NET Framework 2.0,IIS 7)发送邮件为
MailAddress from = new MailAddress(\"[email protected]\",\"Name Name\");
MailAddress to = new MailAddress(\"[email protected]\",\"\");
MailMessage mm = new MailMessage(from,to);
mm.Subject = subject;
mm.Body = body;
using ( mm )
{
if (attach != null)
mm.Attachments.Add(attach);
mm.IsBodyHtml = true;
SmtpClient smtp = new SmtpClient(mailServer);
if (!string.IsNullOrEmpty(mailPort))
smtp.Port = int.Parse(mailPort);
smtp.Credentials = new System.Net.NetworkCredential(username,pass);
smtp.Send(mm);
}
但是在收到信件时没有显示名称(\“名称名称\”),只有电子邮件。
您是否知道可能导致此问题的原因?
我敢肯定,电子邮件客户端不会忽略显示名称!客户端是Outlook。
当应用程序将对象“ 1”传输到服务器时,属性“ 2”为“ 3”。为什么服务器删除名称?
解决方法
我也遇到了这个问题,但是发现MailAddress也采用了第三个编码参数。因此,不要使用:
MailAddress from = new MailAddress(\"[email protected]\",\"Name Name\");
尝试以下这些人:
MailAddress from = new MailAddress(\"[email protected]\",\"Name Name\",Encoding.ASCII);
MailAddress from = new MailAddress(\"[email protected]\",Encoding.UTF8);
MailAddress from = new MailAddress(\"[email protected]\",Encoding.Unicode);
此列表没有限制,您可以使用其他编码选项。我使用gmail,并且启用了对不太安全的应用程序的访问后,使用SmtpClient后,它适用于所有这些应用程序。
, /// <summary>
/// SMTP服务发送邮件
/// </summary>
/// <param name=\"mailSubjct\">邮件主题</param>
/// <param name=\"mailBody\">邮件内容(html)</param>
/// <param name=\"mailFrom\">发件地址</param>
/// <param name=\"mailAddress\">收件地址</param>
/// <param name=\"hostIp\">SMTP主机IP</param>
/// <param name=\"username\">SMTP用户名</param>
/// <param name=\"password\">SMTP密码</param>
/// <param name=\"ssl\">是否启用SSL方式</param>
/// <param name=\"port\">SMTP端口</param>
/// <returns></returns>
public static string SendMail(string mailSubjct,string mailBody,string mailFrom,List<string> mailAddress,string hostIp,string username,string password,bool ssl,int port)
{
string error = string.Empty;
try
{
MailMessage mm = new MailMessage();
mm.IsBodyHtml = false;
mm.Subject = mailSubjct;
mm.BodyEncoding = Encoding.UTF8;
mm.Body = mailBody;
mm.IsBodyHtml = true;
mm.From = new MailAddress(mailFrom,Const.SYS_NAME,Encoding.UTF8);
Regex regex = new Regex(@\"\\w+([-+.\']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*\");
for (int i = 0; i < mailAddress.Count; i++)
{
if (regex.IsMatch(mailAddress[i]))
{
mm.To.Add(mailAddress[i]);
}
}
if (mm.To.Count == 0)
{
return string.Empty;
}
SmtpClient sc = new SmtpClient();
NetworkCredential nc = new NetworkCredential(username,password);
sc.EnableSsl = ssl;
sc.UseDefaultCredentials = false;
sc.Credentials = nc;
sc.DeliveryMethod = SmtpDeliveryMethod.Network;
sc.Host = hostIp;
sc.Port = port;
sc.Send(mm);
}
catch (Exception ex)
{
error = ex.Message;
}
return error;
}
我是中国人,我的英语不好。哈哈....
此行的第二个参数:\“ mm.From = new MailAddress(mailFrom,Const.SYS_NAME,Encoding.UTF8); \”
DisplayName:\“ Const.SYS_NAME \”,我认为这是您想要的。
, 我遇到了同样的问题,似乎提供凭据导致服务器将其用于\'from \'名称。
我不得不注释掉:
//client.UseDefaultCredentials = true;
, 您可以设置MailAddress对象的DisplayName属性来设置常规名称,而不仅仅是使用电子邮件地址。
MailAddress fromAddress = new MailAddress(\"[email protected]\");
fromAddress.DisplayName = \"The Dude\";