web-dev-qa-db-ja.com

SMTPホストに接続できませんでした

SMTPエラー:SMTPホストに接続できませんでした。メッセージを送信できませんでした。

メーラーエラー:SMTPエラー:SMTPホストに接続できませんでした。

CentOSでPHPMailerを動作させる方法が見つからないようです。 XAMPPを使用するWindowsではメールは問題なく機能しますが、Linuxでは常にこのエラーが発生します。

SMTPサーバーはポート25でリッスンしているLotusDominoであり、CentOSマシンにはファイアウォールがまったくなく、奇妙なことにmail()でさえ機能しません。何も返しません(Windowsでは1を返します)。 CentOSサーバー経由でtelnet経由でメールを送信する場合は問題なく動作するため、ネットワークの問題ではないと思います。 PHPに関連している必要がありますが、方法がわかりません。

<?php
require("class.phpmailer.php");
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->Host = "192.168.x.x";
$mail->SMTPAuth = false;
$mail->From = "[email protected]";
$mail->FromName = "XXX";
$mail->AddAddress("[email protected]");
$mail->IsHTML(true);
$mail->Subject = "Test";
$mail->Body    = "Test";
if(!$mail->Send())
{
   echo "Message could not be sent. <p>";
   echo "Mailer Error: " . $mail->ErrorInfo;
   exit;
}
echo "Message has been sent";
?>

上記のコードを明確にするために、XAMPP(Windows)で動作します。

PHPMailerでエラーをデバッグしましたが、ここでエラーが発生します(class.smtp.phpメソッドConnect()):

$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
// verify we connected properly
if(empty($this->smtp_conn)) {
  $this->error = array("error" => "Failed to connect to server",
                       "errno" => $errno,
                       "errstr" => $errstr);
  if($this->do_debug >= 1) {
    echo "SMTP -> ERROR: " . $this->error["error"] . ": $errstr ($errno)" . $this->CRLF . '<br />';
  }
  return false;
}

ソケットを開けられないようです...

PDATE: $ mail-> SMTPDebug = 2を使用します。 Alvaroが提案したように、次の出力が生成されました。

SMTP->エラー:サーバーへの接続に失敗しました:アクセスが拒否されました(13)

13
raz3r

SMTPDebugプロパティを使用してデバッグモードを有効にできます。例:

$mail = new PHPMailer();
// 1 = errors and messages
// 2 = messages only
$mail->SMTPDebug  = 2;

エラーメッセージが画面にエコーされます。

更新:

fsockopen() を使用したpermissiondeniedエラーメッセージは、ユーザーPHPが、ソケット。ファイアウォールがないことを再確認した場合は、 SELinuxの問題 :-?である可能性があります。

12

OS CentOS 6.3

メールを送信できませんでした

いくつかの調査の結果、SELinuxが通信をブロックしていることが判明しました

SELinuxはデフォルトでアクティブ化され、構成されています。そのため、SELinuxは、Apache(httpd、phpmailer)がsendmail関数を使用して、あらゆる種類のネットワーク接続を確立することを許可していません。

Getseboolコマンドを使用して、httpddemonがネットワーク経由で接続して電子メールを送信できるかどうかを確認できます。

getsebool httpd_can_sendmail
getsebool httpd_can_network_connect

このコマンドは、ブール値のオンまたはオフを返します。オフの場合は、以下を使用してオンに設定できます。

Sudo setsebool -P httpd_can_sendmail 1
Sudo setsebool -P httpd_can_network_connect 1

これで、php、コードをテストして、SendMailが正しく機能するかどうかを確認できます。

39
user2365804