2009-07-18 3 views
1

Ich versuche, eine mehrteilige/alternative MIME-E-Mail über PHP-Skript zu senden ... alles funktioniert gut, aber ich habe ein paar Probleme mit der Codierung! Die akzentuierten Zeichen im E-Mail-Text werden im Mail-Client falsch angezeigt! Wie kann der Körper kodiert werden, um dieses Problem zu lösen? ... Ich habe zu verwenden versucht ..Multipart Mail - Akzentuierungen Probleme

utf8_encode($body) 

Ohne gute Ergebnisse!

In einigen rohen Format E-Mail, habe ich festgestellt, dass die Akzentuierungen ersetzt werden von = XX (wo XX sind alphanumerische Zeichen) ... Wie kann ich das tun?

Vielen Dank im Voraus!

Dies ist der Code:

$header = "From: \n"; 
$header .= "Reply-To: \n"; 
$header .= "Content-Type: multipart/alternative; boundary=$alt_boundary\n"; 
$header .= "Mime-Version: 1.0\n"; 
$header .= "X-Mailer: PHP/".phpversion()."\n"; 

$body .= "\n".wordwrap($txt_body, 70); 

$body .= "\n\n--$alt_boundary\n"; 
$body .= "Content-Type: multipart/mixed; boundary=$mixed_boundary\n"; 

$body .= "\n\n\n--$mixed_boundary\n"; 
$body .= "Content-Type: text/html; charset=utf-8\n"; 
$body .= "Content-Transfer-Encoding: 7bit\n"; 

$body .= "\n".wordwrap($html_body, 70); 

$body .= "\n\n\n--$mixed_boundary\n"; 
$body .= "Content-Disposition: attachment filename=\"test file\"\n"; 
$body .= "Content-Type: application/octet-stream; x-unix-mode=0644; name=\test file\"\n"; 
$body .= "Content-Transfer-Encoding: 7bit\n"; 

$body .="\n$file"; 

$body .= "\n\n--$mixed_boundary--"; 
$body .= "\n\n--$alt_boundary--"; 

mail($to, $subject, $body, utf8_encode($header)); 

EDIT:

Die $txt_body und $html_body sind die Inhalte von zwei Dateien:

$txt_body = file_get_contents(...); 
$html_body = file_get_contents(...); 

In den Dateien, die ich einige Informationen ersetzen, Ich erhalte von PayPal über IPN. Ich habe festgestellt, dass beim Empfang der E-Mail nur die Akzentuierungen, die in den IPN-Informationen auftreten, falsch angezeigt werden (dh die zusätzlichen Informationen, die ich im Inhalt der Dateien ersetze)! Die anderen hervorgehobenen Charaktere werden korrekt angezeigt !!

Wie kann ich das lösen?

GELÖST:

Ich habe das Problem gelöst! Die utf8_encode() - Funktion muss nur auf päpale Info-Variablen angewendet werden, in der Tat versuche ich in utf8 den $ txt_body zu kodieren ... die paypal-Variablen werden 2 mal in utf8 kodiert.

$txt_body = utf8_encode(file_get_contents(...)); 
$html_body = utf8_encode(file_get_contents(...)); 

und als in $ txt_body und html_body $ habe ich die Info erhalten durch IPN ersetzt: Mit anderen Worten habe ich das gemacht!

Danke an Eerybody!

+0

erstellt werden Warum sind Verwenden Sie "multipart/alternative", wenn es keine Alternative gibt? Warum benutzt du nicht einfach 'multipart/mixed'? – Gumbo

+0

Ja, Sie haben Recht! – BitDrink

+0

Haben Sie eine * quoted-printable * - oder * base64 * -Übertragungscodierung versucht? – Gumbo

Antwort

1

Sie müssen den Charakter erklären kodieren Sie in der Kopfzeile dieser spezifischen Teil verwendet haben:

MIME-Version: 1.0 
Content-Type: multipart/alternative; boundary=boundary 

--boundary 
Content-Type: text/plain; charset=utf-8 

This part uses UTF-8. 
--boundary 
Content-Type: text/plain; charset=iso-8859-1 

This part uses ISO 8859-1. 
--boundary-- 
+0

Dank Ihrer Antwort! Ja, ich habe utf-8 als Zeichensatz verwendet, aber wenn ich die Mail erhalte, werden die Akzentuierungen nicht richtig angezeigt! – BitDrink

+0

Nun, es ist wahrscheinlich, dass Ihre Daten nicht UTF-8-codiert sind. Die Zeichencodierungsdeklaration ändert die tatsächliche Codierung nicht. Es ändert nur, wie die Daten interpretiert werden. – Gumbo

0

utf-8-kodierten mehrteiliger Mails können leicht mit SwiftMailer

$message->addPart($txt_body, 'text/plain', 'utf-8'); 
$message->addPart($html_body, 'text/html', 'utf-8'); 
$message->attach(Swift_Attachment::fromPath('/path/to/testfile')); 
+0

Aber mein Problem ist die Kodierung nur der Info, die paypal zu meinem PHP-Skript über IPN geschickt wurde – BitDrink

+0

Dann sind diese Daten (von paypal) nicht utf-8 kodiert? – VolkerK

Verwandte Themen