Komische Zeichen

Hallo Leute,

wenn ich zum BEispiel bei einem Emailversand ein Anhang als PDF mit einfüge dann kommt ein “ä” oder “ü” nicht an sondern mit komischen Zeichen(siehe Bild).
Wieso denn das? Was kann man da machen?

Grüße

[]28344509;“Your comment here…”[/]

Das ist leider so.
Wenn wir E-Mails mit Anhängen versenden (per SMTP_Send), und der User soll selbst eine Datei als Anhang anfügen können, dann hängen wir nicht diese Datei an, sondern eine Kopie der Datei, bei der wir im Dateinamen alle ä durch ae ersetzen usw.

Das ist ein Encoding Problem.
Wenn Sender, Empfänger und mail sich über das Encoding einig sind, geht es.
Nutzt einer ISO-8859, der andere Windows (oder MacRoman), dann sieht es so aus.
Wenn plötzlich Doppel-Zeichen kommen ist das Mail in UTF8 codiert und der Empfänger kann das (noch) nicht oder hat es nicht verstanden.

Oder der Absender dies falsch gemacht.

Dabei ist Mail Body und Header getrennt zu berücksichtigen. Header wie Betreff. Anhänge sind wieder ein Thema.

Wenn es mit 4D Internet Commands hängt, wurde meist Fehler beim Setting gemacht.
Heute würde ich nur noch UTF-8 mit Base64 empfehlen, das gibt am wenigsten Probleme.

Siehe Doku:
SMTP_SetPrefs ( lineFeed ; charset&Encoding ; lineLength )
charset&Encoding Lange Ganzzahl in Charset of the message body, headers and attachment filenames as well as encoding of the body (-1 = No Change)

und
SMTP_Charset ( encodeHeaders ; bodyCharset )

Die Logik der Befehle stammt von 1996, damals nutzte man vorwiegend 7 Bit, nach und nach kamen weitere Encodings dazu (base64 und vor allem Unicode kam viel später)

Abschließender Hinweis:
ab 4D v17 R4 wird es einfacher. Die neuen E-Mail Befehle wurden per Default so gemacht das alles in UTF8/Base64 läuft, bei halbwegs modernen Empfängern (Windows unterstützt Unicode seit XP, Mac seit OS X, aber eben noch nicht jede Software), muss man sich darum nicht mehr kümmern.
Beispiel hier:
https://doc.4d.com/4Dv17R4/4D/17-R4/transportersend.305-4071865.de.html

Nachtrag: Anscheinend ist der Bug mit 4Dv17 behoben.
Folgendes funktioniert in 4Dv17, aber nicht in 4Dv15:

<code 4D>
C_LONGINT($id;$port)
C_TEXT($serv;$fnam)
$serv:=“mail.example.de
$port:=25
$fnam:=System folder(Desktop)+“Schöne Grüße.jpg”
Case of
: (IT_SetPort (2;$port)#0)
ALERT(“Fehler1”)
: (SMTP_SetPrefs (1;1;0)#0) // v17: 1;2;0
ALERT(“Fehler2”)
: (SMTP_New ($id)#0)
ALERT(“Fehler3”)
: (SMTP_Charset (1;1)#0) // v17: 0;1
ALERT(“Fehler4”)
: (SMTP_Host ($id;$serv;0)#0)
ALERT(“Fehler5”)
: (SMTP_From ($id;"joerg.buchwitz@experteach.de";0)#0)
ALERT(“Fehler6”)
: (SMTP_To ($id;"joerg.buchwitz@experteach.de";0)#0)
ALERT(“Fehler7”)
: (SMTP_Subject ($id;“Test “+String(Current time);1)#0)
ALERT(“Fehler8”)
: (SMTP_Body ($id;“Bla”;0)#0)
ALERT(“Fehler9”)
: (SMTP_Attachment ($id;$fnam;2;0;””;"")#0)
ALERT(“Fehler10”)
: (SMTP_Send ($id;0)#0)
ALERT(“Fehler11”)
: (SMTP_Clear ($id)#0)
ALERT(“Fehler12”)
: (IT_SetPort (2;25)#0)
ALERT(“Fehler13”)
Else
ALERT(“OK”)
End case

</code 4D>

Hallo Herr Maul,

sie sagen das dies mit 4D V17 R4 mit den neuen Befehlen nicht mehr so vorkommt. Nun ich habe das gerade mit dem neusten “System” in V17 R4 mit 64 getestet und dies auf dem neusten WIndos und schwups absolut das Gleiche Problem.
Wo liegt hier die Logik? Warum kann das 4D nicht, aber selbst andere viel ältere Programme haben damit absolut kein Problem?

Grüße

Hallo Herr Buchwitz,

das verstehe ich aber im Grunde ist das doch finsterndes Mittelalter. Selbst bei den ältesten Programme funzt das ohne Probleme, denn das sind dort schon lange Standards.

Grüße

ich hatte geschrieben das dies von Empfänger und Absender abhängt.

die neuen Befehle nutzen ausschließlich Unicode/Base64, das alle
halbwegs modernen Programme können sollten.

: Armin SLAVIK

viel ältere Programme

ja, damit gibt es dann Probleme. Es reicht auch ein Uralt-virenscanner oder Mail-Gateway dazwischen.

Hallo Herr Maul,

das habe ich schon verstanden und ich sagte das ich das eben mit “MEINEM” neusten Rechner getestet habe. Ich hab mir selbst eine Mail gesendet und auch hier das Gleiche. Wie können sie das Erklären? Es sind absolut die neusten Programme drauf und die neusten Updates auch.

Gruß

Hallo Herr Maul,

das kann ich so nicht stehen lassen. Gerade habe ich die gleiche Mail von meiner ersten Email Adresse zu meiner zweiten Email Adresse genau über den gleichen Server laufen lassen. Einmal über Outlook und einmal über das neue 4D V17 R4 64.
Hier die Bilder dazu:

Über Outlook:

[]28357501;“Your comment here…”[/]

Über 4D:

[]28357505;“Your comment here…”[/]

Hallo Herr Slavik,

eMail ist ein Biest - Vergleichen Sie mal die Header von beiden eMails, da finden Sie Hinweise auf die Codierung.

…Outlook ist der Internet Explorer unter den eMail-Clients. :mrgreen:

Hallo Herr Schumacher,

wie meinen sie das mit dem Header. Der wird doch automatisch deklariert…und wenn nicht wo finde ich den beim 4D Projekt…also dem neuen? Dies sieht folgendermaßen aus( Im Blog auch als Beispiel für die neuen V14 R4):
Case of

: (Form event=On Load)
	
	ARRAY TEXT(_TabTitles;0)
	C_COLLECTION(Infos)
	C_COLLECTION(Names)
	C_OBJECT(Calculation)
	
	Infos:=ds.INFO.all().orderBy("PageNumber").toCollection()
	COLLECTION TO ARRAY(Infos.query("PageNumber<=2");_TabTitles;"TabTitle")
	
	Form.smtp:=New object
	Form.smtp.host:=""
	Form.smtp.port:=587
	Form.smtp.user:=""
	Form.smtp.password:=""
	Form.smtp.acceptUnsecureConnection:=False
	Form.mail:=New object
	Form.mail.subject:="Testemail"
	Form.mail.textBody:="Nur ein simpler Test \r\n Mal abwarten was raus kommt\r\n Ignorieren"
	Form.mail.htmlBody:="<html><body><h1>Test email </h1> This is just a test email <br /> Please ignore it</body></html>"
	
	OBJECT SET FONT(*;"Password";"%password")

End case