![]() |
Versenden einer Mail über MAPI mit CC
Hallo,
ich habe in der CodeLib folgenden Beitrag gefunden ![]() Den Code habe ich ein wenig geändert unm mehrere Attachments einzubinden. Klappt soweit auch wunderbar. Hier mein Code.
Delphi-Quellcode:
In den Aufruf habe ich auch schon die Adresse für das CC-Feld (Copy Con) eingebaut.
function SendFileMail(const FileName: TStrArray; const Subject, BodyText, RecipAdress, CopyConAdress: string): string;
var mMessage : TMapiMessage; mlpFiles : array of TMapiFileDesc; mRecips : TMapiRecipDesc; ix : integer; begin with mRecips do begin ulRecipClass := MAPI_TO; lpszName := PChar(RecipAdress); lpszAddress := PChar(RecipAdress); ulEIDSize := 0; lpEntryID := nil; end; SetLength(mlpFiles, Length(FileName)); for ix := 0 to High(mlpFiles) do begin with mlpFiles[ix] do begin flFlags := 0; nPosition := Cardinal(-1); lpszPathName := PChar(FileName[ix]); lpszFileName := nil; lpFileType := nil; end; end; with mMessage do begin lpszSubject := PChar(Subject); lpszNoteText := PChar(BodyText); lpszMessageType := nil; lpszDateReceived := nil; lpszConversationID := nil; flFlags := 0; lpOriginator := nil; nRecipCount := 1; lpRecips := @mRecips; nFileCount := Length(FileName); if (nFileCount > 0) then lpFiles := @mlpFiles[0] else lpFiles := nil; end; case MapiSendMail(0, 0, mMessage, MAPI_LOGON_UI or MAPI_NEW_SESSION, 0) of MAPI_E_AMBIGUOUS_RECIPIENT: Result := 'A recipient matched more than one of the recipient descriptor structures and MAPI_DIALOG was not set!'; MAPI_E_ATTACHMENT_NOT_FOUND: Result := 'The specified attachment was not found!'; MAPI_E_ATTACHMENT_OPEN_FAILURE: Result := 'The specified attachment could not be open!'; MAPI_E_BAD_RECIPTYPE: Result := 'The type of a recipient was not MAPI_TO, MAPI_CC, or MAPI_BCC!'; MAPI_E_FAILURE: Result := 'One or more unspecified errors occurred!'; MAPI_E_INSUFFICIENT_MEMORY: Result := 'There was insufficient memory to proceed!'; MAPI_E_LOGIN_FAILURE: Result := 'There was no default logon, and the user failed to log on successfully when the logon dialog box was displayed!'; MAPI_E_TEXT_TOO_LARGE: Result := 'The text in the message was too large to sent!'; MAPI_E_TOO_MANY_FILES: Result := 'There were too many file attachments!'; MAPI_E_TOO_MANY_RECIPIENTS: Result := 'There were too many recipients!'; MAPI_E_UNKNOWN_RECIPIENT: Result := 'A recipient did not appear in the address list!'; MAPI_E_USER_ABORT: Result := 'The user canceled one of the dialog boxes!'; end; end; Wie sage ich der Function denn das sie die Mail auch an einen zweiten Empfänger schicken soll. Probiert habe ich u.a.
Delphi-Quellcode:
Hat aber nicht hingehauen.
ulRecipClass := MAPI_CC;
Ich wäre sehr dankbar für eine Idee. :gruebel: |
Re: Versenden einer Mail über MAPI mit CC
Hallo,
ich versende die Mail momentan einfach zweimal aber das ist ja nicht Sinn der Sache. Unterstüzt der Mapi Dienst vielleicht das senden an einen zweiten Empfänger nicht? Ich habe auch mal versucht "empfaenger1@mail.de;empfaenger2@mail.de" als Empfänger einzugeben aber das akzeptiert mein Mail Client nicht. :gruebel: |
Re: Versenden einer Mail über MAPI mit CC
Multiple recipients normalerweise mit ("rec1@bbb.bb","rec2@aaa.aa") oder nur "rec1@bbb.bb","rec2@aaa.aa"
Musst Du mal probieren |
Re: Versenden einer Mail über MAPI mit CC
Hallo,
beide Varianten lehnt mein Clien ab mit dem Kommentar "Empfänger unbekannt". Aber ich möchte ja auch eigendlich einen Eintrag im CC haben. :gruebel: |
Re: Versenden einer Mail über MAPI mit CC
Hallo Holger,
der von dir verwendete Code verarbeitet nur einen einzigen Empfänger. Damit mehrere Empfänger verarbeitet werden, musst du ein Übergabeformat vereinbaren und ein Array of TMapiRecipDesc aufbauen. Hier ein Thread zum gleichen Problem: ![]() Für eine andere Klassifikation der Empfänger kannst du einfach den Wert MAPI_TO nach Bedarf durch MAPI_CC oder MAPI_BCC ersetzen. Grüße vom marabu |
Re: Versenden einer Mail über MAPI mit CC
Danke.
Das mit dem Array war ne klasse Idee. Klappt jetzt. Hier der Code:
Delphi-Quellcode:
:-D
function SendFileMail(const FileName: TStrArray; const Subject, BodyText, RecipAdress, CopyConAdress: string): string;
var mMessage : TMapiMessage; mlpFiles : array of TMapiFileDesc; mRecips : array of TMapiRecipDesc; ix : integer; begin SetLength(mRecips, 2); with mRecips[0] do begin ulRecipClass := MAPI_TO; lpszName := PChar(RecipAdress); lpszAddress := PChar(RecipAdress); ulEIDSize := 0; lpEntryID := nil; end; with mRecips[1] do begin ulRecipClass := MAPI_CC; lpszName := PChar(CopyConAdress); lpszAddress := PChar(CopyConAdress); ulEIDSize := 0; lpEntryID := nil; end; SetLength(mlpFiles, Length(FileName)); for ix := 0 to High(mlpFiles) do begin with mlpFiles[ix] do begin flFlags := 0; nPosition := Cardinal(-1); lpszPathName := PChar(FileName[ix]); lpszFileName := nil; lpFileType := nil; end; end; with mMessage do begin lpszSubject := PChar(Subject); lpszNoteText := PChar(BodyText); lpszMessageType := nil; lpszDateReceived := nil; lpszConversationID := nil; flFlags := 0; lpOriginator := nil; nRecipCount := 2; lpRecips := @mRecips[0]; nFileCount := Length(FileName); if (nFileCount > 0) then lpFiles := @mlpFiles[0] else lpFiles := nil; end; case MapiSendMail(0, 0, mMessage, MAPI_LOGON_UI or MAPI_NEW_SESSION, 0) of MAPI_E_AMBIGUOUS_RECIPIENT: Result := 'A recipient matched more than one of the recipient descriptor structures and MAPI_DIALOG was not set!'; MAPI_E_ATTACHMENT_NOT_FOUND: Result := 'The specified attachment was not found!'; MAPI_E_ATTACHMENT_OPEN_FAILURE: Result := 'The specified attachment could not be open!'; MAPI_E_BAD_RECIPTYPE: Result := 'The type of a recipient was not MAPI_TO, MAPI_CC, or MAPI_BCC!'; MAPI_E_FAILURE: Result := 'One or more unspecified errors occurred!'; MAPI_E_INSUFFICIENT_MEMORY: Result := 'There was insufficient memory to proceed!'; MAPI_E_LOGIN_FAILURE: Result := 'There was no default logon, and the user failed to log on successfully when the logon dialog box was displayed!'; MAPI_E_TEXT_TOO_LARGE: Result := 'The text in the message was too large to sent!'; MAPI_E_TOO_MANY_FILES: Result := 'There were too many file attachments!'; MAPI_E_TOO_MANY_RECIPIENTS: Result := 'There were too many recipients!'; MAPI_E_UNKNOWN_RECIPIENT: Result := 'A recipient did not appear in the address list!'; MAPI_E_USER_ABORT: Result := 'The user canceled one of the dialog boxes!'; end; end; |
Re: Versenden einer Mail über MAPI mit CC
Hallo,
die Ursprungsversion der MAPI-Funktion hatte ich schon ans Laufen gebracht. Ich stehe nur momentan insofern auf dem Schlauch, dass ich nicht weiß, wie ich bein Aufruf der modifizierten Funktion die Arrays übergeben soll (z.B. an der Stelle "SendFileMail(const FileName: TStrArray;"). Wie sind denn da Syntax und Ablauf? Beste Grüße Gregor |
Re: Versenden einer Mail über MAPI mit CC
Hallo,
hier der noch der aufrufende Code
Delphi-Quellcode:
procedure Tfrm_sendError.btn_send_error_mailClick(Sender: TObject);
var sMailResultCode: String; sendFiles : TStrArray; iFileCounter, ix : integer; sMailHeadLine, sMailBody, sMailTo, sMailCc : string; begin // target_adr := ''; if (CoBoxSupporter.itemindex >= 0) then begin FileListBoxLogFiles.Directory := lb_variantenpfad.caption; iFileCounter := FileListBoxLogFiles.Items.Count; setLength(sendFiles, iFileCounter); for ix := 0 to iFileCounter - 1 do begin // Zuordnung der Dateien sendFiles[ix] := lb_variantenpfad.caption + '\' + FileListBoxLogFiles.Items[ix]; end; sMailHeadLine := 'Meldung einer Fehlfunktion im Xilinx Tool'; sMailBody := ''; sMailBody := sMailBody + 'Hallo Support, ' + chr(10); sMailBody := sMailBody + 'ich möchte eine Fehlfunktion im Xilinx Tool melden.' + chr(10); sMailBody := sMailBody + ' ' + chr(10); sMailBody := sMailBody + 'Ich verwende : ' + frm_versionsuebersicht.StatusBar1.panels[2].text + chr(10); sMailBody := sMailBody + 'Mein Betriebsystem : ' + GetWinVersion + chr(10); sMailBody := sMailBody + ' ' + chr(10); sMailBody := sMailBody + 'Der Fehler stellt sich dar wie folgt:' + chr(10); // Feedback des Anwenders einbauen for ix := 0 to MemoErrDescription.Lines.count - 1 do sMailBody := sMailBody + MemoErrDescription.Lines[ix] + chr(10); sMailBody := sMailBody + ' ' + chr(10); sMailBody := sMailBody + 'Die aktuellen Log-Dateien finden sich im Anhang.' + chr(10); sMailBody := sMailBody + ' ' + chr(10); sMailBody := sMailBody + 'Ich bitte um Information wenn und in welcher Programmversion der Fehler behoben ist.' + chr(10); sMailBody := sMailBody + 'Danke.' + chr(10); sMailBody := sMailBody + ' ' + chr(10); sMailTo := 'user1@email.com'; sMailCc := 'user2@email.com'; sMailResultCode := SendFileMail(sendFiles, sMailHeadLine, sMailBody, sMailTo, sMailCc); if Length(sMailResultCode) > 0 then begin MessageDlg('Die Datei konnte nicht per E-Mail versendet werden!' + chr(10) + chr(10) + 'Meldung:' + chr(10) + sMailResultCode, mtError, [mbOK], 0); end else begin MessageDlg('Ihre Fehlermeldung wurde verschickt.', mtInformation, [mbOK], 0); end; end else MessageDlg('Sie müssen einen Supportpartner auswählen.', mtWarning, [mbOk], 0); end; |
Re: Versenden einer Mail über MAPI mit CC
Besten Dank,
funktioniert prima. Liebe Grüße Gregor |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:36 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