0

mail() com acentos no assunto

criado por Otávio Campos de Abreu Serra em 28/10/2009 3:14pm
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.
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

Comentários:

Mostrando 1 - 3 de 3 comentários
Olá Rubens, obrigado por informar.

Atualmente tenho utilizado a classe phpMailer para envio de e-mails. Não tem esse problema de acentos.
05/07/2010 4:42pm (~14 anos atrás)

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.'?=';

}
26/11/2009 12:00am (~14 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
25/11/2009 11:59pm (~14 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)