Не показывать «Отображаемое имя» при отправке электронной почты - PullRequest
6 голосов
/ 10 июня 2011

Я отправляю почту со своего сайта (.NET Framework 2.0, IIS 7) как

MailAddress from = new MailAddress("from@email.com", "Name Name");
MailAddress to = new MailAddress("to@email.com", "");
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.

Когда приложение передает объект mm на сервер, свойство From равно {"Name Name" <from@email.com>}.Почему сервер удаляет имя?

Ответы [ 4 ]

2 голосов
/ 08 декабря 2015

У меня тоже были проблемы с этой проблемой, но я обнаружил, что MailAddress также принимает третий аргумент кодировки. Поэтому вместо использования:

MailAddress from = new MailAddress("from@email.com", "Name Name");

Попробуйте некоторые из этих парней:

MailAddress from = new MailAddress("from@email.com", "Name Name", Encoding.ASCII);
MailAddress from = new MailAddress("from@email.com", "Name Name", Encoding.UTF8);
MailAddress from = new MailAddress("from@email.com", "Name Name", Encoding.Unicode);

Этот список не является ограничивающим, есть другие варианты кодирования, которые вы можете использовать. Я использую gmail и после включения доступа для Less Secure Apps , он работает для всех из них после использования SmtpClient.

0 голосов
/ 09 декабря 2015

У меня была та же проблема, и, похоже, предоставление учетных данных заставило сервер использовать их для имени «от».

Я должен был закомментировать:

//client.UseDefaultCredentials = true;
0 голосов
/ 10 июня 2011

Вы можете установить свойство DisplayName объекта MailAddress для установки обычного имени вместо простого использования адреса электронной почты.

MailAddress fromAddress = new MailAddress("thedude@lebowski.net");
fromAddress.DisplayName = "The Dude";
0 голосов
/ 10 июня 2011
    /// <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 = новый почтовый адрес (mailFrom, Const.SYS_NAME, Encoding.UTF8);"

DisplayName: "Const.SYS_NAME", я думаю, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...