Arquivo da tag: System.Net.Mail

.NET – Problema na Codificação no envio de Emails

Email Encoding
Email Encoding

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/