E-Mail Absender base64 kodieren

suntrop

Erfahrenes Mitglied
Hi,

ich will eine E-Mail mit mail() senden und als Absender steht eine IDN, weshalb ich den Absender folgendermaßen Kodieren will, was nicht ganz funktioniert:

PHP:
$from = "=?utf-8?b?".base64_encode($from_name_encode)."=?= <=?utf-8?b?".base64_encode($from_email_encode)."=?=>";
Der Absender hat dann immer die Form: Name <abc@domain.de@plesk2.isp.tld>

Ich finde einfach nicht den Grund, weshalb die Absender Adresse nicht korrekt übertragen wird. Habe schon an einigen Stellen Leerzeichen hinzugefügt, entfernt aber nichts hilft.

Kann jemand helfen?


Grüße
suntrop
 
PHP:
$from = "=?utf-8?b?".base64_encode($from_name_encode)."=?= =?utf-8?b?".base64_encode('<'.$from_email_encode.'>')."?=";
 
Danke für den Code Schnipsel, aber funktioniert auch nicht.

Jetzt erhalte ich folgenden Aufbau:

<name@example.com>@plesk2.isp.tld

Kann es sein, dass der Server da nicht ganz mitspielt, oder muss das funktionieren?
 
Kodiere mal das erste @-Zeichen mit %40. Oder:
PHP:
$from_name_encode = 'Name';
$from_email_encode = '"abc@domain.de"@plesk2.isp.tld';
$from = "=?utf-8?b?".base64_encode($from_name_encode)."=?= =?utf-8?b?".base64_encode('<'.$from_email_encode.'>')."?=";
 
Das funktioniert auch nicht, kommt bei mir falsch an.

Ich glaube ich hatte mich oben nicht ganz verständlich ausgedrückt.

Mein Code sieht so aus:
PHP:
$from_name_encode = "Günther";
	$from_email_encode = "name%40domain.tld";
	$from = "=?utf-8?b?".base64_encode($from_name_encode)."=?= =?utf-8?b?".base64_encode('<'.$from_email_encode.'>')."?=";

… also die E-Mail Adresse an sich hat nur einen Namen und einen Host, nicht zwei. Der zweite (plesk2…) ist derjenige der mich verwirrt, da ich nicht weiß wo er her kommt.
 
Wozu kodierst du das überhaupt wo doch gar keine Nicht-ASCII-Zeichen vorkommen?


Nachtrag: Jetzt habe ich den eigentlichen Fehler ja gar nicht komplett beseitigt. Die „encoded-word“-Definition lautet ja wie folgt:
Code:
encoded-word = "=?" charset "?" encoding "?" encoded-text "?="
Die Gleichheitszeichen vor „encoded-text“ müssen also weg. Also (dieses mal beide):
PHP:
$from = "=?utf-8?b?".base64_encode($from_name_encode)."?= =?utf-8?b?".base64_encode('<'.$from_email_encode.'>')."?=";
 
Wozu kodierst du das überhaupt wo doch gar keine Nicht-ASCII-Zeichen vorkommen?
Nur hier im Beispiel kommen keine in der Domain vor ;)

Ich bin sehr dankbar für deine Mühe, nur es funktioniert bei mir immer noch nicht.
Wenn ich deinen Code von oben nehme, dann kommt bei mir folgendes an:
Vorname@plesk2.isp.tld, <name@domain.tld>@plesk2.isp.tld

Ich habe mir gerade auch das RFC2047 angesehen (wobei ich bei den nie ganz verstehe was drin steht). Da war wohl wirklich ein = zuviel. Im Subject funktioniert es jedoch einwandfrei, aber das ist auch einfacher aufgebaut.

Merkwürdig finde ich jedoch, dass dort ein zusätzliches = eingefügt wird, woher auch immer das stammen mag:
=?utf-8?b?U2RiYXN0abO2bg==?= =?utf-8?b?PHNhbUB0acO8ZXdoZWVsLmRlPg==?=
Im PHP Code steht an dieser Stelle gar keins! Das wird da von irgendwem reingeschmuggelt. Ich habe jetzt an die hundert E-Mails getestet, mit immer anderen Konstellationen. Morgen teste ich es auf einem anderen Server, nicht das es hinterher gar nicht am Code liegt und ich teste und prüfe und senden und …

Oder vielleicht hat noch jemand eine Idee?


Grüße
suntrop
 
Zuletzt bearbeitet:
Die Gleichheitszeichen sind Füllzeichen, da Base64 jeweils 3 Byte der Eingabe (24 Bit) mit vier 6-Bit-Zahlen kodiert (2^6=64), die dann wiederum durch die Zeichen des Base64-Alphabets repräsentiert werden.
 
Zurück