AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Versenden einer Mail über MAPI mit CC
Thema durchsuchen
Ansicht
Themen-Optionen

Versenden einer Mail über MAPI mit CC

Ein Thema von little_budda · begonnen am 25. Jul 2007 · letzter Beitrag vom 15. Mai 2008
Antwort Antwort
Benutzerbild von little_budda
little_budda

Registriert seit: 5. Mai 2006
Ort: Velbert
246 Beiträge
 
Delphi 2006 Professional
 
#1

Versenden einer Mail über MAPI mit CC

  Alt 25. Jul 2007, 18:35
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.
      ulRecipClass := MAPI_CC; Hat aber nicht hingehauen.

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

Holger
Glück findet sich nicht im Code
Gefahren werden ist nur solange schön wie man selbst nicht lenken möchte ...
  Mit Zitat antworten Zitat
Benutzerbild von little_budda
little_budda

Registriert seit: 5. Mai 2006
Ort: Velbert
246 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Versenden einer Mail über MAPI mit CC

  Alt 27. Jul 2007, 06:43
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.

Holger
Glück findet sich nicht im Code
Gefahren werden ist nur solange schön wie man selbst nicht lenken möchte ...
  Mit Zitat antworten Zitat
Benutzerbild von chrisw
chrisw

Registriert seit: 11. Jan 2005
Ort: Schleswig
193 Beiträge
 
Delphi XE8 Professional
 
#3

Re: Versenden einer Mail über MAPI mit CC

  Alt 27. Jul 2007, 07:26
Multiple recipients normalerweise mit ("rec1@bbb.bb","rec2@aaa.aa") oder nur "rec1@bbb.bb","rec2@aaa.aa"


Musst Du mal probieren
Christian Wahl
me, myself and I, die lustigen Drei !!
  Mit Zitat antworten Zitat
Benutzerbild von little_budda
little_budda

Registriert seit: 5. Mai 2006
Ort: Velbert
246 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Versenden einer Mail über MAPI mit CC

  Alt 27. Jul 2007, 08:16
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.

Holger
Glück findet sich nicht im Code
Gefahren werden ist nur solange schön wie man selbst nicht lenken möchte ...
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: Versenden einer Mail über MAPI mit CC

  Alt 27. Jul 2007, 09:30
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
  Mit Zitat antworten Zitat
Benutzerbild von little_budda
little_budda

Registriert seit: 5. Mai 2006
Ort: Velbert
246 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Versenden einer Mail über MAPI mit CC

  Alt 27. Jul 2007, 10:07
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;
Holger
Glück findet sich nicht im Code
Gefahren werden ist nur solange schön wie man selbst nicht lenken möchte ...
  Mit Zitat antworten Zitat
tuxracer78

Registriert seit: 19. Jul 2004
Ort: Halle (Westf.)
31 Beiträge
 
Delphi XE5 Professional
 
#7

Re: Versenden einer Mail über MAPI mit CC

  Alt 13. Mai 2008, 11:51
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
Gregor
  Mit Zitat antworten Zitat
Benutzerbild von little_budda
little_budda

Registriert seit: 5. Mai 2006
Ort: Velbert
246 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Versenden einer Mail über MAPI mit CC

  Alt 13. Mai 2008, 12:55
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;
Holger
Glück findet sich nicht im Code
Gefahren werden ist nur solange schön wie man selbst nicht lenken möchte ...
  Mit Zitat antworten Zitat
tuxracer78

Registriert seit: 19. Jul 2004
Ort: Halle (Westf.)
31 Beiträge
 
Delphi XE5 Professional
 
#9

Re: Versenden einer Mail über MAPI mit CC

  Alt 15. Mai 2008, 17:23
Besten Dank,

funktioniert prima.

Liebe Grüße

Gregor
Gregor
  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 13:56 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