Outlook通过COM使用用户设置发送邮件

时间:2014-06-30 16:24:00

标签: delphi email com outlook delphi-xe5

我有一个可以通过COM访问Outlook的工作应用程序,并发送,保存或显示我在此应用程序中创建的电子邮件。

我想要的是Outlook中的帐户的所有设置也应用于我的邮件,因此这意味着哪种邮件类型(文本,HTML或富),自定义字体,签名等。

这里有一个SSCCE(代码的其余部分只是一些日志记录,表单只包含最需要的控件):

...
strict private
  FOutlook: _Application;
...

procedure TMainForm.ShowMailDlg(aModal: Boolean);
var
  mail: _MailItem;
begin
  Connect();
  mail := FOutlook.CreateItem(olMailItem) as _MailItem;
  mail.Recipients.Add(Trim(EdTo.Text));
  mail.CC := Trim(EdCc.Text);
  mail.Subject := Trim(EdSubject.Text);
  mail.Body := EmailText.Lines.Text;
  mail.SendUsingAccount := GetAccountForEmailAddress(Trim(EdFrom.Text));
  //mail.Attachments.Add('Path1', olByValue, 1, 'Caption1');
  //mail.Attachments.Add('Path2', olByValue, 2, 'Caption2');
  mail.Display(aModal);
end;

procedure TMainForm.Connect;
begin
  FOutlook := CreateOleObject('Outlook.Application') as _Application;
end;

function TMainForm.GetAccountForEmailAddress(const aSmtp: string): _Account;
var
  accounts: _Accounts;
  account: _Account;
  i: Integer;
begin
  accounts := FOutlook.Session.Accounts;
  for i := 1 to accounts.Count do begin
    account := accounts.Item(i);
    if LowerCase(account.SmtpAddress) = LowerCase(aSmtp) then begin
      Result := account;
      Exit;
    end;
  end;
  raise Exception.Create('No Account with SMTP address ' + aSmtp + ' found!');
end;

如何让MailItem使用所选帐户中的所有格式选项?

1 个答案:

答案 0 :(得分:0)

我仍然没有找到真正的解决方案,但这是一种解决方法。

诀窍是使用CreateItemFromTemplate - 方法,其中模板包含所有设置。显然,用户需要为此目的创建一个模板,但这是一次性行动,并且太难了。

procedure TMainForm.DoMailAction(aAction: TMailAction);
var
  mail: _MailItem;
  folder: OleVariant;
begin
  Connect();
  folder := FOutlook.Session.GetDefaultFolder(olFolderDrafts);
  mail := FOutlook.CreateItemFromTemplate('C:\\Users\\fkoch\\default.oft', folder) as _MailItem;
...

此外,所选文件夹"草稿"只要mailI对话框(mail.display(False))中的用户手动发送mailItem,就会导致签名附加到mailbody。当通过mail.send()mail.save()直接处理时,这种情况不会发生。