ホームページ >バックエンド開発 >PHPチュートリアル >phpmailerを使用してメールを送信する際のSMTPエラーの解決策

phpmailerを使用してメールを送信する際のSMTPエラーの解決策

黄舟
黄舟オリジナル
2017-08-09 10:30:372633ブラウズ

以前プロジェクトに取り組んでいたときに、phpmailerを使ってメールを送信する機能「PHPmailerと組み合わせてメールを送信するCIフレームワーク」を昨日リリースしました(Sina Cloudを使い始めたばかりですが、あまりにも高価だったので)。 Alibaba に切り替えました。テスト中にメールを送信しましたが、予期せずエラーが報告されました。

オンラインでないときは、毎回正常に動作しました。 SMTP アドレスに問題があるのではないかと思いました (私は 163 のメール アドレスを使用しました)。その後、QQ メールボックスに変更しましたが、それでも機能しないことがわかり、Du Niang に問い合わせるしかありませんでした。 Baidu の回答を見て、「smtp」リクエストを受信する Google の SMTP サーバーを除いて、他のサーバーは私のようなものであることがわかりました。163 を使用する場合、QQ などは大文字の「smtp」リクエストを受信する必要があります。 ... うーん....

それからそれを

class.phpmailer.php


public function IsSMTP() {
    $this->Mailer = 'smtp';
  }

//改成
public function IsSMTP() {
    $this->Mailer = 'SMTP';
  }

に入れました:


 switch($this->Mailer) {
        case 'sendmail':
          return $this->SendmailSend($header, $body);
        case 'smtp':
          return $this->SmtpSend($header, $body);
        default:
          return $this->MailSend($header, $body);
      }


//改成
switch($this->Mailer) {
        case 'sendmail':
          return $this->SendmailSend($header, $body);
        case 'SMTP':
          return $this->SmtpSend($header, $body);
        default:
          return $this->MailSend($header, $body);
      }

最初はそれで十分だと思って、Apacheを再起動して、もう一度テストしましたその結果、最初のエラーは解決され、別のエラーが表示されました:

メール関数をインスタンス化できませんでした

? ? ? ? ?

私は運が悪かったので、Du Niang に助けを求めなければなりませんでしたが、最終的に理由がわかりました。一部の仮想ホストまたはサーバーがセキュリティ上の理由で「fsockopen() 関数」をブロックしていました。 、その結果、メールを送信できなくなります。

以下が解決策です:

まず、php.ini 内の次の 2 つのセミコロンを削除します

;extension=php_sockets.dll

;extension=php_openssl.dll

以前使用しましたPHPmailer では削除されてしまったので、ここにメモしておきます。

次に、fsockopen 関数を置き換えます

class.smtp.php ファイルの fsockopen 関数を pfsockopen 関数に置き換えます:


$this->smtp_conn = @fsockopen($host,    // the host of the server
                                 $port,    // the port to use
                                 $errno,   // error number if any
                                 $errstr,  // error message if any
                                 $tval);   // give up after ? secs


//fsockopen改为:
$this->smtp_conn = @pfsockopen($host,    // the host of the server
                                 $port,    // the port to use
                                 $errno,   // error number if any
                                 $errstr,  // error message if any
                                 $tval);   // give up after ? secs

これを設定した後、すでにメールを正常に送信できます。ご不明な点がございましたら、上記の例を参考にお試しください。

以上がphpmailerを使用してメールを送信する際のSMTPエラーの解決策の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。