【问题标题】:Email sent with the System.Net.Mail lib displays chinese letters使用 System.Net.Mail 库发送的电子邮件显示中文字母
【发布时间】:2012-05-07 01:00:22
【问题描述】:

在 Gmail 中运行良好。

在 Hotmail 中显示以下内容:

我的代码中没有任何地方写过中文,我不希望那里有任何中文字母。

代码如下:

public static void SendVerificationEmail(string userEmail, int userId, string verificationCode)
{
    try
    {
        var fromAddress = new MailAddress("contacto@goldremates.com", "GoldRemates | Atencion Al Cliente");
        var toAddress = new MailAddress(userEmail, String.Empty);
        const string fromPassword = "password";
        const string subject = "Bienvenidos!";
        const string body = @"<html>
                                <head>
                                </head>

                                <body>
                                    <h1 style=""color:#E4AA00; font-family:Tahoma; font-size:16px;"">¿Qué es mywebsite.com?</h1>
                                    <p>mywebsite.com es una página web que fue creada para ofrecer a sus usuarios, 
                                    una manera excitante y divertida de comprar productos nuevos en cajas, con una garantía 
                                    de los proveedores y descuentos que pueden llegar hasta el 90%.</p>

                                    <p>En mywebsite.com vas a poder comprar productos de diversas marcas, por precios 
                                    increíbles. Para convertirte en un ganador de nuestras subastas solo elige el producto 
                                    que deseas, da tus pujas y ¡GANA¡</p>

                                    <p>En mywebsite.com no perderás nunca. Desde el momento en el que participas en dar 
                                    las pujas, puedes utilizar este valor como descuento para la compra del producto que no 
                                    lograste arrematar.</p>

                                    <p>Ejemplo: si un producto cuesta 100 dólares y usted participa en la subasta del producto 
                                    dando sus ofertas. Después de dar 30 ofertas, es decir 30 dólares y otra persona gano el 
                                    remate usted puede utilizar esos 30 dólares como descuento para la compra del producto, 
                                    o sea de los 100 dólares solo pagaría 70.</p>

                                    <h1 style=""color:#E4AA00; font-family:Tahoma; font-size:16px;"">¿Qué son y para qué sirven  los 15 créditos que obtuve por registrarme?</h1>
                                    <p>Al momento de registrarte ganaste 15 créditos que equivalen a 15 ofertas o pujas que 
                                    puedes utilizar en los remates gratuitos que ofrecerá mywebsite.com</p>

                                    <h1 style=""color:#E4AA00; font-family:Tahoma; font-size:16px;"">¿Cuánto tiempo los créditos gratuitos son validos?</h1>
                                    <p>Estos créditos tendrán validad hasta la finalización de la feria Expocruz.</p>

                                    <h1 style=""color:#E4AA00; font-family:Tahoma; font-size:16px;"">¿Qué son los remates gratuitos mywebsite.com?</h1>
                                    <p>En los remates gratuitos mywebsite.com el usuario que gana la subasta no 
                                    paga el valor de remate.</p>

                                    <p>Todos los créditos utilizados en los remates son descontados.</p>

                                    <h1 style=""color:#E4AA00; font-family:Tahoma; font-size:16px;"">¿Puedo pujar en más de una subasta al mismo tiempo?</h1>
                                    <p>Si, si usted desea dar cuantas ofertas quiera para arrematar con los productos 
                                    de su interés lo puede hacer.</p>

                                    <h1 style=""color:#E4AA00; font-family:Tahoma; font-size:16px;"">Consejos de goldremates.com:</h1>
                                    <p>Al participar de una subasta, evitar el envió de correos electrónicos con archivos 
                                    adjuntos y descargas. Algunos programas también pueden afectar la velocidad de su conexión. 
                                    Compartir con otros usuarios de internet hacer descargas mientras está haciendo una oferta 
                                    puede hacer que sea más lento.</p>

                                    <h1 style=""color:#E4AA00; font-family:Tahoma; font-size:16px;"">¿Cómo dar mis ofertas en mywebsite.com?</h1>
                                    <p>Es muy fácil participar. Solo tiene que seguir los siguientes pasos:</p>
                                    <ol>
                                        <li>Elija una subasta</li>
                                        <li>Has tu oferta y se un ganador</li>
                                    </ol>

                                    <h1 style=""color:#E4AA00; font-family:Tahoma; font-size:16px;"">¿Cuándo finaliza la subasta?</h1>
                                    <p>La subasta finaliza cuando el contador llega a cero.</p>

                                    <h1 style=""color:#E4AA00; font-family:Tahoma; font-size:16px;"">¡Remate el producto!, y ahora ¿Qué hago?</h1>
                                    <p>¡Felicitaciones!  Usted recibirá un correo electrónico indicando los datos de la subasta 
                                    que gano y las instrucciones de la entrega, mywebsite.com siempre con sus clientes para 
                                    servirle mejor.</p> 

                                    <p>Gracias por registrase.</p>

                                    <p>Saludos</p>

                                    <p>GoldRemates</p>

                                    <img src=""http://mywebsite.com/images/logo.png"" alt=""Gold Remates Logo"" />

                                </body>
                            </html>";

        var smtp = new SmtpClient
        {
            Host = "my.mail.server.com",
            Port = 25,
            EnableSsl = false,
            DeliveryMethod = SmtpDeliveryMethod.Network,
            UseDefaultCredentials = false,
            Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
        };
        using (var message = new MailMessage(fromAddress, toAddress)
        {
            Subject = subject,
            Body = body,
            IsBodyHtml = true,
            BodyEncoding = Encoding.Unicode,
            SubjectEncoding = Encoding.Unicode
        })
        {
            smtp.Send(message);
        }
    }
    catch (Exception e)
    {
    }
}

【问题讨论】:

    标签: c# email encoding cjk


    【解决方案1】:

    那不是真正的中国人;那是Unicode出错了。 Hotmail 未正确保留 Unicode 编码。尝试使用 UTF-8 进行编码,这将允许用户使用 Unicode 字符,但大多数情况下向后兼容无法处理 UTF-16/UTF-32 的客户端。

    【讨论】:

    • BodyEncoding 属性,utf-16 在网络上并不流行。
    • 确实如此。如果您使用拉丁字符(AFAIK 大多数网络资源都使用),则 UTF-8 比 UTF-16 更节省空间。 UTF-16 是更好的内存表示(尽管有嵌入式系统),而 UTF-32/UCS-4 比这更好。
    猜你喜欢
    • 2013-04-02
    • 2012-08-20
    • 2011-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-20
    相关资源
    最近更新 更多