Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > При запуске почтовой проги установсленной


Автор: RN3QGA 11.2.2006, 14:48
Доброго времени суток.
Использую в свой проге вот такой кусочек кода.

Код
ShellExecute(Handle, 'Open', 'mailto:адесполучателя ?Subject=Отчет о выполнении диплома', nil, nil,sw_restore);


все ОК, но можноли сразу сделать, чтобы был прикреплен файл (например Excel документ).
Спасибо.

Автор: Snowy 11.2.2006, 15:46
Можно. Только не данным способом.
Вот посмотри тут, как это делается через MAPI: http://forum.vingrad.ru/index.php?showtopic=72085&view=findpost&p=572116

Автор: RN3QGA 11.2.2006, 23:47
Спасибо Snowy, но что-то почтовая запускается все вроде ОК, но при закрытии
её - выдает ошибку в строке
Код

sendEMail(Application.Handle, mail);

По ссылке которую смотрел у Гостя тоже подобное было.
вроде ни чего неменял (ну кроме пути к файлам конечно)
в чем дело не подскажите?

Автор: Snowy 12.2.2006, 18:07
Вот. Пришлось поработать. Но результат есть.
Полностью переписал код. Сделал более логичный и надежный вариант:
Код

function SendEMail(MailFrom: string; const MailTo: array of string;
                   Subject, Body: string; const Attach: array of string): Cardinal;
var
  Mess: TMapiMessage;
  MRD:   array of TMapiRecipDesc;
  Files: array of TMapiFileDesc;
  i: integer;
  Session: THandle;
begin
  result := MapiLogon(0,nil,nil, MAPI_LOGON_UI or MAPI_NEW_SESSION,0,@Session);
  if (result = SUCCESS_SUCCESS) then
  begin
    FillChar(Mess, SizeOf(Mess), 0);
    if Subject <> '' then Mess.lpszSubject := PChar(Subject);
    if Body <> '' then Mess.lpszNoteText := PChar(Body);
    if Length(MailTo) > 0 then
    begin
      SetLength(MRD, Length(MailTo));
      for i:=0 to Length(MailTo)-1 do
      begin
        MRD[i].ulReserved := 0;
        MRD[i].ulRecipClass := MAPI_TO;
        MRD[i].lpszName := PChar(MailTo[i]);
        MRD[i].lpszAddress := PChar('SMTP:'+MailTo[i]);
        MRD[i].ulEIDSize := 0;
        MRD[i].lpEntryID := nil;
      end;
      Mess.nRecipCount := Length(MailTo);
      Mess.lpRecips := @MRD[0];
    end;
    if Length(Attach) > 0 then
    begin
      SetLength(Files, Length(Attach));
      for i := 0 to Length(Attach) - 1 do
      begin
        Files[i].ulReserved := 0;
        Files[i].flFlags := 0;
        Files[i].nPosition := ULONG($FFFFFFFF);
        Files[i].lpszPathName := PChar(Attach[i]);
        Files[i].lpszFileName := PChar(ExtractFileName(Attach[i]));
        Files[i].lpFileType := nil;
      end;
      Mess.nFileCount := Length(Attach);
      Mess.lpFiles := @Files[0];
    end;
    try
      result := MapiSendMail(Session, 0, Mess, MAPI_DIALOG, 0);
    except
      result := MAPI_E_FAILURE;
    end;
    MapiLogOff(Session, 0, 0, 0);
  end;
end;


Пример использования:
Код

procedure TForm1.Button1Click(Sender: TObject);
begin
  if SendEMail('[email protected]', // от кого
                      ['[email protected]', '[email protected]'], // кому: список адресов
                      'Subj', // тема
                      'Test Mail', // текст сообщения
                      ['C:\1.bmp', 'C:\2.jpg'] // список файлов (обязательно должны существовать)
                      ) = 0 then // результат - 0=все Ок, <>0=код завершения
    ShowMessage('All Ok')
  else ShowMessage('Not Sended');
end;

Автор: mrDuke 15.4.2010, 15:22
При использовании вышеприведенного кода возникает следущая ситуация: При одном получателе и одном вложении все нормально, как только пытаюсь ввести больше одного адреса и вложения он почемуто обрубает расширения файлов, и адреса... Где может быть ошибка? В массиве влоть до передачи в письмо - данные верные... 

Автор: Akella 16.4.2010, 12:35
Цитата(mrDuke @  15.4.2010,  15:22 Найти цитируемый пост)
И как еще можно без нажатия кнопки в Outlook'e отправлять письмо?

Вопрос для этого раздела по COM серверам
http://forum.vingrad.ru/forum/delphi-activex-com-corba-ole.html

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)