4

そのため、複数のメールボックスにアクセスできる汎用/アプリケーション/システム アカウント (用語は異なります) を持っています。私が使用するユーザー名は の形式<domain>/<username>/<mailbox>であり、これが唯一の「普通ではない」ものです。次の行は、PHP 7.0.6 (私のラップトップ) では機能しますが、5.4.16 (開発サーバー) では機能しません。

$mbox = imap_open("<host>:993/ssl/novalidate-cert", 
               "<domain>/<username>/<mailbox>", <pass>,
               NULL, array('DISABLE_AUTHENTICATOR' => 'GSSAPI'));

私が得るエラーは次のとおりです。

PHP 通知: 不明: IMAP サーバーを認証できません: AUTHENTICATE に失敗しました。(errflg=2) in Unknown 行 0

私が試したこと:

  • <domain>/<user>機能するメールボックスの元のアカウント (形式のユーザー名)
  • /debugin$mailboxとflag の使用OP_DEBUG- どれも役に立たなかった
  • Python を使用してサーバーへのメッセージをデバッグします。これにより、ユーザー名が 3 セグメントの文字列として送信され、機能することも確認されます
  • 後で選択できると思って 3 番目のセグメント (メールボックス) を削除すると、両方のケース/バージョンで認証が失敗する

質問:

  1. これはPHPのバグですか?
  2. これを行う他の方法はありますか?(PHPのバージョンは変更できません)
  3. どうにかしてメッセージ ログを有効にすることはできますか? (ルートがないため、tcpdump オプションはありません)
4

1 に答える 1

0

私の意見では、次のようなことを試みることができます。

$mbox = imap_open("<host>:993/ssl/novalidate-cert", 
               "<domain>/<username>/<mailbox>", <pass>,
               NULL, array('DISABLE_AUTHENTICATOR' => 'GSSAPI')) or 
                   die(var_dump(imap_errors()));

より多くのエラーを確認できるはずです。次に、GSSAPI の代わりに PLAIN に切り替えて、n_retries を 1 に設定し、最後に IMAP に関するフラグを追加してみてください。

$mbox = imap_open("<host>:993/imap/ssl/novalidate-cert", 
                   "<domain>/<username>/<mailbox>", <pass>,
                   NULL,  1, array('DISABLE_AUTHENTICATOR' => 'PLAIN')) or 
                       die(var_dump(imap_errors()));

サポートしていない認証プロトコルを許可しない Exchange に問題があると思います。Winで実行していて動作し、開発環境がLinuxである場合、これがその問題であるとほぼ確信しています。

于 2016-06-28T10:38:23.960 に答える