AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke ReplyTo mit Standard-Mail-Client
Thema durchsuchen
Ansicht
Themen-Optionen

ReplyTo mit Standard-Mail-Client

Offene Frage von "mytbo"
Ein Thema von NLan · begonnen am 25. Jul 2023 · letzter Beitrag vom 30. Jul 2023
Antwort Antwort
NLan

Registriert seit: 19. Jul 2023
7 Beiträge
 
Delphi 10.4 Sydney
 
#1

ReplyTo mit Standard-Mail-Client

  Alt 25. Jul 2023, 11:00
Ich programmiere seit vielen Jahre mit Delphi (seit Delphi 5) - jetzt mit Delphi 10.

Bisher habe ich Mails über den Standard-Mail-Client von Windows mit der Mapi32.dll versendet.
Über das message Objekt (in der ..\source\rtl\win\winapi.mapi.pas von DELPHI)
funktioniert alles was man braucht (CC,BCC,Dateianhänge...)
Nur das "ReplyTo" also die abweichende Antwort-Adresse gibt es da nicht.

es gibt da nur:

MAPI_ORIG = 0; { Recipient is message originator }
MAPI_TO = 1; { Recipient is a primary recipient }
MAPI_CC = 2; { Recipient is a copy recipient }
MAPI_BCC = 3; { Recipient is blind copy recipient }

Hat jemand eine Idee, wie das geht (z.B. Werte 4..99)?

Oder muß ich eine andere Funktion zum Erzeugen von Mail's mit dem Standard-Mail-Client von Windows verwenden (ShellExecute ist keine Option) ?

DANKE
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#2

AW: ReplyTo mit Standard-Mail-Client

  Alt 25. Jul 2023, 11:26
Ein Vorschlag in C++: Send mail with Mapi with reply-to multiple emails

Keine Ahnung, ob das wirklich hilfreich sein könnte.
  Mit Zitat antworten Zitat
Frickler

Registriert seit: 6. Mär 2007
Ort: Osnabrück
599 Beiträge
 
Delphi XE6 Enterprise
 
#3

AW: ReplyTo mit Standard-Mail-Client

  Alt 26. Jul 2023, 14:53
Sowohl die Delphi-Standardbibliothek als auch die Jcl unterstützen nur "Simple MAPI". Das ist eine Untermenge von MAPI, die "Reply to" nicht unterstützt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

AW: ReplyTo mit Standard-Mail-Client

  Alt 26. Jul 2023, 15:15
Auch Dateianhänge oder Textformatierungen sind da nicht wirklich unterstützt.

Eine Zeit lang hatten wir eine selbstgeschriebene .NET-Anwendung genutzt, wenn als Ziel ein MSOutlook vorhanden ist,
also eine Konsolenanwendung, welche Daten aus ihren Parametern an die Outlook-MAPI im .NET-Framework übergab.


Inzwischen erstellen wir mit Indy (glaub TIdMessage) eine .EML-Datei, welche dann per ShellExecute durch Windows ans Standard-MailProgramm übergeben wird.
$2B or not $2B
  Mit Zitat antworten Zitat
NLan

Registriert seit: 19. Jul 2023
7 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: ReplyTo mit Standard-Mail-Client

  Alt 26. Jul 2023, 16:01
zu: Auch Dateianhänge oder Textformatierungen sind da nicht wirklich unterstützt.
---
Doch das geht alles prima über die MAPI. Es lassen sich beliebig viele Dateianhänge erzeugen und die Formatierung funktioniert mit HTML im Mail-Text.

Nur das ReplyTo scheint vergessen wurden zu sein bzw. ist später erst gekommen. Es gibt ja auch Teile "Reserved for future" bzw. weitere Werte für ulRecipClass im MapiRecipDesc object.

MapiMessage = record
ulReserved: ULONG; { Reserved for future use (M.B. 0) }
lpszSubject: LPSTR; { Message Subject }
lpszNoteText: LPSTR; { Message Text }
lpszMessageType: LPSTR; { Message Class }
lpszDateReceived: LPSTR; { in YYYY/MM/DD HH:MM format }
lpszConversationID: LPSTR; { conversation thread ID }
flFlags: FLAGS; { unread,return receipt }
lpOriginator: PMapiRecipDesc; { Originator descriptor }
nRecipCount: ULONG; { Number of recipients }
lpRecips: PMapiRecipDesc; { Recipient descriptors }
nFileCount: ULONG; { # of file attachments }
lpFiles: PMapiFileDesc; { Attachment descriptors }
end;

MapiRecipDesc = record
ulReserved: ULONG; { Reserved for future use }
ulRecipClass: ULONG; { Recipient class }
{ MAPI_TO, MAPI_CC, MAPI_BCC, MAPI_ORIG }
lpszName: LPSTR; { Recipient name }
lpszAddress: LPSTR; { Recipient address (optional) }
ulEIDSize: ULONG; { Count in bytes of size of pEntryID }
lpEntryID: LPVOID; { System-specific recipient reference }
end;

Aber evtl. ist eine .EML-Datei doch die Lösung.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

AW: ReplyTo mit Standard-Mail-Client

  Alt 26. Jul 2023, 17:04
Hab nicht gesagt, dass es garnicht geht, sondern nicht wirklich "immer und überall und das auch noch zuverlässig".

Je nachdem, was für ein Mailprogramm und Windows vorliegt.

welche Windows-Version
was für ein Windows (Server, Home, Professional usw.)
Thunderbird
Windows Mail
Outlook mit 64-Bit in einem 64-Bit Windows
Outlook mit 32-Bit in einem 64-Bit Windows
Outlook mit 32-Bit in einem 32-Bit Windows
oder sonstwas

vor allem deutsche "vorinstallierte" Windowse gewisser OEM-Anbieter sind echt grauenhaft konfiguriert
$2B or not $2B

Geändert von himitsu (26. Jul 2023 um 17:07 Uhr)
  Mit Zitat antworten Zitat
NLan

Registriert seit: 19. Jul 2023
7 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: ReplyTo mit Standard-Mail-Client

  Alt 30. Jul 2023, 12:00
Hallo himitsu

ich habe jetzt mit TIdMessage erfolgreich eine EML-Datei erstellt (auch mit ReplyTo).
Aber wie bekommt man denn da ein Attachment (z.B. eine PDF-Datei) ran?
Vermutlich mit dem IdMessage.MessageParts - ich habe leider kein Beispiel gefunden, wie das geht.
Meine Versuche brachten immer einen "Abstrakten Fehler".
Hast du ein SAMPLE dafür?

Und wie erklärt man ShellExecute dass die EML-Datei nicht nur angezeigt wird, sondern man diese versenden möchte?
Bei mir erscheint der "SENDEN" Button nicht, weder im Windows-Mail noch im GroupWise-Mailclient.

Geändert von NLan (30. Jul 2023 um 12:31 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

AW: ReplyTo mit Standard-Mail-Client

  Alt 30. Jul 2023, 12:47
TIdAttachmentFile.Create(IdMsg.MessageParts, Attachments[idx]).ContentID := ...;
Delphi-Quellcode:
  IdMsg := TIdMessage.Create(nil);
  try
    IdMsg.Subject := Subject;
    for idx := 0 to Addresses.Count - 1 do
       IdMsg.Recipients.Add.Address := Addresses[idx];
    IdMsg.ContentType := 'multipart/mixed; charset=UTF-8;';
    SL := TStringList.Create;
    try
      SL.Add('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">');
      SL.Add('<meta http-equiv="Content-Type" content="text/html; charset="UTF-8" />');
      SL.Add('<html><head>');
      SL.Add(Format('<title>%s</title>', ['Title']));
      SL.Add('</head><body>');
      SL.Add('<div>' + Replace(BodyText, sLineBreak, '<br />', [rfReplaceAll, rfIgnoreCase]) + '</div>');
      SL.Add('</body></html>');
      with TIdText.Create(IdMsg.MessageParts, SL) do begin
        ContentType := 'text/html';
        CharSet := 'UTF-8';
      end;
      for idx := 0 to Length(Attachments) - 1 do
        with TIdAttachmentFile.Create(IdMsg.MessageParts, Attachments[idx]) do
          ContentID := Format('%d_attach_%s', [idx, ContentIdgenerate]);
    finally
      SL.Free;
    end;
    //Wichtig ist dabei einzig und allein der X-Header (damit es als eine neue, zu sendende EMail verarbeitet wird): X-Unset
    IdMsg.Headers.Add('X-Unsent: 1');
    IdMsg.SaveToFile(fileName);
  finally
    IdMsg.Free;
  end;
  ShellExecute(Self.Handle, nil, PChar(fileName), nil, nil, 0);
k.A. ob man die IDs selber generieren+zuweisen muß.
Kurzfassung des Codes vom Kollegen.
Ich hätte gehofft Indy macht das selber.
$2B or not $2B

Geändert von himitsu (30. Jul 2023 um 12:59 Uhr)
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
472 Beiträge
 
#9

AW: ReplyTo mit Standard-Mail-Client

  Alt 30. Jul 2023, 16:20
Aber wie bekommt man denn da ein Attachment (z.B. eine PDF-Datei) ran?
Eine Möglichkeit wäre:
Delphi-Quellcode:
var
  idMessage: TIdMessage;
  idMessageBuilder: TIdMessageBuilderHTML;
begin
  idMessage := TIdMessage.Create(Nil);
  try
    idMessage.Subject := 'Party invitation';
    idMessage.From.Text := 'Peter Pan <peter@pan.com>';
    idMessage.Recipients.Add.Text := 'Elizabeth Swann <elizabeth@swann.gb>';
    idMessage.CCList.Add.Text := 'Jack Sparrow <jack@sparrow.dm>';
    idMessageBuilder := TIdMessageBuilderHTML.Create;
    try
      idMessageBuilder.Html.Text := 'Let''s have a little bit of fun.';
      idMessageBuilder.Attachments.Add(MakePath([Executable.ProgramFilePath, 'InvitationDoc.pdf']));
      idMessageBuilder.FillMessage(idMessage);
    finally
      idMessageBuilder.Free;
    end;

    idMessage.SaveToFile(MakePath([Executable.ProgramFilePath, 'EMail.txt']));
  finally
    idMessage.Free;
  end;
end;
Bis bald...
Thomas

Geändert von mytbo (30. Jul 2023 um 16:26 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:12 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