Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Email mit JclSimpleSendMail (https://www.delphipraxis.net/213160-email-mit-jclsimplesendmail.html)

harfes 7. Jun 2023 11:01

Email mit JclSimpleSendMail
 
Ich nutze JclSimpleSendMail zum Erstellen einer Email in Outlook:

function JclSimpleSendMail(const ARecipient, AName, ASubject, ABody: AnsiString; const AAttachment: TFileName; AShowDialog: Boolean = True; AParentWND: THandle = 0; const AProfileName: AnsiString = ''; const APassword: AnsiString = ''): Boolean;

Aufruf durch:
JclSimpleSendMail(emailATN,'','Nachricht von XYZ',emailBody,'',True,0,'','');

Diese wird korrekt im Outlook angezeigt (fertig zum Versenden) - soweit so gut. ABER: wenn ich nun aus meinem Programm heraus mehrere Emailadressen übergebe (ich "addiere" dazu einfach die Strings der Emailadressen und platziere dazwischen ein Semikolon (emailATN:=emailATN+';'+emailTN;) -> also z.B. ist ARecipient bzw emailATN dann "a@b.de; b@c.com").
Das Problem: habe ich nur eine Emailadresse, dann versendet Outlook das problemlos, habe ich aber zwei oder mehr Emailadressen, dann "interpretiert" Outlook das als eine Emailadresse und der Versand funktioniert nicht (bzw kommt vom Provider mit der Fehlermeldung zurück, dass die Emailadresse nicht ok sei). Kopiere ich den gesamten String der Empfänger in den Editor und von da wieder zurück in Outlook, dann werden die Empfänger als einzelnen Empfänger angesehen/verarbeitet und das Versenden funktioniert.

Was läuft da falsch???

Hartmut

jaenicke 7. Jun 2023 11:21

AW: Email mit JclSimpleSendMail
 
Siehe Doku:
https://wiki.delphi-jedi.org/wiki/JC...SimpleSendMail
"JclSimpleSendMail sends an e-mail with optionally an attachment to 1 recipient."

Intern wird, wie du leicht im Quelltext sehen kannst,
Delphi-Quellcode:
AJclEmail.Recipients.Add
benutzt. Dort könnte man den String natürlich splitten und mehrere entsprechend einzeln hinzufügen. Das ist aktuell aber nicht so. Meiner Meinung nach spricht da aber auch nichts dagegen. Du könntest es also ändern und einen entsprechenden Pull Request machen.

Ansonsten heißt das nicht umsonst simple. Wenn du mehr möchtest, solltest du die dahinter verwendeten Mailfunktionen direkt nutzen. Wie das geht siehst du im Quelltext (Funktion SimpleSendHelper). Die Funktion umfasst auch nur wenige Zeilen und die kannst du auch schlicht kopieren und anpassen.

harfes 7. Jun 2023 11:55

AW: Email mit JclSimpleSendMail
 
Tja, immer diese Feinheiten...danke für die Info, Sebastian! Das mit dem "to 1 recipient" hatte ich glatt übersehen.

ABER: ich Frage mich schon, warum Outlook das anders "interpretiert", denn es wird ja eigentlich nur ein String übergeben (der dann inhaltlich aus mehreren Emailadressen besteht). Dann werde ich mir den Quelltext mal näher anschauen (müssen). Oder gibt es eine fertige/andere Alternative?

Hartmut

jaenicke 7. Jun 2023 12:34

AW: Email mit JclSimpleSendMail
 
Zitat:

Zitat von harfes (Beitrag 1523162)
ABER: ich Frage mich schon, warum Outlook das anders "interpretiert", denn es wird ja eigentlich nur ein String übergeben (der dann inhaltlich aus mehreren Emailadressen besteht).

Die Eingabe wird in der Oberfläche gemacht, dann auseinandergenommen und die Liste der Adressen dann intern verarbeitet. Die Eingabe in der Oberfläche und die Darstellung dort hat nichts mit der Logik dahinter zu tun. Und du verwendest nur die Logik, keine komplette Oberfläche.

Zitat:

Zitat von harfes (Beitrag 1523162)
Dann werde ich mir den Quelltext mal näher anschauen (müssen). Oder gibt es eine fertige/andere Alternative?

Wie schon geschrieben: Der Quelltext aus der Funktion SimpleSendHelper, die in JclSimpleSendMail verwendet wird, lässt sich leicht erweitern und ist auch sehr kurz (20 Zeilen oder so).

harfes 8. Jun 2023 07:22

AW: Email mit JclSimpleSendMail
 
Es ist in der Tat recht einfach, von "Simple" auf ein bisschen mehr umzustellen - ich habe in den Examples von JCL folgendes Beispiel gefunden:

1 SimpleMapiMail := TJclEmail.Create;
// Creating message using TJclEmail object, it is more flexible, but you have
// to create an instance (SimpleMapiMail variable in this example) of the class
2 SimpleMapiMail.Clear;
3 SimpleMapiMail.Recipients.Add(AnsiString(ToAddress Edit.Text), AnsiString(ToNameEdit.Text));
4 SimpleMapiMail.Subject := AnsiString(SubjectEdit.Text);
5 SimpleMapiMail.Body := AnsiString(BodyEdit.Text);
6 SimpleMapiMail.HtmlBody := HtmlCheckBox.Checked;
7 SimpleMapiMail.Attachments.Add(AnsiString(OpenDial og1.FileName));
8 SimpleMapiMail.Send(True);

Ich habe mir eine kleine Routine geschrieben, die meinen Email-String in die einzelnen Emailadressen zerlegt und dann eine Schleife erzeugt, die die Zeile 3 einfach so oft hintereinander aufruft, bis alle Emailadressen eingetragen sind. Das war's! Kein Eingriff in den Quelltext notwendig. Noch ein Hinweis am Rande: in "SimpleMapiMail.Recipients.Add(ARecipient,'',rkBCC ,''); //rkTO //rkCC //rkBCC" kann an der dritten Position entschieden werden, wo die Emailadressen zugefügt werden - entweder AN(rkTO), CC(rkCC) oder BCC(rkBCC).

Jetzt kämpfe ich noch mit dem Body: da bei diesem Aufruf von Outlook nicht die hinterlegte Signatur aufgerufen wird, lade ich diese im Moment aus einer Text-Datei (mit FileLoad). Lieber hätte ich aber eine formatierte RTF-Datei (oder auch HTML?). Da habe ich noch keinen Weg gefunden - wer da eine Idee hat, bitte gerne posten:-D. Oder gibt es doch einen Weg, die Outlook-Signatur zu laden?

Hartmut

harfes 21. Jun 2023 13:38

AW: Email mit JclSimpleSendMail
 
Die Signatur habe ich jetzt aus einer html-Datei geladen und diese wird auch korrekt angezeigt (und HtmlBody wurde auf True gesetzt). Soweit so gut. Wenn ich jetzt die Email versende, dann geschiet folgendes:

1. der/die Empfänger erhalten eine leere Email (keine Sinatur, kein evtl. zusätzlich eingefügter Text) - der vom Programm eingesetzte Betreff ist aber ok
2. die Email wird nicht im Ordner "Gesendete" von Outlook gespeichert

Hat jemand eine Idee, was die Ursache für die beiden Probleme sein kann???

Hartmut


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz