3

私はコードを持っています:

procedure TfrmMain.btnSendClick(Sender: TObject);
var
  aMail: TJclEMail;
begin
  aMail := TJclEMail.Create;
  Screen.Cursor := crHourGlass;
  try
    aMail.Recipients.Add('service@blabla.com');
    aMail.Subject := '[IMPORTANT] blablba';

    aMail.Body := 'text text text text';
    aMail.Send(True);
  finally
    Screen.Cursor := crDefault;
    aMail.Free;
  end;
end;

これはスローします: MAPI エラー: (2) "一般的な MAPI エラー" 何か考えはありますか?

ps: OS Windows 7 Outlook 2010 Delphi 2007

4

3 に答える 3

2

私はあなたと同じで、クラス内にラップされているだけで動作しています。

Send() を初めて実行するときに、MAPI が正常かどうかを確認するために使用します。

function TMAPIPrerequisites.IsClientAvailable: Boolean;
var
  SimpleMAPI: TJclSimpleMapi;
begin
  SimpleMAPI := TJclSimpleMapi.Create;
  try
    Result := SimpleMAPI.AnyClientInstalled;
  finally
    SimpleMAPI.Free;
  end;
end;

function TMAPIPrerequisites.IsMapiAvailable: Boolean;
var
  SimpleMAPI: TJclSimpleMapi;
begin
  SimpleMAPI := TJclSimpleMapi.Create;
  try
    Result := SimpleMAPI.SimpleMapiInstalled;
  finally
    SimpleMAPI.Free;
  end;
end;
于 2012-12-27T22:54:32.160 に答える
0

私の問題は、私のJediライブラリが最新ではなかったことです。jediリポジトリを検索すると、JclMapiが12月27日火曜日に変更されました(Mantis 5748:JclMapiと64ビットの非互換性)。この変更をダウンロードし、pkgを再コンパイルすると、完全に機能するようになります。

ともあれ、ありがとう!!

于 2012-12-28T14:04:40.440 に答える
0

上記のコードは、電子メール クライアントがまだ実行されていない場合に正常に機能します。

同じ問題に苦労した後、MAPI クライアントは MAPI サーバー (電子メール クライアント - 私の場合は Thunderbird) と同じユーザー コンテキストで実行する必要があることがわかりました。

ただし、アプリからの呼び出しが管理者権限で開始された場合 (たとえば、デバッガーで実行されているアプリ)、MAPI 呼び出しはエラー コード 2 で失敗します。発信者と電子メール クライアントの両方が管理者として実行されている場合、すべてが機能します (しかし、誰が十分にクレイジーなのか)。最近、電子メール クライアントを管理者として実行するには?)。

于 2014-11-26T18:21:47.330 に答える