![]() |
ReplyTo mit Standard-Mail-Client
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 |
AW: ReplyTo mit Standard-Mail-Client
Ein Vorschlag in C++:
![]() Keine Ahnung, ob das wirklich hilfreich sein könnte. |
AW: ReplyTo mit Standard-Mail-Client
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.
|
AW: ReplyTo mit Standard-Mail-Client
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. |
AW: ReplyTo mit Standard-Mail-Client
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. |
AW: ReplyTo mit Standard-Mail-Client
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 |
AW: ReplyTo mit Standard-Mail-Client
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. |
AW: ReplyTo mit Standard-Mail-Client
Delphi-Quellcode:
TIdAttachmentFile.Create(IdMsg.MessageParts, Attachments[idx]).ContentID := ...;
Delphi-Quellcode:
k.A. ob man die IDs selber generieren+zuweisen muß.
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); Kurzfassung des Codes vom Kollegen. Ich hätte gehofft Indy macht das selber. |
AW: ReplyTo mit Standard-Mail-Client
Zitat:
Delphi-Quellcode:
Bis bald...
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; Thomas |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz