2017-06-14 3 views
0

Magento 1.9.1をSMTP PRO(https://www.magentocommerce.com/magento-connect/smtp-pro-email-free-custom-smtp-email.html)を使用して電子メールを送信するために外部SMTPを使用するように設定しています。Zend Frameworkがsslソケット(Abstract.php)を開くことができません

設定(ホスト名、ポート、ユーザー名、パスワード)をセットアップしましたが、テスト電子メールを送信しようとすると「ソケットを開くことができませんでした」というエラーメッセージが表示されます。

$this->_socket = @stream_socket_client($remote, $errorNum, $errorStr, self::TIMEOUT_CONNECTION); 

     if ($this->_socket === false) { 
      if ($errorNum == 0) { 
       $errorStr = $remote.' Could not open socket '.phpversion(); 
      } 
      /** 
      * @see Zend_Mail_Protocol_Exception 
      */ 
      #require_once 'Zend/Mail/Protocol/Exception.php'; 
      throw new Zend_Mail_Protocol_Exception($errorStr); 
     } 

私のPHP環境(5.6.30)(OpenSSLサポートを持っている:私はコードに掘った場合、私はエラーがlibにコードのこの部分から生成される/ Zendの/メール/プロトコル/ Abstract.phpがいることがわかり私は、ターゲット・ホストまたはにポート465上の両方のtelnetが同じユーザーでphpmailerのを使用して同じSMTPを使ってメールを送ることができるようにファイアウォールの問題はありません SSL Support

[[email protected] httpdocs]# php -r 'print_r(stream_get_transports());' 
Array 
(
    [0] => tcp 
    [1] => udp 
    [2] => unix 
    [3] => udg 
    [4] => ssl 
    [5] => sslv3 
    [6] => sslv2 
    [7] => tls 
) 

)画像を見ると、以下のスニペットIサイト仮想ホストを実行するために使用します。

私はCentOS 7の64ビットサーバで、SELinuxは無効になっています。その場合、Plesk 12を使用して仮想ホストを設定しています。

名前解決も正常に動作しています(SMTP名を正しくpingでき、IPアドレスが正常に検索されています)。

私は明らかにここに何かが欠けています...しかし何ですか?

答えて

1

それがstream_socket_client(が想定するデフォルトのオプション)の観点から、PHPのバージョン5.6.30で変更されたものだったが判明しました。私は実際に起こっていたかを理解することができませんでしたMagentoのコアコードでstream_socket_clientコールの前に愚かな@を取り除く前に、すべての

まず。私はPHP開発者の近くではないので、私はその愚かな@プレフィックスが何であるかを忘れています(正直なところ、それがなぜ存在するのか分からない)。

@を除去した後、私はこれを見た:私は、PHPのドキュメントにビットを見て、私はコアコードに2つのラインの差分(私は「、これは適切ではないことを知っていると出てきた

Warning: stream_socket_client(): Peer certificate CN=`*.aruba.it' did not match expected CN=`mail.myclientreserveddomain.com' 

リファクタリングする必要がありますが、早急に回避策を共有したいと思います)。

基本的に私は、コンテキストを作成し、ピア名の検証をスキップstream_socket_clientコール

$context = stream_context_create(['ssl' => [ 
    'verify_peer' => false, 
    'verify_peer_name' => false 
    ]]); 
// open connection 
$this->_socket = stream_socket_client($remote, $errorNum, $errorStr, 120, STREAM_CLIENT_CONNECT, $context); 

の別のバージョンを使用していますが重要です。なぜ/どのように/それがPHP 5.6.30からPHP 5.6.30に変更されたのかわかりません(私はPHPデベロッパーではないと言いましたか?私もPHP 5.4.xで元のコードを実行しようとしましたが、回避策なしで動作しました。

関連する問題