![]() |
über Outlook E-Mail senden
Hallo
Moechte eine E-Mail ueber Outlook (2002, XP) senden. Alles funktioniert ausser dass der Absender leer bleibt, obwowhl dem MAPIMessage.lpOriginator der Absender zugewiesen wird. Hat jemand was am Code nicht stimmt (oder liegt's am Outlook)?
Delphi-Quellcode:
uses
MAPI;
Delphi-Quellcode:
function SendEMail(Handle: THandle; Mail: TStrings): Cardinal;
type TAttachAccessArray = array[0..0] of TMapiFileDesc; PAttachAccessArray = ^TAttachAccessArray; var MapiMessage: TMapiMessage; Receip: TMapiRecipDesc; Origin: TMapiRecipDesc; Attachments: PAttachAccessArray; AttachCount: Integer; i1: integer; FileName: string; dwRet: Cardinal; MAPI_Session: Cardinal; WndList: Pointer; begin // begin a Simple MAPI session dwRet := MapiLogon(Handle, PChar(''), PChar(''), MAPI_LOGON_UI or MAPI_NEW_SESSION, 0, @MAPI_Session); if (dwRet <> SUCCESS_SUCCESS) then begin MessageBox(Handle, PChar('Error while trying to send email'), PChar('Error'), MB_ICONERROR or MB_OK); end else begin FillChar(MapiMessage, SizeOf(MapiMessage), #0); Attachments := nil; // Fill Receip property FillChar(Receip, SizeOf(Receip), #0); if Mail.Values['to'] <> '' then begin Receip.ulReserved := 0; Receip.ulRecipClass := MAPI_TO; Receip.lpszName := StrNew(PChar(Mail.Values['to'])); Receip.lpszAddress := StrNew(PChar('SMTP:' + Mail.Values['to'])); Receip.ulEIDSize := 0; MapiMessage.nRecipCount := 1; MapiMessage.lpRecips := @Receip; end; // Fill Origin(ator) property FillChar(Origin, SizeOf(Origin), #0); if Mail.Values['from'] <> '' then begin Origin.ulReserved := 0; Origin.ulRecipClass := MAPI_ORIG; Origin.lpszName := StrNew(PChar(Mail.Values['from'])); Origin.lpszAddress := StrNew(PChar('SMTP:' + Mail.Values['from'])); Origin.ulEIDSize := 0; Origin.lpEntryID := nil; MAPIMessage.lpOriginator := @Origin; end; AttachCount := 0; for i1 := 0 to MaxInt do begin if Mail.Values['attachment' + IntToStr(i1)] = '' then break; Inc(AttachCount); end; if AttachCount > 0 then begin GetMem(Attachments, SizeOf(TMapiFileDesc) * AttachCount); for i1 := 0 to AttachCount - 1 do begin FileName := Mail.Values['attachment' + IntToStr(i1)]; Attachments[i1].ulReserved := 0; Attachments[i1].flFlags := 0; Attachments[i1].nPosition := ULONG($FFFFFFFF); Attachments[i1].lpszPathName := StrNew(PChar(FileName)); Attachments[i1].lpszFileName := StrNew(PChar(ExtractFileName(FileName))); Attachments[i1].lpFileType := nil; end; MapiMessage.nFileCount := AttachCount; MapiMessage.lpFiles := @Attachments^; end; if Mail.Values['subject'] <> '' then MapiMessage.lpszSubject := StrNew(PChar(Mail.Values['subject'])); if Mail.Values['body'] <> '' then MapiMessage.lpszNoteText := StrNew(PChar(Mail.Values['body'])); WndList := DisableTaskWindows(0); try Result := MapiSendMail(MAPI_Session, Handle, MapiMessage, MAPI_DIALOG, 0); finally EnableTaskWindows(WndList); end; for i1 := 0 to AttachCount - 1 do begin StrDispose(Attachments[i1].lpszPathName); StrDispose(Attachments[i1].lpszFileName); end; if Assigned(MapiMessage.lpszSubject) then StrDispose(MapiMessage.lpszSubject); if Assigned(MapiMessage.lpszNoteText) then StrDispose(MapiMessage.lpszNoteText); if Assigned(Receip.lpszAddress) then StrDispose(Receip.lpszAddress); if Assigned(Receip.lpszName) then StrDispose(Receip.lpszName); if Assigned(Origin.lpszAddress) then StrDispose(Origin.lpszAddress); if Assigned(Origin.lpszName) then StrDispose(Origin.lpszName); MapiLogOff(MAPI_Session, Handle, 0, 0); end; end;
Delphi-Quellcode:
procedure TfrmMain.btnSendClick(Sender: TObject);
var mail: TStringList; ssubject: string; begin mail := TStringList.Create; try mail.values['from'] := 'from@xzy.net'; mail.values['to'] := 'to@xzy.net'; mail.values['subject'] := 'subject'; mail.values['body'] := 'body'; try sendEMail(Application.Handle, mail); except end; finally mail.Free; end; end; |
Re: über Outlook E-Mail senden
*PUSH*
|
Re: über Outlook E-Mail senden
*PUSH*
|
Re: über Outlook E-Mail senden
Hai Toms,
in meinem Sedeformular von Outlook bleibt das Feld "Von:" auch lehr. Aber wenn ich die Mail absende steht als Absender immer der Standardabsender von Outlook. Eventuell kann man das überhaupt nicht umstellen? |
Re: über Outlook E-Mail senden
Manuell kann ich schon den Absender eingeben, wenn ich mehrere E-Mail Konten eingerichtet habe. Nur per Code nicht...
|
Re: über Outlook E-Mail senden
*PUSH* ?
|
Re: über Outlook E-Mail senden
Hai toms,
ein Lösung habe ich leider auch nocht nicht. Interessant ist aber das auch die Felder für BCC/CC Leerbleiben wenn ich in deinem Code die entsprechende ergänzung dafür einfüge. Ich werde auch weiter suchen. |
Re: über Outlook E-Mail senden
In der Code-Lib gibt es ein Beispiel zu
![]() |
Re: über Outlook E-Mail senden
Zitat:
mit dem Code von toms kann man ja eine Mail versenden. Das Problem ist das der Sender nicht berücksichtigt wird (Origin.ulRecipClass := MAPI_ORIG;) |
Re: über Outlook E-Mail senden
Nun, ich dachte man könnte die Codes mal vergelichen bzw. den aus der Code-Lib mal ausprobieren, ob damit alles funktioniert und dann mal gucken worin sie sich unterscheiden.
|
Re: über Outlook E-Mail senden
Der Code in der Code-Lib ist eine sehr vereinfachte Version meines Codes.
Es geht wirklich nur um Zitat:
|
Re: über Outlook E-Mail senden
Hallo,
ich nutze die aufgeführte Funktion. Leider wird wohl das Arbeitsverzeichnis verbogen. Ich finde leider die Stelle nicht 1.) wo dies passiert 2.) wie ich dies verhindern / es wieder rückgängig machen kann. |
Re: über Outlook E-Mail senden
Zitat:
Zitat:
|
Re: über Outlook E-Mail senden
Hallo,
diese Vermutung hatte ich auch schon, allerdings wird diese nur relevant, wenn ich ich attatchments habe. Nach dem Aufruf der sendMail bin ich im tempverzeichnis c:\programme\gemeinsameDateien\System\Mapi\1031. vielleicht hilft diese Info, wird wohl irgendwie durch die MapiSendMail gesetzt. Ich suche noch, wie ich wieder in den Urzustand zurück kommen kann. |
Re: über Outlook E-Mail senden
Zitat:
|
Re: über Outlook E-Mail senden
Ursache gefunden.
die MapiLogon ändert das Verzeichnis. In den Dokumenten/Beschreibungen wird dies nicht erwähnt, bzw. aufgezeigt, wie man dies verhindern kann Also bleibt mir nur der weg das aktuelle Verzeichnis, wie empfohlen, vorher zu sichern und nach Aufruf wieder zurück zu setzen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:03 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