Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Автоматизация отправки электронных писем через Outlook: решение на Delphi 2006 BDS

Delphi , Технологии , OLE

Автоматизация отправки электронных писем через Outlook: решение на Delphi 2006 BDS

Вопрос пользователя связан с автоматизацией отправки электронных писем через Outlook в приложении на Delphi 2006 BDS. Пользователь пытается определить, было ли письмо отправлено, и если да, то получить доступ к телу письма. В процессе была попытка использовать свойство Sent объекта письма, что привело к ошибке, поскольку письмо перемещается в папку "Отправленные".

Решение проблемы

Для решения проблемы необходимо использовать событие Send объекта письма. Это требует использования ранней связи (early binding), для чего нужно добавить один из файлов outlook*.pas в папку ..\OCX\Servers RAD Studio и использовать в разделе uses соответствующий модуль.

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

uses
  ..., outlook2000;
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    private
    OutlookApplication: TOutlookApplication;
    procedure OnMailSend(Sender: TObject; var Cancel: WordBool);
  end;
...
procedure TForm1.FormCreate(Sender: TObject);
begin
  OutlookApplication := TOutlookApplication.Create(Self);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
  MailItem: _MailItem;
  Mail: TMailItem;
begin
  MailItem := OutlookApplication.CreateItem(olMailItem) as _MailItem;
  ...
  Mail := TMailItem.Create(nil);
  try
    Mail.ConnectTo(MailItem);
    Mail.OnSend := OnMailSend;
    ...
  finally
    Mail.Free;
  end;
end;
procedure TForm1.OnMailSend(Sender: TObject; var Cancel: WordBool);
begin
  ShowMessage((Sender as TMailItem).Body);
end;

Если использовать позднюю связь (late binding), то потребуется выполнить дополнительную работу, которую обычно выполняет импортированный обертка. Пример кода с поздней связью:

uses
  comobj;
...
type
  TForm1 = class(TForm, IDispatch)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    private
    FCookie: Integer;
    FMailItem: OleVariant;
    procedure MailSent;
    ...
  end;
...
procedure TForm1.Button1Click(Sender: TObject);
var
  Outlook: OleVariant;
  ...
begin
  Outlook := CreateOleObject('Outlook.Application');
  FMailItem := Outlook.CreateItem(olMailItem);
  ...
  if Supports(FMailItem, IConnectionPointContainer, CPContainer) then begin
    CPContainer.FindConnectionPoint(DIID_ItemEvents, ConnectionPoint);
    if Assigned(ConnectionPoint) then
      ConnectionPoint.Advise(Self, FCookie);
  end;
  ...
  FMailItem.Display(True);
  ...
  if Assigned(ConnectionPoint) then begin
    ConnectionPoint.Unadvise(FCookie);
    ConnectionPoint := nil;
  end;
  ...
end;
procedure TForm1.MailSent;
begin
  ShowMessage(FMailItem.Body);
end;

Альтернативное решение

Пользователь также предложил альтернативное решение на VBA, которое использует обработку ошибок для определения, было ли письмо отправлено:

Public Sub SendEmail()
  On Error GoTo ErrorHandler
  ...
  Do
    ...
    If .Saved Then
      MsgBox "Your email was saved, but not sent."
    Else
      MsgBox "Your email was not sent."
    End If
  Loop While Not objMailItem.Sent
  ...
  Exit Sub
ErrorHandler:
  Select Case Err.DESCRIPTION
    Case "The item has been moved or deleted.":
      ' Email was sent, clean up and exit.
    Case Else
      Err.Raise Err.Number, Err.Source, Err.DESCRIPTION, Err.HelpFile, Err.HelpContext
  End Select
End Sub

Подведение итогов

Для автоматизации отправки электронных писем через Outlook в приложении на Delphi 2006 BDS необходимо использовать событие Send объекта письма. Это можно реализовать как с помощью ранней связи, так и с помощью поздней связи, но в случае с поздней связью потребуется больше кода для установки и обработки события. Альтернативное решение на VBA также может быть полезным, но оно предполагает взаимодействие с пользователем и ожидание его действий.

Создано по материалам из источника по ссылке.

Вопрос пользователя касается автоматизации процесса отправки электронных писем через Outlook в приложении, написанном на Delphi 2006 BDS, с использованием ранней или поздней связи для определения факта отправки письма и доступа к его тексту.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: OLE ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2024-12-26 15:50:14/0.0033719539642334/0