ホームページ  >  記事  >  バックエンド開発  >  SMTP エラーの解決策: phpmailer が電子メールを送信するときに SMTP ホストに接続できませんでした

SMTP エラーの解決策: phpmailer が電子メールを送信するときに SMTP ホストに接続できませんでした

一个新手
一个新手オリジナル
2017-09-13 09:30:454614ブラウズ

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

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

それからそれを

class.phpmailer.php


1 public function IsSMTP() {
2     $this->Mailer = 'smtp';
3   }
4 
5 //改成
6 public function IsSMTP() {
7     $this->Mailer = 'SMTP';
8   }

に入れました:


 1 switch($this->Mailer) { 
 2         case 'sendmail': 
 3           return $this->SendmailSend($header, $body); 
 4         case 'smtp': 
 5           return $this->SmtpSend($header, $body); 
 6         default: 
 7           return $this->MailSend($header, $body); 
 8       } 
 9 
 10 
 11 //改成
 12 switch($this->Mailer) {
 13         case 'sendmail':
 14           return $this->SendmailSend($header, $body);
 15         case 'SMTP':
 16           return $this->SmtpSend($header, $body);
 17         default:
 18           return $this->MailSend($header, $body);
 19       }

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

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

? ? ? ? ?

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

以下が解決策です:

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

;extension=php_sockets.dll

;extension=php_openssl.dll

以前使用しましたPHPmailer では削除されましたが、ここでは単なるリマインダーです。

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

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


 1 $this->smtp_conn = @fsockopen($host,    // the host of the server 
 2                                                    $port,    // the port to use 
 3                                  $errno,   // error number if any 
 4                                  $errstr,  // error message if any 
 5                                  $tval);   // give up after ? secs 
 6  
 7  
 8 //fsockopen改为: 
 9 $this->smtp_conn = @pfsockopen($host,    // the host of the server
 10                                  $port,    // the port to use
 11                                  $errno,   // error number if any
 12                                  $errstr,  // error message if any
 13                                  $tval);   // give up after ? secs

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



以上がSMTP エラーの解決策: phpmailer が電子メールを送信するときに SMTP ホストに接続できませんでしたの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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