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 |
|