Jump to content

Problema com caracteres especiais - Outlook


Go to solution Solved by bsccara,

Recommended Posts

Posted (edited)

Olá comunidade!

Estou com um problema que não consigo resolver. Tenho um script para enviar e-mails e está tudo a funcionar corretamente, exceto um pormenor. Toda mensagem recebida no Outlook contém caracteres estranhos (no Gmail não há problemas).

No Outlook o assunto é exibido assim:
Formulário do Site (em vez de Formulário do Site).

E o corpo da mensagem:

Nome: João (em vez de João)
E-mail: hello@hello.com
Mensagem: olá! (em vez de olá!)

Pesquisei e tentei durante horas resolver, mas não sei mais o que estou a fazer. A sugestão mais frequente que encontro é para usar a classe PHPMailer para resolver estas questões. Experimentei usar a classe, mas o problema mantém-se. Alguém sabe como posso resolver isto?

Deixo abaixo aqui o código que estou a usar:

<?php 
//////////////////////////
//Specify default values//
//////////////////////////

//Your E-mail

$your_email = 'kyrstie@outlook.com';

//Default Subject if 'subject' field does not exist
$default_subject = 'Formulário do Site';

//Message if 'name' field not specified
$name_not_specified = 'Por favor digite um nome válido';

//Message if 'message' field not specified
$message_not_specified = 'Por favor digite uma mensagem válida';

//Message if e-mail sent successfully
$email_was_sent = 'Sua mesagem foi enviada!';

//Message if e-mail not sent (server not configured)
$server_not_configured = 'Sorry, mail server not configured';


///////////////////////////
//Contact Form Processing//
///////////////////////////
$errors = array();
$response = array('error' => '', 'success' => '');

$params = array();
parse_str($_POST['data'], $params);

header('Content-type: application/json charset=iso-8859-1');

if(isset($params['message']) and isset($params['username'])) {

	if(!empty($params['username']))
		$sender_name  = stripslashes(strip_tags(trim($params['username'])));
	
	if(!empty($params['message']))
		$message      = stripslashes(strip_tags(trim($params['message'])));
	
	if(!empty($params['email']))
		$sender_email = stripslashes(strip_tags(trim($params['email'])));
	
	if(!empty($params['subject']))
		$subject      = stripslashes(strip_tags(trim($params['subject'])));


	//Message if no sender name was specified
	if(empty($sender_name)) {
		$errors[] = $name_not_specified;
	}

	//Message if no message was specified
	if(empty($message)) {
		$errors[] = $message_not_specified;
	}

	$from = (!empty($sender_email)) ? 'From: '.$sender_email : '';

	$subject = (!empty($subject)) ? $subject : $default_subject;

	//$message = (!empty($message)) ? wordwrap($message, 70) : '';

	$message = "	Nome: $sender_name 

	E-mail: $sender_email 

	Mensagem: $message

	";


	//sending message if no errors
	if(empty($errors)) {
		if (mail($your_email, $subject, $message, $from)) {
            $response['success'] = $email_was_sent;
		} else {
			$errors[] = $server_not_configured;
            $response['error'] = implode('<br>', $errors );
		}
	} else {
        $response['error'] = implode('<br>', $errors );
	}
} else {
	// if "name" or "message" vars not send ('name' attribute of contact form input fields was changed)
    $response['error'] = '"name" and "message" variables were not received by server. Please check "name" attributes for your input fields';
}

echo json_encode( $response );

?>
Edited by Kyrstannie
  • Solution
Posted

Os emails não devem ter o Content-Type certo no cabeçalho. Pelo aspecto o Outlook espera caracteres codificados em ISO-8859-1 e o teu código está a enviar caracteres codificados em Unicode. Vê esta página para uma solução para PHP.

  • Vote 1
Posted
Em 12/10/2019 às 02:20, bsccara disse:

Os emails não devem ter o Content-Type certo no cabeçalho. Pelo aspecto o Outlook espera caracteres codificados em ISO-8859-1 e o teu código está a enviar caracteres codificados em Unicode. Vê esta página para uma solução para PHP.

Olá @bsccara!

Obrigada pelo auxílio.
Consegui resolver!

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.