ホームページ >バックエンド開発 >PHPチュートリアル >phpmailerを使用してメールを送信する際のSMTPエラーの解決策
以前プロジェクトに取り組んでいたときに、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 サイトの他の関連記事を参照してください。