7
votes

Ne pas afficher "Nom d'affichage" à l'envoi de l'e-mail

i Envoyer mail à partir de mon site (.NET Framework 2.0, IIS 7) comme xxx

mais il n'y a pas de nom d'affichage ("nom de nom") à la lettre d'obtention de la lettre, uniquement par e-mail .

Avez-vous une idée de ce qui pourrait causer ce problème?

Je suis sûr que le client de messagerie ignore le nom de l'écran! Le client est Outlook.

Lorsque l'objet de transfert d'application mm sur le serveur, la propriété à partir de est {"nom de nom" } . Pourquoi le serveur supprima-t-il le nom?


2 commentaires

Êtes-vous sûr que le client de messagerie ne signifie pas simplement l'ignorant le nom ?


Le code fonctionne pour moi, j'ai peur. DisplayName apparaît simplement bien dans Outlook.


4 Réponses :


0
votes
    /// <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;
    }
i am chinese, and my english is poor. haha....int this row,second parameter : "mm.From = new MailAddress(mailFrom, Const.SYS_NAME, Encoding.UTF8);"DisplayName : "Const.SYS_NAME ", i think this is you want. 

0 commentaires

-1
votes

Vous pouvez définir la propriété displayName de l'objet MailAddress pour définir le nom normal, au lieu d'utiliser simplement l'adresse e-mail. XXX


1 commentaires

MailAddress.DisplayName n'est qu'un getter MSDN.MicRosoft .com / fr-US / bibliothèque / ... . Vous pouvez définir la surcharge mailaddress que l'OP utilise.



3
votes

J'ai également eu des problèmes avec ce problème, mais j'ai trouvé que Mailaddress prend également un troisième argument de codage. Donc au lieu d'utiliser: xxx

Essayez certains de ces gars: xxx

Cette liste n'est pas limitative, il existe d'autres options de codage que vous pouvez utiliser. J'utilise gmail et après avoir activé l'accès à moins d'applications sécurisées , ça marche Pour toutes ces personnes après avoir utilisé le SMTPCLIPT.


1 commentaires

C'est la bonne réponse, je l'ai testé avec une adresse de réception Gmail et en utilisant simplement encoding.utf8 comme troisième paramètre, le nom d'affichage a fonctionné.



1
votes

J'ai eu le même problème et il semble que la fourniture des informations d'identification a amené le serveur à utiliser ceux pour le nom "de".

Je devais commenter: P>

//client.UseDefaultCredentials = true;


0 commentaires