2

私が現在取り組んでいるプロジェクトでは、ユーザーがサポート デスクにメールを送信したときに、チケットのステータスを「クローズ」から「再開」に変更できる機能を追加しようとしています。また、メールの返信をデータベースに保存したいと思います。

私が直面している問題は、現在の Apache 構成で PHP の IMAP 関数を動作させることができないことです。ここのstackoverflowや他の場所でかなりの数の投稿を見ると、問題は標準構成でOpenSSLが有効になっていないようです。たとえば、このコードを実行すると、次のようになります。

<h1>IMAP testing!</h1>
<?php
$connect = "{imap.gmail.com:993/imap/ssl/novalidate-cert}INBOX";
$user    = "my email address @gmail.com";
$pass    = "my password";

$mailbox = imap_open($connect, $user, $pass);
?>

エラーが発生します:

Can't open mailbox {imap.gmail.com:993/imap/ssl/novalidate-cert}INBOX: invalid remote specification.

PHP を再コンパイルする以外に、ローカル マシンで IMAP 機能を模倣して、電子メール (電子メール パイピング) を操作する機能の開発を継続できるようにするためにできることはありますか?

役立つ場合に備えて、現在の構成に関するいくつかのメモ:

  • OS X 10.7.4
  • PHP v.5.3.1

アップデート -

私はもうすぐそこにいます(dAm2Kのおかげで)!

Stunnel を (Mac Ports を使用して) インストールし、最終的にすべてを構成して、次のコマンドを実行しました。

sudo stunnel /opt/local/etc/stunnel/stunnel.conf -c -d 127.0.0.1:443 -r imap.gmail.com:993

(何らかの理由で、パスを .conf ファイルに追加する必要がありました)

今私のコードは次のようになります:

<?php
$connect = "{localhost:443}INBOX";
$user    = "my email address @gmail.com";
$pass    = "my password";

$mailbox = imap_open($connect, $user, $pass);
?>

ページをロードすると、30 秒ほどハングアップし、次の警告が表示されます。

Notice: Unknown: Connection failed to localhost,443: Operation timed out (errflg=2) in Unknown on line 0

興味深いのは、$connect を次のように変更すると、

$connect = "{localhost:443/ssl}INBOX";

また

$connect = "{localhost:443/novalidate-cert}INBOX";

元のエラーが表示されます。これは次のとおりです。

Notice: Unknown: Can't open mailbox {localhost:443/novalidate-cert}INBOX: invalid remote specification (errflg=2) in Unknown on line 0

何か案は?単なる推測ですが、stunnel のセットアップに関係している可能性があります。たとえば、自己署名証明書や、欠落している stunnel.conf ファイルに関係するものでしょうか?

どうもありがとう。

ティム

4

1 に答える 1

1

ポート 993 で imap.gmail.com に送信される送信 TCP パケットをブロックするファイアウォールを使用している可能性があります。

システム管理者に、dport 993 (imaps) で発信 TCP を確認するよう依頼してください。DNS が imap.gmail.com を解決しているかどうかも確認します。

コマンド:

telnet imap.gmail.com 993

有効な接続が得られるはずです。成功しない場合は、問題が見つかりました。

オフラインで開発を続けるために、開発マシンに IMAP サーバーをインストールしたい場合があります...「courier imap」パッケージをインストールできますが、それは非常に単純な作業ではありません...

接続が成功し、コマンドが次の場合:

openssl s_client -connect imap.gmail.com:993

有効な接続が得られる場合、libc-client に SSL サポートがコンパイルされていないことが問題である可能性があります。この場合、PHP で imap を使用することはできず、「stunnel」コマンドを使用して、サーバーから発信されたクリア トラフィックを転送できます。 gmail IMAP サーバーに暗号化されるローカル マシン。

コマンド:

stunnel -c -d 127.0.0.1:443 -r imap.gmail.com:993

トリックを行う必要があります。このようにして、PHP スクリプトを 127.0.0.1:443 に接続できます。

<?
  $connect = "{localhost:443}INBOX";
?>
于 2012-05-14T12:39:51.090 に答える