AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi E-Mail mit Anhang im E-Mailclient
Thema durchsuchen
Ansicht
Themen-Optionen

E-Mail mit Anhang im E-Mailclient

Ein Thema von Opa Knack · begonnen am 8. Dez 2009 · letzter Beitrag vom 24. Dez 2009
Antwort Antwort
Opa Knack

Registriert seit: 28. Dez 2004
Ort: Köln
166 Beiträge
 
#1

E-Mail mit Anhang im E-Mailclient

  Alt 8. Dez 2009, 02:18
Hallo,

mit diesem Thread habe ich herausgefunden, wie ich eine E-Mail mit Anhang versenden kann (was funktioniert...).

Mein Ansinnen ist nun, die E-Mail nicht direkt zu versenden, sondern statt dessen im E-Mailclient zu öffnen. Hintergrund dieses Wunsches ist, dass bei obigem Lösungsansatz auch dann versucht wird, die Mail zu verschicken, wenn man gerade offline ist. Ich fände es nun praktisch, wenn in diesem Fall einfach der entsprechende Eintrag im Postausgang gespeichert würde und somit später versandt werden könnte. Zusätzlicher Nutzen wäre dabei, dass der Anwender noch nachvollziehbarer präsentiert bekommt, was gerade passiert, und somit nicht der irrigen Vermutung anheim fiele, dass sensible Daten ohne sein Wissen übermittelt würden.

Hat jemand eine Idee, wie ich das bewerkstelligen kann?

Danke und Gruß
Opa
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: E-Mail mit Anhang im E-Mailclient

  Alt 8. Dez 2009, 18:05
Neben der Funktion MAPISendMail gibt es auch die Funktion MAPISaveMail, die eigentlich genau die gleichen Übergabeparameter haben müsste.
MAPISaveMail speichert die EMail lokal im Client (kann später manuell gesendet werden).
Andreas
  Mit Zitat antworten Zitat
Opa Knack

Registriert seit: 28. Dez 2004
Ort: Köln
166 Beiträge
 
#3

Re: E-Mail mit Anhang im E-Mailclient

  Alt 8. Dez 2009, 23:04
Hallo

und Danke für die Rückmeldung. Ich habe jetzt ein paar Stunden gesucht, aber nirgendwo eine nachvollziehbare Delphi-Umsetzung von MAPISaveMail gefunden. Leider klappt's mit den Parametern nicht, es wird noch ein Parameter verlangt, den ich persönlich nicht so ganz einordnen kann (LPTSTR lpszMessageID). Ich habe die Parameter wie zuvor übergeben und einfach durch '' bzw. durch nil ersetzt (nun ja, man kann's ja mal versuchen), aber leider hat beides nicht geklappt.

Hat jemand einen Tipp, welcher Parameter übergeben werden muss bzw. (was natürlich noch besser wäre) hat jemand ein Beispiel, wie MAPISaveMail umgesetzt wird?

Danke und Gruß
Opa
  Mit Zitat antworten Zitat
Opa Knack

Registriert seit: 28. Dez 2004
Ort: Köln
166 Beiträge
 
#4

Re: E-Mail mit Anhang im E-Mailclient

  Alt 17. Dez 2009, 00:13
Entschuldigung für's pushen, aber ich habe immer noch keine Lösung gefunden ...

Noch mal kurz zur Zusammenfassung: Ich möchte eine E-Mail mit Attachment so zum E-Mailclient bringen, dass er sie entweder im Postausgang speichert, wenn der Rechner gerade offline ist, oder aber dass er sie öffnet (also quasi das, was der Mailto-Link im Browser macht, nur dass hier noch ein Attachment dazukommt).

Hat jemand eine Idee?

Danke und Gruß
Opa
  Mit Zitat antworten Zitat
Ralf Meyer

Registriert seit: 24. Mär 2008
36 Beiträge
 
#5

Re: E-Mail mit Anhang im E-Mailclient

  Alt 19. Dez 2009, 11:36
Hallo Opa,

Hast du mal versucht in der SendFileMail Methode den Aufruf der Funktion "Mapisendmail" um die Option MAPI_Dialog zu erweitern?

case MapiSendMail(0, 0, mMessage, MAPI_DIALOG or MAPI_LOGON_UI or MAPI_NEW_SESSION, 0) of Gruß
Ralf
  Mit Zitat antworten Zitat
devidespe

Registriert seit: 7. Sep 2006
Ort: Berlin
434 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: E-Mail mit Anhang im E-Mailclient

  Alt 23. Dez 2009, 10:33
Ich habe dieses Beispiel auch ausprobiert und grundsätzlich läuft es weniger fehleranfällig als die JvMail-Komponente der JVCL.

Allerdings erzeugt die Verwendung des "MAPI_DIALOG"-Attributes die Fehlermeldung:

---------------------------
Fehler
---------------------------
Die Datei konnte nicht per E-Mail versendet werden!

Meldung:
One or more unspecified errors occurred!
---------------------------

Das ist insofern schade, da ich die EMail noch nicht abschicken möchte, sondern der Anwender dies bestätigen muss.
Devid
57 65 72 20 6C 65 73 65 6E 20 6B 61 6E 6E 2C 20 69 73 74 20 6B 6C 61 72 20 69 6D 20 56 6F 72 74 65 69 6C 21
  Mit Zitat antworten Zitat
Ralf Meyer

Registriert seit: 24. Mär 2008
36 Beiträge
 
#7

Re: E-Mail mit Anhang im E-Mailclient

  Alt 24. Dez 2009, 22:13
Hi,

hier mein Code zum versenden:
Delphi-Quellcode:
function SendFileMail(const FileName: TFileName; const Subject, BodyText, RecipAdress: String): String;
var
  mMessage: TMapiMessage;
  mlpFiles: TMapiFileDesc;
  mRecips: TMapiRecipDesc;
begin
  if not FileExists(FileName) then
  begin
    Result := 'File "' + FileName + '" not found!';
    Exit;
  end;

  with mRecips do
  begin
    ulRecipClass := MAPI_TO;
    lpszName := PChar(RecipAdress);
    lpszAddress := PChar(RecipAdress);
    ulEIDSize := 0;
    lpEntryID := nil;
  end;

  with mlpFiles do
  begin
    flFlags := 0;
    nPosition := 0;
    lpszPathName := PChar(FileName);
    lpszFileName := nil;
    lpFileType := nil;
  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 := 0;
    lpFiles := @mlpFiles;
  end;

  case MapiSendMail(0, 0, mMessage, MAPI_DIALOG or 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;

Function Mail1( Const cTo, cSubject, cMessage : String ) : Boolean ;
var
  S: String;
Begin
  S := SendFileMail( 'C:\test.txt', cSubject, cMessage, cTo ) ;

  if Length(S) > 0 then
  begin
    MessageDlg('Die Datei konnte nicht per E-Mail versendet werden!' + #10#13#10#13 +
      'Meldung:' + #10#13 + S, mtError, [mbOK], 0);
  end;

end;
Den Fehler von devidespe bekomme ich mit diesem Code nicht. Das Versenden klappt einwandfrei.

Ich habe jedoch ein anderes Problem.
Der E-Mail Typ wird auf auf die Ziel E-Mail-Adresse gesetzt und nicht auf SMTP wie es sein müßte. Somit kommt keine Mail an.

Gruß
Ralf
  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 19:34 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