Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Versenden einer Mail über MAPI mit CC (https://www.delphipraxis.net/96508-versenden-einer-mail-ueber-mapi-mit-cc.html)

little_budda 25. Jul 2007 17:35


Versenden einer Mail über MAPI mit CC
 
Hallo,

ich habe in der CodeLib folgenden Beitrag gefunden
eMail über Mapi versenden
Den Code habe ich ein wenig geändert unm mehrere Attachments einzubinden.
Klappt soweit auch wunderbar.
Hier mein Code.
Delphi-Quellcode:
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;
In den Aufruf habe ich auch schon die Adresse für das CC-Feld (Copy Con) eingebaut.
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:
      ulRecipClass := MAPI_CC;
Hat aber nicht hingehauen.

Ich wäre sehr dankbar für eine Idee.

:gruebel:

little_budda 27. Jul 2007 05:43

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:

chrisw 27. Jul 2007 06:26

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

little_budda 27. Jul 2007 07:16

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:

marabu 27. Jul 2007 08:30

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: klick

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

little_budda 27. Jul 2007 09:07

Re: Versenden einer Mail über MAPI mit CC
 
Danke.
Das mit dem Array war ne klasse Idee. Klappt jetzt.
Hier der Code:
Delphi-Quellcode:
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;
:-D

tuxracer78 13. Mai 2008 10:51

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

little_budda 13. Mai 2008 11:55

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;

tuxracer78 15. Mai 2008 16:23

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