퀵리포트를 이미지로 만들고 MAPI를 이용해서 아웃룩을 실행하고 실행된 아웃룩에 이미지로 만든 파일을 첨부하여 메일을 보내고 있는데..
하나는 첨부가 잘됩니다. 근데 두개는 않되더라구요...
방법이 없을까요?
아래 소스 올립니다..
function SendMailMAPI(const Subject, Body, FileName, FileName1, FileName2, SenderName, SenderEMail,
RecepientName, RecepientEMail: String) : Integer;
var
message: TMapiMessage;
lpSender,
lpRecepient: TMapiRecipDesc;
FileAttach: TMapiFileDesc;
SM: TFNMapiSendMail;
MAPIModule: HModule;
TFileName : STring;
begin
FillChar(message, SizeOf(message), 0);
with message do
begin
if (Subject<>'') then
begin
lpszSubject := PChar(Subject)
end;
if (Body<>'') then
begin
lpszNoteText := PChar(Body)
end;
if (SenderEMail<>'') then
begin
lpSender.ulRecipClass := MAPI_ORIG;
if (SenderName='') then
begin
lpSender.lpszName := PChar(SenderEMail)
end
else
begin
lpSender.lpszName := PChar(SenderName)
end;
lpSender.lpszAddress := PChar('SMTP:'+SenderEMail);
lpSender.ulReserved := 0;
lpSender.ulEIDSize := 0;
lpSender.lpEntryID := nil;
lpOriginator := @lpSender;
end;
if (RecepientEMail<>'') then
begin
lpRecepient.ulRecipClass := MAPI_TO;
if (RecepientName='') then
begin
lpRecepient.lpszName := PChar(RecepientEMail)
end
else
begin
lpRecepient.lpszName := PChar(RecepientName)
end;
lpRecepient.lpszAddress := PChar('SMTP:'+RecepientEMail);
lpRecepient.ulReserved := 0;
lpRecepient.ulEIDSize := 0;
lpRecepient.lpEntryID := nil;
nRecipCount := 1;
lpRecips := @lpRecepient;
end
else
begin
lpRecips := nil
end;
if (FileName='') then
begin
nFileCount := 0;
lpFiles := nil;
end
else
begin
// 이부분이 파일 첨부 하는 부분입니다..
FillChar(FileAttach, SizeOf(FileAttach), 0);
FileAttach.nPosition := Cardinal($FFFFFFFF);
TFileName:= FileName;
nFileCount := 1;
if (FileName1<>'') then begin
TFileName:= TFileName+';'+FileName1;
nFileCount := 2;
end;
if (FileName2<>'') then begin
TFileName:= TFileName+';'+FileName2;
nFileCount := 3;
end;
FileAttach.lpszPathName := PChar(TFileName);
lpFiles := @FileAttach;
end;
end;
MAPIModule := LoadLibrary(PChar(MAPIDLL));
if MAPIModule=0 then
begin
Result := -1
end
else
begin
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
begin
Result := 1
end;
finally
FreeLibrary(MAPIModule);
end;
end;
end;
TMapiMessage.lpFile은 배열포인터입니다. 첨부파일이 세개이면 TMapiFileDesc타입의 정보 세개가 FileAttach변수에 배열로 들어가야 합니다.