Autor Beitrag
lambruco
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 100

Win 2000/2000 Server/XP
D6 Prof.
BeitragVerfasst: Mi 28.05.03 13:23 
hallo forum,

ich soll unter delphi die mapi32.dll direkt einbinden und benutzen um
damit mails zu versenden.
es gibt sicherlich einfachere methoden zb. über MSMAPI_TLB, aber
cheffe möchte, dass ich direkt die besagte .dll benutze.
jetzt meine probleme:

- wo finde ich eine dokumentation über die mapi32.dll (msdn gibt nicht viel her) :shock:

- hat jemand einen Lösungsvorschlag :idea:

- wieso bekommen praktikanten immer beschissene "arbeits- beschaffungsaufgaben" :?:

ziel ist die erstellung einer komponente, mit der man möglichst auf jedem
windows system eine email versenden kann, ohne zusätzliche konfigurationen oder installationen.

bin für alle beiträge (und aufmunterungen) dankbar

lars
focus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 187

XP, 2k, 98, Me
D6 Prof
BeitragVerfasst: Mi 28.05.03 13:35 
hi
zunächst besorgst du dir die deklarationen der funktionen die du benutzen möchtest(header) schaust dir evtl vorher noch an was für funktionen die dll zu bieten hat und suchst die deklaration (wg. übergabeparameter) raus..
dann musst du die dll (dynamisch) laden und dir die einsprungadressen holen irgendwas vergessen?! ich glaube nicht...
gruss
michael
focus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 187

XP, 2k, 98, Me
D6 Prof
BeitragVerfasst: Mi 28.05.03 13:52 
oder du machst es dir einfach ;P
ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
unit MapiMail;

//========================================================
   interface
//========================================================

type
  TMapiMail=class
  private
  public
    Procedure SendMapiMail(HWnd: THandle;
                           Subject, Text, FromName, FromAdress,
                           ToName, ToAdress, AttachedFileName, DisplayFileName: string;
                           Dialog: Boolean);
  end;

//========================================================
   implementation
//========================================================
uses Mapi, Dialogs;

Procedure TMapiMail.SendMapiMail(HWnd: THandle;
                                   Subject, Text, FromName, FromAdress,
                                   ToName, ToAdress, AttachedFileName, DisplayFileName: string;
                                   Dialog: Boolean);
var
  MMessage    : TMapiMessage;
  MError      : Cardinal;
  Empfaenger  : Array[0..1] of TMapiRecipDesc;
  Absender    : TMapiRecipDesc;
  Datei       : Array[0..1] of TMapiFileDesc;
Begin
  with MMessage do
  begin
    ulReserved := 0;
    lpszSubject := PChar(Subject);      // subject
    lpszNoteText := PChar(Text);        // text
    lpszMessageType := nil;
    lpszDateReceived := nil;
    lpszConversationID := nil;
    flFlags := 0;
    Absender.ulReserved:=0;             // sender
    Absender.ulRecipClass:=MAPI_ORIG;
    Absender.lpszName:= PChar(FromName);
    Absender.lpszAddress:= PChar(FromAdress);
    Absender.ulEIDSize:=0;
    Absender.lpEntryID:=nil;
    lpOriginator := @Absender;
    nRecipCount := 1;
    Empfaenger[0].ulReserved:=0;        // receiver
    Empfaenger[0].ulRecipClass:=MAPI_TO;
    Empfaenger[0].lpszName:= PChar(ToName);
    Empfaenger[0].lpszAddress:= PChar(ToAdress);
    Empfaenger[0].ulEIDSize:=0;
    Empfaenger[0].lpEntryID:=nil;
    lpRecips := @Empfaenger;
    nFileCount := 1;                    // max attachment count
    Datei[0].lpszPathName:= PChar(AttachedFilename); // filename on hd
    Datei[0].lpszFileName:= PChar(DisplayFilename);  // shown filename
    Datei[0].ulReserved:=0;
    Datei[0].flFlags:=0;
    Datei[0].nPosition:=Cardinal(-1);
    Datei[0].lpFileType:=nil;
    lpFiles := @Datei;
  end;
  if Dialog then MError := MapiSendMail(0, HWnd, MMessage, MAPI_DIALOG or MAPI_LOGON_UI, 0) // send!
  else MapiSendMail(0, HWnd, MMessage, 0, 0);

  case MError of     // see mapi.pas for errorcodes
    MAPI_E_FAILURE:                 MessageDlg('Unknown error!',mterror,[mbok],0);
    MAPI_E_TEXT_TOO_LARGE:          MessageDlg('Message to long!',mterror,[mbok],0);
    MAPI_E_INSUFFICIENT_MEMORY:     MessageDlg('Not enough space!',mterror,[mbok],0);
    MAPI_E_TOO_MANY_RECIPIENTS:     MessageDlg('To many receiver set!',mterror,[mbok],0);
    MAPI_E_TOO_MANY_FILES:          MessageDlg('To many atachments set!',mterror,[mbok],0);
    MAPI_E_ATTACHMENT_NOT_FOUND:    MessageDlg('Attached file not found',mterror,[mbok],0);
    MAPI_E_ATTACHMENT_OPEN_FAILURE: MessageDlg('Could not open atached files!',mterror,[mbok],0);
    MAPI_E_LOGIN_FAILURE:           MessageDlg('Could not log into mail program!',mterror,[mbok],0);
    MAPI_E_BAD_RECIPTYPE:           MessageDlg('Receiver-typ not MAPI_TO, MAPI_CC or MAPI_BCC!',mterror,[mbok],0);
    MAPI_E_USER_ABORT:              MessageDlg('User canceled transmission or MAPI not installed!',mterror,[mbok],0);
    MAPI_E_AMBIGUOUS_RECIPIENT:     MessageDlg('Receiver not specific enough! (Only possible if receivers adress not set)',mterror,[mbok],0);
    MAPI_E_UNKNOWN_RECIPIENT:       MessageDlg('Could not find adress in Adressbook! (Only possible if receivers adress not set)',mterror,[mbok],0);

    SUCCESS_SUCCESS:                MessageDlg('OK',mtinformation,[mbok],0);
  end; 
End;

end.


der code tut bei mir exact so wie er oben steht einwandtfrei ... nur einbinden und funktionen benutzen

wenn du dennoch an deiner anfänglichen idee festhälst empfehle ich dir für die exports der dll ein tool von luckie namens dllexports
zu finden hier: www.delphi-forum.de/...highlight=dllexports
und die funktionsdeklarationen unter:
msdn.microsoft.com/l...in.h_header_file.asp

gruss
michael


Zuletzt bearbeitet von focus am Mi 28.05.03 15:14, insgesamt 1-mal bearbeitet
lambruco Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 100

Win 2000/2000 Server/XP
D6 Prof.
BeitragVerfasst: Mi 28.05.03 14:58 
Titel: Danke, Danke !!
Vielen Dank für die schnelle Hilfe, der Quellcode läuft wunderbar, nur
bei dem Cardinal Wert weiss ich noch nicht, was ich die alles eintragen kann.
Mal schauen, ob es Cheffe reicht, ansonsten werde ich wohl selber
programmieren müssen.

lars