Problema pouco comum, mas aparece quando menos se espera. Quando você envia um email usando as rotinas padrão do .NET Framework, especificamente o System.Net.Mail, tudo funciona bem, mas, quando se trata de mandar emails no formato HTML com muito texto, é preciso atentar ao Charset e o Encoding da mensagem.
Se isso não for feito, principalmente na língua tupiniquim, que contém uma horda de caracteres especiais, a mensagem será entregue com caracteres, digamos, “mais especiais ainda”. 😀
Para garantir que a mensagem seja entregue corretamente, é preciso adicionar alguns detalhes no código de envio de email. Por exemplo, um código tradicional de envio de email no formato HTML seria algo como:
SmtpClient smtpclient = new SmtpClient(); MailMessage message = new MailMessage(); MailAddress SendFrom = new MailAddress("xxxx@abc.com"); MailAddress SendTo = new MailAddress("zzzz@gmail.com"); MailMessage MyMessage = new MailMessage(SendFrom, SendTo); var plainView = AlternateView.CreateAlternateViewFromString(msgBody,null,"text/html"); plainView.TransferEncoding = System.Net.Mime.TransferEncoding.SevenBit; MyMessage.AlternateViews.Add(plainView); MyMessage.IsBodyHtml = true; MyMessage.Subject = subjectLine; MyMessage.Body = msgBody; smtpclient.Send(MyMessage); |
Para garantir que o formato seja o correto, assumindo neste caso que o desejado seja o UTF8, o ajuste necessário seria:
var plainView = AlternateView.CreateAlternateViewFromString(msgBody, new ContentType("text/plain; charset=UTF-8")); MyMessage.AlternateViews.Add(plainView); MyMessage.BodyEncoding = Encoding.UTF8; MyMessage.IsBodyHtml = true; MyMessage.Subject = subjectLine; MyMessage.Body = msgBody; |
Selecione o Encoding mais apropriado para seu caso e defina-o em sua código.
Referências
http://stackoverflow.com/questions/1456815/problem-sending-email-with-smtpclient-in-c
http://revolucao.etc.br/archives/charsets-e-encodings/