如何使用Delphi中的Outlook与其他电子邮件客户端不同?

时间:2011-10-20 00:48:20

标签: delphi outlook-2007

我在我的Delphi应用程序中创建了一个mapi消息,然后用户只需在其默认的mapi电子邮件客户端中发送消息,即格式化消息出现在他们的邮件客户端中,然后单击“发送”。

当电子邮件客户端是Thunderbird或Outlook Express时,一切都很有效,但是当它是Outlook(2007)时,事情就更奇怪了。例如,重点放在Outlook上,但用户无法关闭Outlook窗口,有时用户甚至无法在程序中使用鼠标 - 箭头在Outlook中消失。我发现自己必须从任务管理器关闭应用程序。

从我的新手角度来看,问题是控制表格和关注的问题,而不是简单或扩展的mapi;在这种情况下,后者似乎无关紧要。

有谁知道这里发生了什么?我应该如何更改代码来处理问题?

这是代码:

MapiMail1 := TMapiMail.Create(self);
try
  MapiMail1.Recipients.Add(MainGrid.AllCells[aCol, aRow]);
  MapiMail1.Subject := '';
  MapiMail1.Body := '';
  MapiMail1.EditDialog := True;
  MapiMail1.Send;
finally
  MapiMail1.Free;
end;

1 个答案:

答案 0 :(得分:3)

使用OLE而不是MAPI,Outlook运行良好。试试这个:

USES OleCtrls, ComObj;

procedure TForm1.Button1Click(Sender: TObject);
const
  olMailItem = 0;
var
  Outlook: OLEVariant;
  MailItem: Variant;
  MailInspector : Variant;
  stringlist : TStringList;
begin
  try
   Outlook:=GetActiveOleObject('Outlook.Application') ;
  except
   Outlook:=CreateOleObject('Outlook.Application') ;
  end;
  try
    Stringlist := TStringList.Create;
    MailItem := Outlook.CreateItem(olMailItem) ;
    MailItem.Subject := 'subject here';
    MailItem.Recipients.Add('someone@yahoo.com');
    MailItem.Attachments.Add('c:\boot.ini');
    Stringlist := TStringList.Create;
    StringList.Add('body here');
    MailItem.Body := StringList.text;
    MailInspector := MailItem.GetInspector;
    MailInspector.display(true); //true means modal
  finally
    Outlook := Unassigned;
    StringList.Free;
  end;
end;