15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Отправка E-mail с прикреплённым файлом из Delphi через Outlook.

Автор: Eddie Shipman

Пример использует VB Script для Outlook, который позволяет произвести такую операцию. Создаётся OLE-объект - 'Outlook.Application' и в него передаётся скрипт.

Совместимость: все версии Delphi

Измените recipientaddress@recipienthost.com на Ваш собственный e-mail
адресс. У Вас должен быть проинсталирован Outlook,

{Я не уверен, что это будет работать в Outlook Express.}

uses ComObj; {Delphi 5}

procedure TForm1.Button1Click(Sender: TObject);
const
  // константы OlItemType
  olMailItem = 0;
  olAppointmentItem = 1;
  olContactItem = 2;
  olTaskItem  = 3;
  olJournalItem = 4;
  olNoteItem = 5;
  olPostItem = 6;
  // константы OlAttachmentType
  olByValue = 1;
  olByReference = 4;
  olEmbeddedItem = 5;
  olOLE = 6;

var
  myOlApp, myItem, myRecipient, myAttachments: OleVariant;
begin
  // файл VBScript для создания почтового сообщения и прикрепления к нему файла
  myOlApp := CreateOLEObject('Outlook.Application');
  myItem := myOlApp.CreateItem(olMailItem);
  myItem.Subject := 'This is the Subject';
  myRecipient := myItem.Recipients.Add('recipientaddress@recipienthost.com');
  myItem.Body := #13;
  myItem.Body := myItem.Body + #13;
  myItem.Body := myItem.Body + 'Hello,' + #13;
  myItem.Body := myItem.Body + 'This code created this message and '+
                               ' sent it and I didn''t even have' + #13;
  myItem.Body := myItem.Body + 'to click the send button!!!' + #13;
  myItem.Body := myItem.Body + #13;
  myItem.Body := myItem.Body + 'If you have any more problems, let me know' +
#13;
  myItem.Body := myItem.Body + 'rename to blah.vbs and run like this:' + #13;
  myItem.Body := myItem.Body + 'wscript c:\blah.vbs' + #13;
  myItem.Body := myItem.Body + #13;
  myItem.Body := myItem.Body + 'Eddie' + #13;
  myItem.Body := myItem.Body + #13;
  myItem.Body := myItem.Body + #13;
  myItem.Body := myItem.Body + 'const'+ #13;
  myItem.Body := myItem.Body + '  // константы OlItemType'+ #13;
  myItem.Body := myItem.Body + '  olMailItem = 0;'+ #13;
  myItem.Body := myItem.Body + '  olAppointmentItem = 1;'+ #13;
  myItem.Body := myItem.Body + '  olContactItem = 2;'+ #13;
  myItem.Body := myItem.Body + '  olTaskItem  = 3;'+ #13;
  myItem.Body := myItem.Body + '  olJournalItem = 4;'+ #13;
  myItem.Body := myItem.Body + '  olNoteItem = 5;'+ #13;
  myItem.Body := myItem.Body + '  olPostItem = 6;'+ #13;
  myItem.Body := myItem.Body + '  // OlAttachmentType constants'+ #13;
  myItem.Body := myItem.Body + '  olByValue = 1;'+ #13;
  myItem.Body := myItem.Body + '  olByReference = 4;'+ #13;
  myItem.Body := myItem.Body + '  olEmbeddedItem = 5;'+ #13;
  myItem.Body := myItem.Body + '  olOLE = 6;'+ #13;
  myItem.Body := myItem.Body + #13;
  myItem.Body := myItem.Body + 'var'+ #13;
  myItem.Body := myItem.Body + '  myOlApp, myItem, myRecipient, myAttachments:
OleVariant;'+ #13;
  myItem.Body := myItem.Body + 'begin'+ #13;
  myItem.Body := myItem.Body + '  myOlApp :=
CreateObject(''Outlook.Application'')' + #13;
  myItem.Body := myItem.Body + '  myItem := myOlApp.CreateItem(olMailItem)' +
#13;
  myItem.Body := myItem.Body + '  myItem.Subject := ''This is the Subject''' +
#13;
  myItem.Body := myItem.Body + '  myItem.Body := ''This is the body''' + #13;
  myItem.Body := myItem.Body + '  myRecipient := myItem.Recipients.Add
('recipientaddress@recipienthost.com')' + #13;
  myItem.Body := myItem.Body + '  myAttachments := myItem.Attachments' + #13;
  myItem.Body := myItem.Body + '  // Теперь прикрепим файлы...' + #13;
  myItem.Body := myItem.Body + '  myAttachments.Add ''C:\blah.txt'', olByValue,
1, ''Blah.txt Attachment''' + #13;
  myItem.Body := myItem.Body + '  myItem.Send' + #13;
  myItem.Body := myItem.Body + '  myOlApp := VarNull;' + #13;
  myItem.Body := myItem.Body + '  myItem := VarNull;' + #13;
  myItem.Body := myItem.Body + '  myRecipient := VarNull;' + #13;
  myItem.Body := myItem.Body + '  myAttachments := VarNull;' + #13;
  myItem.Body := myItem.Body + 'end;' + #13;
  // Теперь прикрепим файлы...
  myAttachments := myItem.Attachments;
  myAttachments.Add('C:\blah.txt', olByValue, 1, 'Blah.txt Attachment');
  myItem.Send
  myOlApp := VarNull;
  myItem := VarNull;
  myRecipient := VarNull;
  myAttachments := VarNull;
end;