Q&A

  • [질문]MAPI를 이용해서 메일 발송시 첨부파일 두개 보내기.(소스 있어요)

퀵리포트를 이미지로 만들고 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;

1  COMMENTS
  • Profile
    zeliard 2013.12.05 03:51

    TMapiMessage.lpFile은 배열포인터입니다. 첨부파일이 세개이면 TMapiFileDesc타입의 정보 세개가 FileAttach변수에 배열로 들어가야 합니다.