2010-03-22 16 views
108

Provo a utilizzare PHPMailer per inviare la registrazione, l'attivazione. ecc posta agli utenti:Problemi di codifica dei caratteri PHPMailer

require("class.phpmailer.php"); 
$mail -> charSet = "UTF-8"; 
$mail = new PHPMailer(); 
$mail->IsSMTP(); 
$mail->Host  = "smtp.mydomain.org"; 
$mail->From  = "[email protected]"; 
$mail->SMTPAuth = true; 
$mail->Username ="username"; 
$mail->Password="passw"; 
//$mail->FromName = $header; 
$mail->FromName = mb_convert_encoding($header, "UTF-8", "auto"); 
$mail->AddAddress($emladd); 
$mail->AddAddress("[email protected]"); 
$mail->AddBCC('[email protected]', 'firstadd'); 
$mail->Subject = $sub; 
$mail->Body = $message; 
$mail->WordWrap = 50; 
if(!$mail->Send()) { 
    echo 'Message was not sent.'; 
    echo 'Mailer error: ' . $mail->ErrorInfo; 
} 

Il $message è contenere caratteri latini. Sfortunatamente tutta la webmail (gmail, webmail.mydomain.org, emailaddress.domain.xx) usa codici diversi.

Come posso forzare l'utilizzo della codifica UTF-8 per mostrare esattamente la mia posta su tutte le cassette postali?

Provo a convertire la larghezza dell'intestazione della posta mb_convert_encoding(), ma senza fortuna.

+0

hai cambiato qualcosa? –

+0

La capitalizzazione di CharSet è stata modificata da bovender. – gogowitsch

risposta

299

Se si è sicuri al 100% $ messaggio contengono ISO-8859-1 è possibile utilizzare utf8_encode come dice David. Altrimenti utilizzare mb_detect_encoding e mb_convert_encoding in $ messaggio.

Anche prendere nota che

$mail -> charSet = "UTF-8"; 

dovrebbero essere sostituiti da:

$mail->CharSet = 'UTF-8'; 

E posto dopo l'istanza della classe (dopo il "nuovo"). Le proprietà sono case sensitive! Vedere lo PHPMailer doc per l'elenco & ortografia esatta.

+16

Beh non so se qualcuno si prende cura come questo è pazzo vecchio ma, ho dovuto aggiungere $ mail-> Codifica = "base64" per ottenere questo a lavorare per me –

+4

@AndrewRevak hai salvato la giornata! :) – carla

+2

@AndrewRevak Grandi cose! Questa è la cosa che lo ha risolto. – BernardA

0

Se il messaggio utilizza Latin1, è possibile utilizzare utf8_encode Works per me, comunque.

-4

$ mail -> charSet = "UTF-8"; --- questa riga dovrebbe essere sotto $ mail = new PHPMailer(); linea.

pff ..

4

Io lavoro me stesso in questo modo

$mail->FromName = utf8_decode($_POST['name']); 

http://php.net/manual/en/function.utf8-decode.php

+0

Non ho alcuna cosa da POST, solo una normale stringa francese scritta in un file codificato utf-8, e questo ha funzionato come un incantesimo, grazie! – toni07

17
$mail -> CharSet = "UTF-8"; 
$mail = new PHPMailer(); 

linea $mail -> CharSet = "UTF-8"; deve essere dopo $mail = new PHPMailer(); e senza spazi!

provare questo

$mail = new PHPMailer(); 
$mail->CharSet = "UTF-8"; 
+2

Ho aggiornato questo post per una migliore lettura, ma la domanda dell'opto era già stata risolta 2 anni prima! E quella risposta accettata includeva già questa. – Dwza

0

@ $mail -> charSet = "UTF-8";

--- questa linea dovrebbe essere sotto

$mail = new PHPMailer(); line.

pff ..


Sì, è corretto. Devi posizionarlo dopo l'istanza dell'oggetto.

+0

Questo non fornisce una risposta alla domanda. Per criticare o richiedere chiarimenti da un autore, lascia un commento sotto il loro post - puoi sempre commentare i tuoi post, e una volta che hai [reputazione] sufficiente (http://stackoverflow.com/help/whats-reputation) essere in grado di [commentare qualsiasi post] (http://stackoverflow.com/help/privileges/comment). –

+0

Non è una richiesta di critica o di chiarimento per questo problema. La risposta corretta è: $ mail = new PHPMailer(); $ mail-> CharSet = 'UTF-8'; –

+0

Zo me sembra un commento sulla risposta di Holian poiché non aggiunge nulla ad esso. –

-1
$mail = new PHPMailer(); 
$mail -> CharSet = "UTF-8"; 
0

Il modo più semplice e vi aiuterà con è impostato CharSet a UTF-8

$mail->CharSet = "UTF-8" 
+0

Ha già una riga esatta nel suo codice di esempio. –

+0

@NickZuber La riga esatta è presente a causa di modifiche. Non era esattamente nella domanda originale ... –

1

Ci scusiamo per il ritardo sul partito. A seconda della configurazione del server, potrebbe essere necessario specificare il carattere rigorosamente con lettere minuscole utf-8, altrimenti verrà ignorato. Prova questo se si finisce qui alla ricerca di soluzioni e nessuna delle risposte sopra aiuta:

$mail->CharSet = "UTF-8"; 

dovrebbe essere sostituito con:

$mail->CharSet = "utf-8"; 
2
$mail = new PHPMailer(); 
$mail->CharSet = "UTF-8"; 
$mail->Encoding = "16bit"; 
0

per evitare problemi di codifica dei caratteri a inviare e-mail utilizzando il class PHPMailer possiamo configurarlo per inviarlo con codifica caratteri UTF-8 usando il parametro "CharSet", come possiamo vedere nel seguente codice PHP:

$mail = new PHPMailer(); 
$mail->From = '[email protected]'; 
$mail->FromName = 'Mi nombre'; 
$mail->AddAddress('[email protected]'); 
$mail->Subject = 'Prueba'; 
$mail->Body = ''; 
$mail->IsHTML(true); 


// Active condition utf-8 
$mail->CharSet = 'UTF-8'; 


// Send mail 
$mail->Send();