我在我的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;
答案 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;