Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi EMail-Versand via SMTP/Mapi (https://www.delphipraxis.net/189597-email-versand-via-smtp-mapi.html)

BerTa 28. Jun 2016 14:02

EMail-Versand via SMTP/Mapi
 
Hi,
wir haben folgendes Problem:
und zwar wollen wir Dokumente per EMail versenden als Massenversand.(z.B. Rechnungen)
Der Versand soll auf einem Server laufen, was bisher auch noch nicht das Problem ist. Viele Kunden wollen gerne die versendeten Mails in Outlook sehen unter gesendete EMails. Auf dem Server Outlook zu installieren mit den ganzen Profilen ist keine Lösung. Da der EMail Versand über SMTP abgewickelt wird habe ich keinen Nachweis. Meistens ist bei den Kunden Kerio oder Exchange im Einsatz.
Gibt es eine Möglichkeit direkt mit Kerio oder Exchange zu kommunizieren, oder wie könnte man so etwas lösen?

Schöne Grüße

Sherlock 28. Jun 2016 14:16

AW: EMail-Versand via SMTP/Mapi
 
Speicher halt die gesendeten Mails selbst als "gesendet" ab, und stell sie Deinen Anwendern über irgendeine kleine Viewer-Anwendung zur Verfügung.

Sherlock

Sir Rufo 28. Jun 2016 14:28

AW: EMail-Versand via SMTP/Mapi
 
Einfach die Mail in dem IMAP Ordner, der die gesendeten Mails enthalten soll, speichern.

So wenigstens machen dass die gängigen IMAP-Email-Clients

dataspider 29. Jun 2016 09:23

AW: EMail-Versand via SMTP/Mapi
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe das gleiche Problem.

Meine jetzige Lösung besteht darin, dass ich im Mailkonto und Maildialog steuern kann, dass eine Kopie an die Mailadresse des Senders oder eine andere Mailadresse gesendet wird. (siehe Anhang)

Mit Regeln kann man diese dann auch in speziellen Ordnern platzieren.

Bei Lotus Notes habe ich das Problem nicht.
Ich denke, dass es über Extended MAPI Lösungen gibt, aber ich will nicht für jedes Problem irgendeine VCL - Komponentensammlung erwerben.

Die Lösung ist sicher nicht perfekt, wird bis jetzt allerdings akzeptiert.

Frank

jobo 29. Jun 2016 10:54

AW: EMail-Versand via SMTP/Mapi
 
Wie wär es mit einer Blindcopy, Adresse wählbar / Nachschlagsliste / Default?
Damit würden die Emails dann nicht im Gesendet Postfach irgendeines Sachbearbeiters liegen, sondern es ließe sich steuern wo sie liegen und folglich auch, wer (lesenden) Zugriff hat.
Selbst den Emailversand zu loggen kann natürlich (als Nachweis, für Supportzwecke) auch nicht schaden.

exilant 29. Jun 2016 12:22

AW: EMail-Versand via SMTP/Mapi
 
Ich mache das in hier in einer Anwendung so wie Sir Rufo es gesagt hat. Der Versand des Dokumentes erfolgt ganz normal via SMTP. Nach erfolgreichem Versand kopiert die Anwendung die generierte EMail in den "gesendet" Ordner des entsprechenden IMAP Kontos. Dazu reicht die Indy Funktionalität locker aus. Welcher Ordner in welchem Konto verwendet wird halte ich konfigurierbar. So mache ich es beim Rechnungsausgang und auch beim Versand von anderen Dokumenten an unsere Kunden. Klappt einwandfrei.

Sir Rufo 29. Jun 2016 13:32

AW: EMail-Versand via SMTP/Mapi
 
Zitat:

Zitat von exilant (Beitrag 1341519)
Klappt einwandfrei.

Denn:

dataspider 29. Jun 2016 13:53

AW: EMail-Versand via SMTP/Mapi
 
Zitat:

Zitat von exilant (Beitrag 1341519)
Nach erfolgreichem Versand kopiert die Anwendung die generierte EMail in den "gesendet" Ordner des entsprechenden IMAP Kontos. Dazu reicht die Indy Funktionalität locker aus.

Ist zwar nicht mein Thread...aber
hast du noch einen paar Stichworte zum Speichern mit Indy!

Frank

Sir Rufo 29. Jun 2016 14:06

AW: EMail-Versand via SMTP/Mapi
 
Schau dir mal
Delphi-Quellcode:
TIdIMAP4.AppendMsg
an, damit kann man eine email zu einem Ordner hinzufügen

exilant 29. Jun 2016 15:15

AW: EMail-Versand via SMTP/Mapi
 
Zitat:

Zitat von dataspider (Beitrag 1341528)
Zitat:

Zitat von exilant (Beitrag 1341519)
Nach erfolgreichem Versand kopiert die Anwendung die generierte EMail in den "gesendet" Ordner des entsprechenden IMAP Kontos. Dazu reicht die Indy Funktionalität locker aus.

Ist zwar nicht mein Thread...aber
hast du noch einen paar Stichworte zum Speichern mit Indy!

Frank

Schnell aus dem Kopf:

Delphi-Quellcode:

function CopyToImapFolder(msg:TIdMessage; imapHost,imapFolder,imapUser,imapPassword:string):boolean;
begin
    result := false;  
    i4 := TIdIMAP4.Create(NIL);
    try
      i4.Host    := imapHost;
      i4.Password := ImapPassword;
      i4.Username := ImapUser;
      if i4.Connect() then begin
        result := i4.AppendMsg(imapfolder,msg,NIL,[mfseen]);
        i4.disconnect();
      end;
    finally
      i4.free;
    end;
end;
hth
Martin

dataspider 29. Jun 2016 17:13

AW: EMail-Versand via SMTP/Mapi
 
Herzlichen Dank an Martin und Sir Rufo...

Ich habe es gerade mal getestet. Funktioniert!

Frank

BerTa 1. Jul 2016 13:52

AW: EMail-Versand via SMTP/Mapi
 
Hi,
vielen Dank für die Hilfe,
mit Imap hatten wir es auch schonmal probiert.
Hatten, bzw. haben gelegentlich das Problem, dass sich unser Programm aufhängt.
Der Versand per SMTP hat geklappt, aber im Versand Ordner ist keine Kopie zu finden.
Er scheint sich beim Connect aufzuhängen.
Woran kann sowas liegen? Es kommt nicht immer vor.

Sir Rufo 1. Jul 2016 15:03

AW: EMail-Versand via SMTP/Mapi
 
IdR müsste der Connect auch einen Timeout haben. Wenn der aber default auf
Delphi-Quellcode:
INFINITE
steht, dann wartest du eben bis "end of days" :stupid:

Also TimeOut für den Connect mitgeben und entsprechend darauf reagieren.

Es macht da durchaus Sinn mit entsprechenden Warteschlangen zu arbeiten, die von den beiden Diensten Sende per SMTP, Verschiebe in Versand-Ordner (laufen jeweils im eigenen Thread) abgearbeitet werden.

Die Daten liegen dafür lokal auf der Platte und werden dann wenn möglich abgearbeitet. Stürzt dein Programm ab, dann wird beim nächsten Start einfach an der Stelle weitergemacht ;)

BerTa 4. Jul 2016 10:32

AW: EMail-Versand via SMTP/Mapi
 
Nach einem Neustart des Programms habe ich keine Probleme ein EMail zu versenden.
Wenn ich aber die IMAP Daten den Bediener zuordnen will und die MailBoxen abfragen, bekomme ich danach Probleme beim Versenden -> ReadTimeOut
Schon merkwürdig, dass es in der Konstellation immer auftritt.

Code:
  IMAP := TIdIMAP4.Create(nil);
  IMAP.Host    := bedDM.MyQBedimap_server.Value;
  IMAP.Port    := bedDM.MyQBedimap_port.Value;
  IMAP.Username := bedDM.MyQBedimap_account.Value;
  IMAP.Password := bedDM.MyQBedimap_pw.Value;
  //LTheSASLListEntry := TheSmtp.FSASLMechanisms.Add;
  //LTheSASLListEntry.SASL := TheSASLLogin;
  IMAP.ReadTimeout   := 10000;
  IMAP.ConnectTimeout := 10000;
  if IMAP.Connect then
  begin
    IMAP.ListMailBoxes(UsersFolders);
    for i := 0 to UsersFolders.Count-1 do
      cxComboIMAPSent.Properties.Items.Add(UsersFolders[i]);
    IMAP.Disconnect;
  end;

  if IMAP <> nil then
  begin
    IMAP.Free;
    IMAP := nil;
  end;
Code:
  IMAP := TIdIMAP4.Create(self);

  IMAP.Host := ApsToolDM.MyQBedDatenimap_server.Value;
  IMAP.Port := ApsToolDM.MyQBedDatenimap_port.Value;
  IMAP.Username := ApsToolDM.MyQBedDatenimap_account.Value;
  IMAP.Password := ApsToolDM.MyQBedDatenimap_pw.Value;
  IMAP.ReadTimeout   := 5000;
  IMAP.ConnectTimeout := 5000;
  if IMAP.Connect then
  begin
    Imap.AppendMsg(APsToolDM.MyQBedDatenimap_sent.Value,IdMsgSend,NIL,[mfseen]);
    if IMAP.Connected then
      IMAP.Disconnect;
  end;
  if IMAP <> nil then
  begin
    IMAP.Free;
    IMAP := nil;
  end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:08 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