最近 dede を使ってウェブサイトを構築しているのですが、SMTP がバックグラウンドでメールを送信できるようにする設定があるのを見ましたが、検証されていません。 PHP マスターの皆さん、入力された SMTP 情報が正しいかどうかをどのように確認しますか? 検証にはポート、ユーザー名、パスワードが含まれますか? PHP コードを実装して、これらのエラー メッセージを出力してください。100 点!ありがたい。
SMTP によるメール送信を有効にするための dede の設定用のプラグインをインストールしましたか?
ローカルにインストールした最新の dede にはこの機能の設定がないようです
上の階のダニエルに戻りますが、smtp 情報が正しいかどうかを確認するだけで済み、dede プラグインを作成する必要はありません。
//SMTP サーバーのポートを開きます
$fp = @fsockopen($smtp_host, 25);
if (!$fp)
echo "Error: ".$smtp_host に接続できません"
";
$smtp = array( //1、EHLO,期待返回220或者250 array("EHLO ".$loc_host.$lb,"220,250","HELO error: "), //2、发送Auth Login,期待返回334 array("AUTH LOGIN".$lb,"334","AUTH error:"), //3、发送经过Base64编码的用户名,期待返回334 array(base64_encode($smtp_acc).$lb,"334","AUTHENTIFICATION error : "), //4、发送经过Base64编码的密码,期待返回235 array(base64_encode($smtp_pass).$lb,"235","AUTHENTIFICATION error : ") ); //5、发送Mail From,期待返回250 $smtp[] = array("MAIL FROM: <".$from.">".$lb,"250","MAIL FROM error: "); //6、发送Rcpt To。期待返回250 $smtp[] = array("RCPT TO: <".$to.">".$lb,"250","RCPT TO error: "); //7、发送DATA,期待返回354 $smtp[] = array("DATA".$lb,"354","DATA error: "); //8.0、发送From $smtp[] = array("From: ".$from.$lb,"",""); //8.2、发送To $smtp[] = array("To: ".$to.$lb,"",""); //8.1、发送标题 $smtp[] = array("Subject: ".$subject.$lb,"","");$result_str=""; //发送smtp数组中的命令/数据 foreach($smtp as $req) { //发送信息 @fputs($fp, $req[0]); //如果需要接收服务器返回信息,则 if($req[1]) { //接收信息 while($result = @fgets($fp, 1024)) { if(substr($result,3,1) == " ") { break; } }; if (!strstr($req[1],substr($result,0,3))) { $result_str.=$req[2].$result."<br>"; } } } //关闭连接 @fclose($fp); return $result_str; }
SMTP のポート、ユーザー名、パスワードを確認しようとしたことはありませんが、ユーザー名とパスワードについては、それを要求してみるしかありません。 ...
function smtp_sockopen_relay()
{
$this->log_write("Trying to ".$this->relay_host.":".$this->smtp_port."n"); ->sock = @fsockopen($this->relay_host, $this->smtp_port, $errno, $errstr, $this->time_out)
if (!($this->sock && $this) ->smtp_ok ()))
{
$this->log_write("エラー: リレー ホスト ".$this->relay_host."n" に接続できません。");
$this->log_write("エラー: ".$ errstr. (".$errno.")n");
return FALSE;
}
$this->log_write("リレー ホスト ".$this->relay_host."n" に接続しました);
TRUE を返す;;