2011-10-20 3 views
1

私はDelphiアプリケーションでmapiメッセージを作成し、デフォルトのmapiメールクライアントでメッセージを送信します。つまり、フォーマットされたメッセージがメールクライアントに表示され、「送信」をクリックします。DelphiでOutlookを他の電子メールクライアントとはどのように連携させていますか?

電子メールクライアントがThunderbirdまたはOutlook Expressの場合、すべてがうまくいきますが、Outlook(2007)のときは見知らぬものです。たとえば、Outlookにはフォーカスが当てられますが、ユーザーはOutlookウィンドウを閉じることができません。また、プログラム内でマウスを使用することもできません。矢印はOutlook内で消えます。私は自分自身がタスクマネージャからアプリを閉じる必要があることがわかります。

初心者の観点から見ると、この問題は、フォームを制御し、単純なマップや拡張されたマップに接続されているものよりも重視されます。後者はこのケースでは無関係と思われる。

ここで何が起こっているのか分かりますか?問題を処理するためにコードをどのように変更する必要がありますか?

この

はコードです:

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

私たちにあなたのコードを教えてください。その間にあなたは[ここ](http://www.imibo.com/imidev/delphi/les/index.html)を見ることができます。 DelphiでMAPIを使用する多くの複雑な例があります。 – TLama

+0

TLamaに感謝します。私はMike ShkolnikのMapiMailコンポーネント(www.scalabium.com)を使用しています。問題が何であれ、影響を受けるのはOutlook(2007)だと思われます。 –

答えて

3

OutlookがMAPIではなくOLEを使用して素晴らしい作品。試してみてください:

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('[email protected]'); 
    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; 
+1

ありがとう。 MailInspectorを使用すると、メッセージを表示することができます。 MailItem.Display(true)を使用すると、Delphi関数の終了後に「無効な関数」例外が発生していました。 –

関連する問題