mail() com acentos no assunto
Olá pessoal,
Como foi difícil encontrar informação na web sobre o assunto, resolvi postar aqui para auxiliar pessoas no futuro.
PROBLEMA: A função nativa mail() do php não trabalha direito com acentos nas palavras do parâmetro subject. Sendo assim, mesmo definindo o header com charset=iso-8859-1, o assunto em alguns programas leitores de e-mail aceitam certinho os acentos, outros não.
Despois de muita busca encontrei nesse link a solução (inglês) http://www.webmasterworld.com/forum88/3777.htm fiz o teste e funcionou normalmente.
Espero ter ajudado.
Como foi difícil encontrar informação na web sobre o assunto, resolvi postar aqui para auxiliar pessoas no futuro.
PROBLEMA: A função nativa mail() do php não trabalha direito com acentos nas palavras do parâmetro subject. Sendo assim, mesmo definindo o header com charset=iso-8859-1, o assunto em alguns programas leitores de e-mail aceitam certinho os acentos, outros não.
Despois de muita busca encontrei nesse link a solução (inglês) http://www.webmasterworld.com/forum88/3777.htm fiz o teste e funcionou normalmente.
Espero ter ajudado.
Data | Autor | Changelog | Download |
---|---|---|---|
28/10/2009 3:14pm | Otávio Campos de Abreu Serra | - | Versão 1.0 |
25/03/2010 11:34pm | Rubens Takiguti Ribeiro | Versão 1.1 | Versão 1.1 |
Ops, errei o código:
// Utiliza codificacao quoted-printed (Q)
if (function_exists('quoted_printable_encode')) {
$assunto_codificado = quoted_printable_encode($assunto);
return '=?'.$charset.'?Q?'.$assunto_codificado.'?=';
} elseif (function_exists('imap_8bit')) {
$assunto_codificado = imap_8bit($assunto);
return '=?'.$charset.'?Q?'.$assunto_codificado.'?=';
// Utiliza a codificacao base64 (B)
} else {
$assunto_codificado = base64_encode($assunto);
return '=?'.$charset.'?B?'.$assunto_codificado.'?=';
}
// Utiliza codificacao quoted-printed (Q)
if (function_exists('quoted_printable_encode')) {
$assunto_codificado = quoted_printable_encode($assunto);
return '=?'.$charset.'?Q?'.$assunto_codificado.'?=';
} elseif (function_exists('imap_8bit')) {
$assunto_codificado = imap_8bit($assunto);
return '=?'.$charset.'?Q?'.$assunto_codificado.'?=';
// Utiliza a codificacao base64 (B)
} else {
$assunto_codificado = base64_encode($assunto);
return '=?'.$charset.'?B?'.$assunto_codificado.'?=';
}
26/11/2009 12:00am
(~15 anos atrás)
Nem todo mundo tem a função imap_8bit, Otávio.
O ideal é testar outras possibilidades e, no pior caso, usar a codificação com base64, que já vem nativa do PHP:
// Utiliza codificacao quoted-printed (Q)
if (function_exists('quoted_printable_encode')) {
$assunto_codificado = quoted_printable_encode($assunto);
return '=?'.$charset.'?Q?'.$assunto_codificado.'?=';
} elseif (function_exists('imap_8bit')) {
$assunto_codificado = imap_8bit($assunto);
return '=?'.$charset.'?Q?'.$assunto.'?=';
// Utiliza a codificacao base64 (B)
} else {
$assunto_codificado = base64_encode($assunto);
return '=?'.$charset.'?B?'.$assunto.'?=';
}
Estes textos codificados (delimitados por =? e ?=) são definidos por um RFC, link a seguir:
http://tools.ietf.org/html/rfc2047
O ideal é testar outras possibilidades e, no pior caso, usar a codificação com base64, que já vem nativa do PHP:
// Utiliza codificacao quoted-printed (Q)
if (function_exists('quoted_printable_encode')) {
$assunto_codificado = quoted_printable_encode($assunto);
return '=?'.$charset.'?Q?'.$assunto_codificado.'?=';
} elseif (function_exists('imap_8bit')) {
$assunto_codificado = imap_8bit($assunto);
return '=?'.$charset.'?Q?'.$assunto.'?=';
// Utiliza a codificacao base64 (B)
} else {
$assunto_codificado = base64_encode($assunto);
return '=?'.$charset.'?B?'.$assunto.'?=';
}
Estes textos codificados (delimitados por =? e ?=) são definidos por um RFC, link a seguir:
http://tools.ietf.org/html/rfc2047
25/11/2009 11:59pm
(~15 anos atrás)
Atualmente tenho utilizado a classe phpMailer para envio de e-mails. Não tem esse problema de acentos.