使用System.Net.Mail lib发送的电子邮件显示中文字母

时间:2011-09-13 22:31:22

标签: c# email encoding cjk

在Gmail中运行得非常好。

在Hotmail中显示以下内容:

enter image description here

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

以下是代码:

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)
    {
    }
}

1 个答案:

答案 0 :(得分:4)

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