O envio de e-mails com o PHP através da função mail() traz um problema para nós que usamos a Língua Portuguesa: a acentuação no campo assunto. Alguns clientes de e-mail até fazem a tradução de UTF-8 para ISO-8859-1, mas alguns simplesmente exibem tudo errado mesmo (um spoiler: mudar o charset no Content-Type não vai adiantar nada pro problema do assunto).
Alguns “utf8_encodes” e “utf8_decodes” depois, descobri uma solução bem fácil, basta transformar o assunto da seguinte forma:
PHP
$assunto = '=?UTF-8?B?' . base64_encode($assunto) . '?=';
Depois é só usar a variável $assunto na chamada da função mail().
Muito obrigado. Funcionou perfeitamente.
Ótima dica! Solução simples e eficaz. Obrigadooooooooo!
O assunto era enviado em branco. Passei várias horas testando possibilidades, mudando servidores de SMTP… e nada resolvia.
Muito Obrigado. Foi extremamente útil.
Cara, onde tu descobriu isso?!
Fantástico! Muito obrigado!
Valeu cara! Me ajudou também =)
Ótima dica!
Cara salvou o dia.
No subject funcionou, mas no conteudo do e-mail(texto) não…que coisa….
Cara, obrigado. To a horas testando um monte de função de decodificação do php a horas. O seu deu certo 😀
cara ótima dica, funcionou perfeitamente.
Muito obrigado, abraços!
Muito obrigado pela dica, também solucionou meu problema. Obrigado
cara. ótima dica. nem sei como agradecer. abraço
Obrigado, excelente dica! Fazia tempo que eu estava querendo resolver esse problema no assunto dos e-mails, e deu certinho. Eu uso “feed back” de cadastro dos e-mails e mando e-emails “marketing” através de um site que criei para os usuários cadastrados. Se eu puder retribuir com alguma coisa pode contar comigo.
Muito obrigada!! Depois de horas de pesquisa, sua dica me ajudou muito!!
A tempos sofro com este problema no bendito hotmail. Esta linha resolveu o problema. Obrigado!
Olá Felipe, estou tentando usar sua dica em meu formulário e não estou conseguindo, pois não entendo bem de programação. Segue abaixo o código do arquivo php. Além desse php tenho o html. Se for possível me ajudar posso enviar os dois arquivos para você analisar.
$email = $_POST[‘email’];
$telefone = $_POST[‘telefone’];
$cidade = $_POST[‘cidade’];
$assunto = $_POST[‘assunto’];
$textodamensagem = $_POST[‘textodamensagem’];
//CABEÇALHO – ONFIGURAÇÕES SOBRE SEUS DADOS E SEU WEBSITE
$nome_do_site=”www.cidosom.com.br”;
$email_para_onde_vai_a_mensagem = “[email protected]”;
$nome_de_quem_recebe_a_mensagem = “CIDO SOM”;
$exibir_apos_enviar=’enviado.html’;
//MAIS – CONFIGURAÇOES DA MENSAGEM ORIGINAL
$cabecalho_da_mensagem_original=”From: $name \n”;
$assunto_da_mensagem_original=”Contato no Site”;
// FORMA COMO RECEBERÁ O E-MAIL (FORMULÁRIO)
// ******** OBS: SE FOR ADICIONAR NOVOS CAMPOS, ADICIONE OS CAMPOS NA VARIÁVEL ABAIXO *************
$configuracao_da_mensagem_original=”
ENVIADO POR:\n
Nome: $nome\n
Email: $email\n
Telefone: $telefone\n
Cidade: $cidade\n
Assunto: $assunto\n
Mensagem: $textodamensagem\n
ENVIADO EM: $date
“;
//CONFIGURAÇÕES DA MENSAGEM DE RESPOSTA
// CASO $assunto_digitado_pelo_usuario=”s” ESSA VARIAVEL RECEBERA AUTOMATICAMENTE A CONFIGURACAO
// “Re: $assunto”
$assunto_da_mensagem_de_resposta = “Confirmação”;
$cabecalho_da_mensagem_de_resposta = “From: $nome_do_site \n”;
$configuracao_da_mensagem_de_resposta=”Obrigado por entrar em contato!\nEstaremos respondendo em breve…\nAtenciosamente,\n$nome_do_site\n\nEnviado em: $date”;
// ****** IMPORTANTE ********
// A PARTIR DE AGORA RECOMENDA-SE QUE NÃO ALTERE O SCRIPT PARA QUE O SISTEMA FINCIONE CORRETAMENTE
// ****** IMPORTANTE ********
//ESSA VARIAVEL DEFINE SE É O USUARIO QUEM DIGITA O ASSUNTO OU SE DEVE ASSUMIR O ASSUNTO DEFINIDO
//POR VOCÊ CASO O USUARIO DEFINA O ASSUNTO PONHA “s” NO LUGAR DE “n” E CRIE O CAMPO DE NOME
//’assunto’ NO FORMULARIO DE ENVIO
$assunto_digitado_pelo_usuario=”s”;
//ENVIO DA MENSAGEM ORIGINAL
$headers = “$cabecalho_da_mensagem_original”;
if($assunto_digitado_pelo_usuario==”n”){
$assunto = “$assunto_da_mensagem_original”;
}
$seuemail = “$email_para_onde_vai_a_mensagem”;
$mensagem = “$configuracao_da_mensagem_original”;
mail($seuemail,$assunto,$mensagem,$headers);
//ENVIO DE MENSAGEM DE RESPOSTA AUTOMATICA
$headers = “$cabecalho_da_mensagem_de_resposta”;
if($assunto_digitado_pelo_usuario==”n”){
$assunto = “$assunto_da_mensagem_de_resposta”;
}else{
$assunto = “Re: $assunto”;
}
$mensagem = “$configuracao_da_mensagem_de_resposta”;
mail($email,$assunto,$mensagem,$headers);
echo “window.location=’$exibir_apos_enviar'”;
?>
Excelente dica, desse modo posso manter minha pagina na codificação utf-8 e ao mesmo tempo enviar e-mails sem erros nos caracteres do assunto.
muito obrigado,
Saty