发送电子邮件时不要显示“显示名称”

问题描述

| 我从站点(.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\";