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


Автор: lorents 19.2.2009, 13:59
не подскажите как можно сделать следующее
открыть окно отправки письма через программу, которая стоит по умолчанию, с уже вложенным файлом?
то есть ты не сам выбираешь этот файл а просто прописываешь вложить определенные файл и запустить программу для отправки писем, которая стоит по умолчанию?
и еще нет ли, как бы сказать, движка для отправки писем именно через мою программу
я находил парочку но меня там не все устраивает
1. поддержка кириллиц
2. можно было вложить файлы
3. показывал процесс отправки
  • соединение с интернетом (если возникает проблема то выдать соответственно ошибку об этом)
  • процесс уже отправки письма (если возникает проблема то выдать соответственно ошибку об этом)

Автор: Akella 19.2.2009, 14:18
Цитата(lorents @  19.2.2009,  13:59 Найти цитируемый пост)
открыть окно отправки письма через программу, которая стоит по умолчанию, с уже вложенным файлом?

Код

ShellExecute(Handle, 'open',
               PAnsiChar('mailto:nickname@rambler.ru;support@ra-codecraft.com.ua?subject=Квартал eXpress (Ошибки и предложения)&Body='+
               'Пользователь: '+UserData.UserName+'%0D%0A'+
               'Код активации: '+GetRegistrationKeys+'%0D%0A'+
               'HardwareID: '+sLocalHardwareID+'%0D%0A'+
               Version.caption+' /Квартал eXpress '+' '+IsLocal+'/%0D%0A'+
               lbDBVersion.Caption+'%0D%0A'+
               lbReg.Caption+'%0D%0A'+
               '~~~~~~~~~~~~~~~~~~~~ТЕКСТ СООБЩЕНИЯ~~~~~~~~~~~~~~~~~~~~~~~~%0D%0A%0D%0A'+
               'Здравствуйте!%0D%0A%0D%0A'), nil, nil, SW_SHOWNORMAL);


Код

ShellExecute(Handle, 'open', PAnsiChar('http://www.ra-codecraft.com.ua'), nil, nil, SW_MAXIMIZE);


Код

ShellExecute(Handle, 'open', PAnsiChar('mailto: nickname@rambler.ru?subject=Ошибки и предложения&Body='+UserData.UserName), nil, nil, SW_SHOWNORMAL);


Добавлено через 1 минуту и 52 секунды
Цитата(lorents @  19.2.2009,  13:59 Найти цитируемый пост)
и еще нет ли, как бы сказать, движка для отправки писем именно через мою программу

Indy. Информацию по инди ищи в разделе Delphi:Сети.

Автор: cemick 19.2.2009, 14:20
Есть три способа:
1. Использовать MAPI(большинство почтовых клиентов его поддерживает) http://msdn.microsoft.com/en-us/library/dd296734(VS.85).aspx 
2. Использовать ShellExecute   ShellExecute(0, '', PAnsiChar('mailto:' + ALink), '', '', sw_show)
   http://msdn.microsoft.com/en-us/library/aa767737(VS.85).aspx
3. Создать файл почтового клиента, и открыть его, опять же с помощью ShellExecute

.. м-дя уже опередили

Автор: Rais96 19.2.2009, 14:21
Посмотри примеры к библиотеке Indy, я её использовал.
Кириллица и вложения там есть.
Процесс отправки и обработка ошибок - это зависит от твоих потребностей и фантазии.

Автор: Akella 19.2.2009, 14:21
Цитата(lorents @  19.2.2009,  13:59 Найти цитируемый пост)
соединение с интернетом (если возникает проблема то выдать соответственно ошибку об этом)

Код

procedure TfmUpdateInfo.tbInetConnectClick(Sender: TObject);
begin
    if not InternetAutoDial(INTERNET_AUTODIAL_FORCE_ONLINE,Handle) then begin
      Log('Ошибка подклчения к Интернет.');
      LOG(SysErrorMessage(GetLastError),false,true);
    end;
end;


Автор: cemick 19.2.2009, 14:26
Пример использование MAPI:
Код


    MessRec : TMapiMessage;
    ReciverRec  : TMapiRecipDesc;
  FileRec: PMapiFileDesc;
  Hres: Cardinal;
  var i:Integer;
begin
   with ReciverRec do //информация о получатели
   begin
      lpszName:=PChar('mailto');
      lpszAddress:=PChar('');
      ulEIDSize:=0;
      lpEntryID:=nil;
      ulReserved:=0;
      ulRecipClass:=MAPI_TO;
   end;
   
   GetMem(FileRec,sizeof(TMapiFileDesc));// Информация о приаттаченных файлах
   try
     with FileRec^ do
     begin
       ulReserved:= 0;
       flFlags:= 0;
       nPosition:= Cardinal(-1); ;
       lpszPathName:= PAnsiChar(AFilePath);
       lpszFileName:= PAnsiChar(AAttachFileName);
       lpFileType:= nil;
     end;

     with MessRec do //Информация о сообщении
     begin
        ulReserved:=0;
        lpszSubject:=PChar(ASubject);
        lpszNoteText:=PChar(AMess);
        lpOriginator:=nil;
        nRecipCount:=1;
        lpRecips:=@ReciverRec;
        lpszMessageType:=nil;
        lpszDateReceived:=nil;
        lpszConversationID:= nil;
        flFlags:=0;
        nFileCount:=1;
        lpFiles:=FileRec;//@FileRec;
     end;
     //MapiSendDocuments(0,nil,nil,nil,0);
     //Вызыв диалогово окна отправки сообщения
     Hres := MapiSendMail(0,Application.Handle,MessRec, MAPI_DIALOG or MAPI_LOGON_UI or MAPI_NEW_SESSION,0);
    if Hres > 1 then
       raise Exception.Create(Format('Ощибка открытия почтового клинета. Код ошибки: %s',[IntToStr(Hres)]));
   finally
    FreeMem(FileRec,sizeof(TMapiFileDesc));
   end
Код


;


Добавлено через 3 минуты и 8 секунд
протокол mailto не все почтовые клиенты одинаково понимают, щас уже не помню с каким именно были проблемы, но точно трудности есть

Автор: lorents 19.2.2009, 14:40
секундочку, я ща запутаюсь
скажу честно я от делфи далек, я изучаю другую программу, для создания тоже программ но не сложных
делфи как бы тока начал изучать
я хотел спросить что за библиотека Indy и можно мне отдельно скинуть мне только то что относится для отпарки писем?
и инструкцию, я сам буду разбираться что и как делать, коды не надо писать, хотя большое спасибо, я их отдельно сохраняю в текстовой файл на будущее, все равно мне это пригодится

Автор: Snowy 19.2.2009, 15:30
Indy находится на панели компонент во вкладке Indy
Но тут есть проблема - нужно знать настройки SMTP сервера.
А их добровольно может ввести только пользователь (как он обычно делает при настройке почтового ящика в почтовой программе)

Добавлено через 1 минуту и 40 секунд
Цитата(cemick @  19.2.2009,  14:26 Найти цитируемый пост)
протокол mailto не все почтовые клиенты одинаково понимают
MAPI понимают гораздо меньше. А уж одинаково вообще еденицы.

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