Конференция "WinAPI" » Отправка почты с вложениями [D5, WinXP]
 
  • harisma © (07.09.09 18:24) [0]
    Здравствуйте, знатоки. Вот какая вышла загвоздка.
    Необходимо организовать отправку сообщений на электронную почту с вложениями. Хороший пример, вполне меня устраивающий, я нашел. НО!!!! Этот пример поддерживает только ОДНО вложение. А как организовать поддержку нескольких вложений в одном письме???

    Вот пример, который необходимо доработать:

    function SendMail(const From, Dest, Subject, Text, FileName: PChar;
    Outlook: boolean):Integer;
    var
     Message: TMapiMessage;
     Recipient, Sender: TMapiRecipDesc;
     File_Attachment: TMapiFileDesc;

     function MakeMessage: TMapiMessage;
     begin
       FillChar(Sender, SizeOf(Sender), 0);
       Sender.ulRecipClass := MAPI_ORIG;
       Sender.lpszAddress := From;

       FillChar(Recipient, SizeOf(Recipient), 0);
       Recipient.ulRecipClass := MAPI_TO;
       Recipient.lpszAddress := Dest;

       FillChar(File_Attachment, SizeOf(File_Attachment), 0);
       File_Attachment.nPosition := Cardinal(-1);
       File_Attachment.lpszPathName := FileName;

       FillChar(Result, SizeOf(Result), 0);
       with Message do begin
         lpszSubject := Subject;
         lpszNoteText := Text;
         lpOriginator := @Sender;
         nRecipCount := 1;
         lpRecips := @Recipient;
         nFileCount := 1;
         lpFiles := @File_Attachment;
       end;
     end;

    var
     SM: TFNMapiSendMail;
     MAPIModule: HModule;
     MAPI_FLAG: Cardinal;
    begin
     if Outlook then
      MAPI_FLAG:=MAPI_DIALOG
     else
      MAPI_FLAG:=0;
     MAPIModule := LoadLibrary(PChar(MAPIDLL));
     if MAPIModule = 0 then
       Result := -1
     else
       try
         @SM := GetProcAddress(MAPIModule, 'MAPISendMail');
         if @SM <> nil then begin
           MakeMessage;
           Result := SM(0, Application.Handle, Message, MAPI_FLAG, 0);
         end else Result := 1;
       finally
         FreeLibrary(MAPIModule);
       end;
    end;



    Заранее благодарен за помощь.
  • TIF © (07.09.09 19:04) [1]
    > А как организовать поддержку нескольких вложений в одном
    > письме???

    1) Сложить их в один архив? :)))
    2) Использовать Indy, глянуть Demo "MailClient", вот часть кода, которая добавляет в сообщение вложение:
      if OpenDialog1.Execute then
         begin
            TIdAttachmentFile.Create(IdMsgSend.MessageParts, OpenDialog1.FileName);
            ResetAttachmentListView;
         end;


    Где
    IdMsgSend: TIdMessage;


    3) Подождать других ответов )
  • harisma © (07.09.09 19:24) [2]

    > 1) Сложить их в один архив? :)))
    > 2) Использовать Indy,


    1. Не подходит.
    2. Надо чистым кодом, без использования инди и других компонент
  • Сергей М. © (07.09.09 19:38) [3]

    > 2. Надо чистым


    А никто и не заставляет тебя "гадить".
    Посмотри как это сделано в том же Инди - и сделай по аналогии, но без упоминания Инди.
  • harisma © (09.09.09 17:55) [4]
    Вопрос закрыт. Решение найдено.
  • Егор (28.06.11 21:22) [5]
    Какое решение найдено?
 
Конференция "WinAPI" » Отправка почты с вложениями [D5, WinXP]
Есть новые Нет новых   [134431   +11][b:0][p:0.001]