Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (все версии) - часть 4

Модерирует : ShIvADeSt

ShIvADeSt (28-06-2009 02:10): Продолжение в http://forum.ru-board.com/topic.cgi?forum=33&topic=10477  Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

   

DmitryKz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Приведенный ниже код обеспечивает посылку по электронной почте сообщения, текст которого занесен в компонент RichEdit1 (разбиение на строки будет соответствовать разбиению в RichEdit1), тема берется из окна Edit1, имя адресата - из окна Edit2, адрес - из окна Edit3:
 
uses mapi;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  MapiMessage: TMapiMessage;
  MError: Cardinal;
  rec: MapiRecipDesc;
begin
// задание информации об адресате
 
  with rec do
  begin
   ulReserved := 0;
   ulRecipClass := MAPI_TO;
   lpszName := PChar(Edit2.Text);
   lpszAddress := PChar(Edit3.Text);
   ulEIDSize := 0;
  end;
// задание информации о сообщении
  with MapiMessage do
  begin
    ulReserved := 0;
    lpszSubject := PChar(Edit1.Text);
    lpszNoteText := PChar(RichEdit1.Lines.Text);
    lpszMessageType := nil;
    lpszDateReceived := nil;
    lpszConversationID := nil;
    flFlags := MAPI_SENT;
 
    lpOriginator := nil;
    nRecipCount := 1;
    lpRecips := @rec;
    nFileCount := 0;
    lpFiles := nil;
  end;
// отсылка сообщения
  MError := MapiSendMail(0, Application.Handle, MapiMessage,
                         0, 0);
  if MError <> 0  
     then MessageDlg('Ошибка передачи по электронной почте',
                     mtError, [mbOK], 0);
end;
В приведенном примере сообщение посылается автоматически, если только почтовая программа и антивирусная защита позволяют это сделать. Если заменить оператор вызова MapiSendMail на следующий:
 
MError := MapiSendMail(0, Application.Handle, MapiMessage,
                       MAPI_DIALOG, 0);
 
то перед отсылкой возникнет диалог почтовой программы, который позволит пользователю что-то исправить в послании, в его теме, адресе и т.д.
 
Если приложение должно только сформировать текст послания и его тему, то приведенный код можно заметно упростить. В этом случае не нужно вводить переменную rec типа MapiRecipDesc, не нужно заполнять поля этой записи, а в поле lpRecips записи MapiMessage надо записать 0.
Если послание должно отправляться в несколько адресов, то вместо одной переменной типа MapiRecipDesc надо создать массив записей этого типа. Например:
var
  ...
  Arec: array[0..1] of MapiRecipDesc;
 
...
  with Arec[0] do
  begin
   ulReserved := 0;
   ulRecipClass := MAPI_TO;
   lpszName := ...;
   lpszAddress := ...;
   ulEIDSize := 0;
  end;
  with Arec[1] do
  begin
   ulReserved := 0;
   ulRecipClass := MAPI_CC;
   lpszName := ...;
   lpszAddress := ...;
   ulEIDSize := 0;
  end;
 
  with MapiMessage do
  begin
    ...
    nRecipCount := 2;
    lpRecips := @Arec;
    ...
  end;
  ...
 
В этом примере указывается два адресата, причем второму посылается копия послания (значение MAPI_CC поля ulRecipClass).
Теперь рассмотрим присоединение к посланию файлов. Пусть, например, вы хотите присоединить файл, полное имя которого с путем записано в окне Edit4. Тогда в приведенный ранее пример надо добавить следующее:
var ...
  Attach: MapiFileDesc;
...
  with MapiMessage do
  begin
   ...
   if Edit4.Text <> ''
    then begin
     with Attach do
 
      begin
       ulReserved := 0;
       flFlags := 0;
       nPosition := $FFFFFFFF;
       lpszPathName := PChar(Edit4.Text);
       lpszFileName := nil;
       lpFileType := nil;
      end;
     nFileCount := 1;
     lpFiles := @Attach;
    end
    else begin
     nFileCount := 0;
     lpFiles := nil;
    end;
  end;
...

Всего записей: 3144 | Зарегистр. 29-09-2005 | Отправлено: 18:16 13-04-2009 | Исправлено: DmitryKz, 18:18 13-04-2009
   

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (все версии) - часть 4
ShIvADeSt (28-06-2009 02:10): Продолжение в http://forum.ru-board.com/topic.cgi?forum=33&topic=10477


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru