首页  编辑  

MS MAPI COM接口

Tags: /超级猛料/COM、ActiveX,DDE/   Date Created:
附件中是MSMAPI32.OCX的License文件,复制到系统目录,然后导入REG文件即可。
利用MAPI COM来发送邮件,这下支持附件了!
利用MAPI COM对象来法送邮件
调用方法: SendMail("Kingron@163.net")
翻译成Delphi的也可以阿,这样支持附件了。:),ShellExecute不能支持附件,如果没有Outlook只有Express的话,现在可以让Outlook Express也支持附件了。
Public Sub SendMail(Address)
 Dim MS, MM
 
 On Error Resume Next
 Set MS = CreateObject("MSMAPI.MAPISession")
 Set MM = CreateObject("MSMAPI.MAPIMessages")
 
 MS.DownLoadMail = False
 MS.NewSession = False
 MS.LogonUI = True
 MS.SignOn
 MM.SessionID = MS.SessionID
 
 MM.Compose
 
 MM.RecipIndex = 0
 MM.RecipAddress = Address
 MM.MsgSubject = ActiveDocument.Name
 
 ActiveDocument.Save
 FName = "C:\" + ActiveDocument.Name
 CopyFile ActiveDocument.FullName, FName, False
 
 MM.AttachmentIndex = 0
 MM.AttachmentPathName = FName
 MM.Send True
 Kill FName
 MS.SignOff
End Sub
procedure SendMail(Subject, Body, RecvAddress: string; Attachs: array of string);
var
 MM, MS: Variant;
 i: integer;
begin
 MS := CreateOleObject('MSMAPI.MAPISession');
 MM := CreateOleObject('MSMAPI.MAPIMessages');
 MS.DownLoadMail := False;
 MS.NewSession := False;
 MS.LogonUI := True;
 MS.SignOn;
 MM.SessionID := MS.SessionID;
 MM.Compose;
 MM.RecipIndex := 0;
 MM.RecipAddress := RecvAddress;
 MM.MsgSubject := Subject;
 MM.MsgNoteText := Body;
 for i := Low(Attachs) to High(Attachs) do
 begin
   MM.AttachmentIndex := i;
   MM.AttachmentPathName := Attachs[i];
 end;
 MM.Send(True);
 MS.SignOff;
 VarClear(MS);
 VarClear(MM);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
 SendMail('Subject', 'Body'#13#10'Second', 'abc@163.net', ['F:\Bin\1.exe', 'F:\Bin\2.log']);
end;

上面的代码有国外的网友反映无法运行,后又有网友贴出下面的代码,说可以解决,没有验证:
uses Mapi;
function SendMail(const Subject, Body, FileName,
SenderName, SenderEMail,
RecipientName, RecipientEMail: string): Integer;
var
Message: TMapiMessage;
lpSender, lpRecipient: TMapiRecipDesc;
FileAttach: TMapiFileDesc;
SM: TFNMapiSendMail;
MAPIModule: HModule;
begin
FillChar(Message, SizeOf(Message), 0);
with Message do
begin
if (Subject <> '') then
lpszSubject := PChar(Subject);
if (Body <> '') then
lpszNoteText := PChar(Body);
if (SenderEmail <> '') then
begin
lpSender.ulRecipClass := MAPI_ORIG;
if (SenderName = '') then
lpSender.lpszName := PChar(SenderEMail)
else
lpSender.lpszName := PChar(SenderName);
lpSender.lpszAddress := PChar(SenderEmail);
lpSender.ulReserved := 0;
lpSender.ulEIDSize := 0;
lpSender.lpEntryID := nil;
lpOriginator := @lpSender;
end;
if (RecipientEmail <> '') then
begin
lpRecipient.ulRecipClass := MAPI_TO;
if (RecipientName = '') then
lpRecipient.lpszName := PChar(RecipientEMail)
else
lpRecipient.lpszName := PChar(RecipientName);
lpRecipient.lpszAddress := PChar(RecipientEmail);
lpRecipient.ulReserved := 0;
lpRecipient.ulEIDSize := 0;
lpRecipient.lpEntryID := nil;
nRecipCount := 1;
lpRecips := @lpRecipient;
end
else
lpRecips := nil;
if (FileName = '') then
begin
nFileCount := 0;
lpFiles := nil;
end
else
begin
FillChar(FileAttach, SizeOf(FileAttach), 0);
FileAttach.nPosition := Cardinal($FFFFFFFF);
FileAttach.lpszPathName := PChar(FileName);
nFileCount := 1;
lpFiles := @FileAttach;
end;
end;
MAPIModule := LoadLibrary(PChar(MAPIDLL));
if MAPIModule = 0 then
Result := -1
else
try
@SM := GetProcAddress(MAPIModule, 'MAPISendMail');
if @SM <> nil then
begin
Result := SM(0, Application.Handle, Message, MAPI_DIALOG or MAPI_LOGON_UI, 0);
end
else
Result := 1;
finally
FreeLibrary(MAPIModule);
end;
if Result <> 0 then
MessageDlg('Error sending mail (' + IntToStr(Result) + ').', mtError,
[mbOK], 0);
end;
PS: you must add the MAPI unit in USES-clause. To execute this procedure:
procedure TForm1.Button1Click(Sender: TObject);
begin
SendMail('Re: mailing from Delphi',
'Welcome to http://www.scalabium.com'#13#10'Mike Shkolnik',
'c:\autoexec.bat',
'your name', 'your@address.com',
'Mike Shkolnik', 'mshkolnik@scalabium.com');
end;
---------------------------------------
MSMAPI; // Microsoft MAPI Controls 6.0
Enum DeleteConstants; // Constants for Delete
GUID={20C62CB1-15DA-101B-B9A8-444553540000};
 mapMessageDelete = 0;
 mapRecipientDelete = 1;
 mapAttachmentDelete = 2;
Enum MessagesActionConstants; // Constants for Messages control Action property.
GUID={B54A7431-FC5B-11CF-89BF-00AA00688B10};
 mapFetch = 1;
 mapSendDialog = 2;
 mapSend = 3;
 mapSave = 4;
 mapCopy = 5;
 mapCompose = 6;
 mapReply = 7;
 mapReplyAll = 8;
 mapForward = 9;
 mapDelete = 10;
 mapShowAddressBook = 11;
 mapShowRecipDetails = 12;
 mapResolveName = 13;
 mapDeleteRecip = 14;
 mapDeleteAttachment = 15;
Enum MAPIErrors; // MAPI Error Codes
GUID={20C62CB2-15DA-101B-B9A8-444553540000};
 mapSuccessSuccess = $7D00;
 mapUserAbort = $7D01;
 mapFailure = $7D02;
 mapLoginFail = $7D03;
 mapDiskFull = $7D04;
 mapInsufficientMem = $7D05;
 mapAccessDenied = $7D06;
 mapGeneralFailure = $7D07;
 mapTooManySessions = $7D08;
 mapTooManyFiles = $7D09;
 mapTooManyRecipients = $7D0A;
 mapAttachmentNotFound = $7D0B;
 mapAttachmentOpenFailure = $7D0C;
 mapAttachmentWriteFailure = $7D0D;
 mapUnknownRecipient = $7D0E;
 mapBadRecipType = $7D0F;
 mapNoMessages = $7D10;
 mapInvalidMessage = $7D11;
 mapTextTooLarge = $7D12;
 mapInvalidSession = $7D13;
 mapTypeNotSupported = $7D14;
 mapAmbiguousRecipient = $7D15;
 mapMessageInUse = $7D16;
 mapNetworkFailure = $7D17;
 mapInvalidEditFields = $7D18;
 mapInvalidRecips = $7D19;
 mapNotSupported = $7D1A;
 mapSessionExist = $7D32;
 mapInvalidBuffer = $7D33;
 mapInvalidReadBufferAction = $7D34;
 mapNoSession = $7D35;
 mapInvalidRecipient = $7D36;
 mapInvalidComposeBufferAction = $7D37;
 mapControlFailure = $7D38;
 mapNoRecipients = $7D39;
 mapNoAttachment = $7D3A;
Enum ErrorConstants; // Error Constants
GUID={3438EDD0-D90A-11CF-89B4-00AA00688B10};
 mpeOutOfMemory = 7;
 mpeErrorLoadingMAPI = 48;
 mpeInvalidPropertyValue = $17C;
 mpeInvalidPropertyArrayIndex = $17D;
 mpeSetNotSupported = $17F;
 mpeGetNotSupported = $18A;
 mpeUserCancelled = $7D01;
 mpeUnspecifiedFailure = $7D02;
 mpeLoginFailed = $7D03;
 mpeDiskFull = $7D04;
 mpeInsufficientMemory = $7D05;
 mpeAccessDenied = $7D06;
 mpeMAPIFailure = $7D07;
 mpeTooManySessions = $7D08;
 mpeTooManyFiles = $7D09;
 mpeTooManyRecipients = $7D0A;
 mpeAttachmentNotFound = $7D0B;
 mpeFailedOpeningAttachment = $7D0C;
 mpeFailedWritingAttachment = $7D0D;
 mpeUnknownRecipient = $7D0E;
 mpeInvalidRecipientType = $7D0F;
 mpeNoMessages = $7D10;
 mpeInvalidMessage = $7D11;
 mpeTextTooLarge = $7D12;
 mpeInvalidSession = $7D13;
 mpeTypeNotSupported = $7D14;
 mpeAmbiguousRecipient = $7D15;
 mpeMessageInUse = $7D16;
 mpeNetworkFailure = $7D17;
 mpeInvalidEditFields = $7D18;
 mpeInvalidRecipients = $7D19;
 mpeNotSupported = $7D1A;
 mpeUserAbortedAction = $7D1B;
 mpeMAPIMissing = $7D30;
 mpeLogonFailure = $7D32;
 mpePropertyIsReadOnly = $7D33;
 mpeInvalidAction = $7D34;
 mpeNoValidSessionID = $7D35;
 mpeNoOriginator = $7D36;
 mpeActionNotValid = $7D37;
 mpeNoMessageList = $7D38;
 mpeNoRecipients = $7D39;
 mpeNoAttachments = $7D3A;
Enum RecipTypeConstants; // Constants for RecipType Property
GUID={20C62CB3-15DA-101B-B9A8-444553540000};
 mapOrigList = 0;
 mapToList = 1;
 mapCcList = 2;
 mapBccList = 3;
Enum AttachTypeConstants; // Constants for AttachType Property
GUID={20C62CB4-15DA-101B-B9A8-444553540000};
 mapData = 0;
 mapEOLE = 1;
 mapSOLE = 2;
Enum SessionActionConstants; // Constants for Session control Action property.
GUID={20C62CB5-15DA-101B-B9A8-444553540000};
 mapSignOn = 1;
 mapSignOff = 2;
Dispatch IMapiSession; // Microsoft MAPI Session Control
GUID={F49AC0B0-DF74-11CF-8E74-00A0C90F26F8};
 function QueryInterface(riid:^GUID; out ppvObj:^^void);
 function AddRef: UI4;
 function Release: UI4;
 function GetTypeInfoCount(out pctinfo:^UINT);
 function GetTypeInfo(itinfo:UINT; lcid:UI4; out pptinfo:^^void);
 function GetIDsOfNames(riid:^GUID; rgszNames:^^I1; cNames:UINT; lcid:UI4; out rgdispid:^I4);
 function Invoke(dispidMember:I4; riid:^GUID; lcid:UI4; wFlags:UI2; pdispparams:^DISPPARAMS; out pvarResult:^variant; out pexcepinfo:^EXCEPINFO; out puArgErr:^UINT);
 property-get DownLoadMail: bool;
 property-put DownLoadMail(bool);
 property-get LogonUI: bool;
 property-put LogonUI(bool);
 property-get NewSession: bool;
 property-put NewSession(bool);
 property-get Action: I2;
 property-put Action(I2);
 property-get SessionID: I4;
 property-put SessionID(I4);
 property-get Password: BSTR;
 property-put Password(BSTR);
 property-get UserName: BSTR;
 property-put UserName(BSTR);
 function SignOn;
 function SignOff;
 function AboutBox;
Dispatch MAPISessionEvents; // Microsoft MAPI Session Control
GUID={20C62CA2-15DA-101B-B9A8-444553540000};
Class MAPISession; // Microsoft MAPI Session Control
GUID={20C62CA0-15DA-101B-B9A8-444553540000};
 function QueryInterface(riid:^GUID; out ppvObj:^^void);
 function AddRef: UI4;
 function Release: UI4;
 function GetTypeInfoCount(out pctinfo:^UINT);
 function GetTypeInfo(itinfo:UINT; lcid:UI4; out pptinfo:^^void);
 function GetIDsOfNames(riid:^GUID; rgszNames:^^I1; cNames:UINT; lcid:UI4; out rgdispid:^I4);
 function Invoke(dispidMember:I4; riid:^GUID; lcid:UI4; wFlags:UI2; pdispparams:^DISPPARAMS; out pvarResult:^variant; out pexcepinfo:^EXCEPINFO; out puArgErr:^UINT);
 property-get DownLoadMail: bool;
 property-put DownLoadMail(bool);
 property-get LogonUI: bool;
 property-put LogonUI(bool);
 property-get NewSession: bool;
 property-put NewSession(bool);
 property-get Action: I2;
 property-put Action(I2);
 property-get SessionID: I4;
 property-put SessionID(I4);
 property-get Password: BSTR;
 property-put Password(BSTR);
 property-get UserName: BSTR;
 property-put UserName(BSTR);
 function SignOn;
 function SignOff;
 function AboutBox;
Dispatch IMapiMessages; // Microsoft MAPI Messages Control
GUID={F49AC0B2-DF74-11CF-8E74-00A0C90F26F8};
 function QueryInterface(riid:^GUID; out ppvObj:^^void);
 function AddRef: UI4;
 function Release: UI4;
 function GetTypeInfoCount(out pctinfo:^UINT);
 function GetTypeInfo(itinfo:UINT; lcid:UI4; out pptinfo:^^void);
 function GetIDsOfNames(riid:^GUID; rgszNames:^^I1; cNames:UINT; lcid:UI4; out rgdispid:^I4);
 function Invoke(dispidMember:I4; riid:^GUID; lcid:UI4; wFlags:UI2; pdispparams:^DISPPARAMS; out pvarResult:^variant; out pexcepinfo:^EXCEPINFO; out puArgErr:^UINT);
 property-get AddressCaption: BSTR;
 property-put AddressCaption(BSTR);
 property-get AddressEditFieldCount: I2;
 property-put AddressEditFieldCount(I2);
 property-get AddressLabel: BSTR;
 property-put AddressLabel(BSTR);
 property-get AddressModifiable: bool;
 property-put AddressModifiable(bool);
 property-get AddressResolveUI: bool;
 property-put AddressResolveUI(bool);
 property-get AttachmentCount: I4;
 property-put AttachmentCount(I4);
 property-get AttachmentIndex: I4;
 property-put AttachmentIndex(I4);
 property-get AttachmentName: BSTR;
 property-put AttachmentName(BSTR);
 property-get AttachmentPathName: BSTR;
 property-put AttachmentPathName(BSTR);
 property-get AttachmentPosition: I4;
 property-put AttachmentPosition(I4);
 property-get AttachmentType: I2;
 property-put AttachmentType(I2);
 property-get FetchMsgType: BSTR;
 property-put FetchMsgType(BSTR);
 property-get FetchSorted: bool;
 property-put FetchSorted(bool);
 property-get FetchUnreadOnly: bool;
 property-put FetchUnreadOnly(bool);
 property-get MsgConversationID: BSTR;
 property-put MsgConversationID(BSTR);
 property-get MsgCount: I4;
 property-put MsgCount(I4);
 property-get MsgDateReceived: BSTR;
 property-put MsgDateReceived(BSTR);
 property-get MsgID: BSTR;
 property-put MsgID(BSTR);
 property-get MsgIndex: I4;
 property-put MsgIndex(I4);
 property-get MsgNoteText: BSTR;
 property-put MsgNoteText(BSTR);
 property-get MsgOrigAddress: BSTR;
 property-put MsgOrigAddress(BSTR);
 property-get MsgOrigDisplayName: BSTR;
 property-put MsgOrigDisplayName(BSTR);
 property-get MsgRead: bool;
 property-put MsgRead(bool);
 property-get MsgReceiptRequested: bool;
 property-put MsgReceiptRequested(bool);
 property-get MsgSent: bool;
 property-put MsgSent(bool);
 property-get RecipAddress: BSTR;
 property-put RecipAddress(BSTR);
 property-get RecipCount: I4;
 property-put RecipCount(I4);
 property-get RecipDisplayName: BSTR;
 property-put RecipDisplayName(BSTR);
 property-get RecipIndex: I4;
 property-put RecipIndex(I4);
 property-get RecipType: I2;
 property-put RecipType(I2);
 property-get SessionID: I4;
 property-put SessionID(I4);
 property-get MsgSubject: BSTR;
 property-put MsgSubject(BSTR);
 property-get MsgType: BSTR;
 property-put MsgType(BSTR);
 property-get Action: I2;
 property-put Action(I2);
 function Compose;
 function Copy;
 function Delete([vObj:variant]);
 function Fetch;
 function Forward;
 function Reply;
 function ReplyAll;
 function ResolveName;
 function Save;
 function Show([vDetails:variant]);
 function AboutBox;
 function Send([vDialog:variant]);
Dispatch MAPIMessagesEvents; // Event interface for Microsoft MAPI Messages Control
GUID={20C62CAD-15DA-101B-B9A8-444553540000};
Class MAPIMessages; // Microsoft MAPI Messages Control
GUID={20C62CAB-15DA-101B-B9A8-444553540000};
 function QueryInterface(riid:^GUID; out ppvObj:^^void);
 function AddRef: UI4;
 function Release: UI4;
 function GetTypeInfoCount(out pctinfo:^UINT);
 function GetTypeInfo(itinfo:UINT; lcid:UI4; out pptinfo:^^void);
 function GetIDsOfNames(riid:^GUID; rgszNames:^^I1; cNames:UINT; lcid:UI4; out rgdispid:^I4);
 function Invoke(dispidMember:I4; riid:^GUID; lcid:UI4; wFlags:UI2; pdispparams:^DISPPARAMS; out pvarResult:^variant; out pexcepinfo:^EXCEPINFO; out puArgErr:^UINT);
 property-get AddressCaption: BSTR;
 property-put AddressCaption(BSTR);
 property-get AddressEditFieldCount: I2;
 property-put AddressEditFieldCount(I2);
 property-get AddressLabel: BSTR;
 property-put AddressLabel(BSTR);
 property-get AddressModifiable: bool;
 property-put AddressModifiable(bool);
 property-get AddressResolveUI: bool;
 property-put AddressResolveUI(bool);
 property-get AttachmentCount: I4;
 property-put AttachmentCount(I4);
 property-get AttachmentIndex: I4;
 property-put AttachmentIndex(I4);
 property-get AttachmentName: BSTR;
 property-put AttachmentName(BSTR);
 property-get AttachmentPathName: BSTR;
 property-put AttachmentPathName(BSTR);
 property-get AttachmentPosition: I4;
 property-put AttachmentPosition(I4);
 property-get AttachmentType: I2;
 property-put AttachmentType(I2);
 property-get FetchMsgType: BSTR;
 property-put FetchMsgType(BSTR);
 property-get FetchSorted: bool;
 property-put FetchSorted(bool);
 property-get FetchUnreadOnly: bool;
 property-put FetchUnreadOnly(bool);
 property-get MsgConversationID: BSTR;
 property-put MsgConversationID(BSTR);
 property-get MsgCount: I4;
 property-put MsgCount(I4);
 property-get MsgDateReceived: BSTR;
 property-put MsgDateReceived(BSTR);
 property-get MsgID: BSTR;
 property-put MsgID(BSTR);
 property-get MsgIndex: I4;
 property-put MsgIndex(I4);
 property-get MsgNoteText: BSTR;
 property-put MsgNoteText(BSTR);
 property-get MsgOrigAddress: BSTR;
 property-put MsgOrigAddress(BSTR);
 property-get MsgOrigDisplayName: BSTR;
 property-put MsgOrigDisplayName(BSTR);
 property-get MsgRead: bool;
 property-put MsgRead(bool);
 property-get MsgReceiptRequested: bool;
 property-put MsgReceiptRequested(bool);
 property-get MsgSent: bool;
 property-put MsgSent(bool);
 property-get RecipAddress: BSTR;
 property-put RecipAddress(BSTR);
 property-get RecipCount: I4;
 property-put RecipCount(I4);
 property-get RecipDisplayName: BSTR;
 property-put RecipDisplayName(BSTR);
 property-get RecipIndex: I4;
 property-put RecipIndex(I4);
 property-get RecipType: I2;
 property-put RecipType(I2);
 property-get SessionID: I4;
 property-put SessionID(I4);
 property-get MsgSubject: BSTR;
 property-put MsgSubject(BSTR);
 property-get MsgType: BSTR;
 property-put MsgType(BSTR);
 property-get Action: I2;
 property-put Action(I2);
 function Compose;
 function Copy;
 function Delete([vObj:variant]);
 function Fetch;
 function Forward;
 function Reply;
 function ReplyAll;
 function ResolveName;
 function Save;
 function Show([vDetails:variant]);
 function AboutBox;
 function Send([vDialog:variant]);


MSMAPI.reg (0.1KB)
MSMAPI32.OCX (133.8KB)