Php 如何修复警告:mail()[function.mail]:SMTP服务器响应:需要530 SMTP身份验证。在C:\xampp\htdocs\。。第22行错误

Php 如何修复警告:mail()[function.mail]:SMTP服务器响应:需要530 SMTP身份验证。在C:\xampp\htdocs\。。第22行错误,php,xampp,mail-server,Php,Xampp,Mail Server,我是PHP新手,在网上以一个脚本为例。 我已经安装了Xampp,php已经安装并运行。 我尝试用hMailServer设置本地邮件服务器,但是我不完全确定是否正确设置。 无论如何,下面是PHP代码: <?php $subject=""; $detail=""; $customer_mail=""; $name=""; // Contact subject $subject ="$subject"; // Details $message="$detail"; // Mail of

我是PHP新手,在网上以一个脚本为例。 我已经安装了Xampp,php已经安装并运行。 我尝试用hMailServer设置本地邮件服务器,但是我不完全确定是否正确设置。 无论如何,下面是PHP代码:

<?php

$subject="";
$detail="";
$customer_mail="";
$name="";

// Contact subject
$subject ="$subject"; 

// Details
$message="$detail";

// Mail of sender
$mail_from="$customer_mail"; 

// From 
$header="from: $name <$mail_from>";

// Enter your email address
$to ='sean.myers92@gmail.com';
$send_contact=mail($to,$subject,$message,$header);

// Check, if message sent to your email 
// display message "We've recived your information"
if($send_contact){
echo "We've recived your contact information";
}
else {
echo "ERROR";
}
?>

Xampp没有内置邮件服务器。你需要设置一个


或者,使用另一个stmp服务器(即Google mail)和一个邮件库(如PEAR:mail或swiftmailer)来建立一个imap/smtp连接,该连接具有登录凭据

其未配置的php,您可以更新以指向有效的smtp服务器 在php.ini中查找
[邮件函数]
这仅适用于windows 您可能希望在本地设置邮件服务器,因为它不支持密码或密码 使用可从以下站点获得的phpmailer
它确实支持登录

从这个链接下载最新的phpmailer并阅读它的gmail教程。对我来说,它也可以从本地系统工作:)+这是一个非常简单的教程

/** *如果成功,则返回错误字符串或null */


函数authSendEmail($sendto、$replyto、$subject、$message、$namefrom=”“){
//SMTP+服务器详细信息
/****配置开始***/
$smtpServer=“mail.server.com”;
$port=“25”;
$timeout=“5”;
$username=”test@server.com";
$password=“test”;
$newLine=“\r\n”;
/***配置结束*****/

  /*
  2ХХ — команда успешно выполнена
  3XX — ожидаются дополнительные данные от клиента
  4ХХ — временная ошибка, клиент должен произвести следующую попытку через некоторое время
  5ХХ — неустранимая ошибка
  */


  //0    //Connect to the host on the specified port
      $smtpConnect = fsockopen($smtpServer, $port, $errno, $errstr, $timeout);
      $smtpResponse = fgets($smtpConnect, 1024);
      if(empty($smtpConnect) || $smtpResponse{0} !='2' )
      {
        return  "Failed to connect: $smtpResponse";
      }


  //1    //hello server
      fputs($smtpConnect,"EHLO servername" . $newLine);
      $smtpResponse = fgets  ($smtpConnect);
      if($smtpResponse{0} !='2' )
        return "Failed: $smtpResponse";

      $smtpResponse = fgets  ($smtpConnect);
      if($smtpResponse{0} !='2' )
        return "Failed: $smtpResponse";

      $smtpResponse = fgets  ($smtpConnect);
      if($smtpResponse{0} !='2' )
        return "Failed: $smtpResponse";
      $smtpResponse = fgets  ($smtpConnect);
      if($smtpResponse{0} !='2' )
        return "Failed: $smtpResponse";
      $smtpResponse = fgets  ($smtpConnect);
      if($smtpResponse{0} !='2' )
        return "Failed: $smtpResponse";
      $smtpResponse = fgets  ($smtpConnect);
      if($smtpResponse{0} !='2' )
        return "Failed: $smtpResponse";

  //2    //Request Auth Login
      fputs($smtpConnect,"AUTH LOGIN" . $newLine);
      $smtpResponse = fgets($smtpConnect, 1024);
      if($smtpResponse{0} !='3' )
        return "Failed: $smtpResponse";

  //3    //Send username
      fputs($smtpConnect,  base64_encode($username).$newLine);
      $smtpResponse = fgets($smtpConnect, 1024);
      if($smtpResponse{0} !='3' )
        return "Authentification failed: $smtpResponse";

  //4    //Send password
      fputs($smtpConnect,  base64_encode($password).$newLine);
      $smtpResponse = fgets($smtpConnect, 1024);
      if($smtpResponse{0} !='2' )
        return "Failed: $smtpResponse";


  //6    //Email From
      fputs($smtpConnect, "MAIL FROM: ".$username . $newLine);
      $smtpResponse = fgets($smtpConnect, 1024);
      if($smtpResponse{0} !='2' )
        return "Failed: $smtpResponse";

  //7    //Email To
      fputs($smtpConnect, "RCPT TO: ".$sendto . $newLine);
      $smtpResponse = fgets($smtpConnect, 1024);
      if($smtpResponse{0} !='2' )
        return "Failed: $smtpResponse";

  //8    //The Email
      fputs($smtpConnect, "DATA" . $newLine);
      $smtpResponse = fgets($smtpConnect, 1024);
      if($smtpResponse{0} !='3' )
        return "Failed: $smtpResponse";

  //9 //Construct Headers
      $headers = "MIME-Version: 1.0" . $newLine;
      $headers .= "Content-type: text/html; charset=windows-1251" . $newLine;
      $headers .= "To: Администратор <$sendto>" . $newLine;
      $headers .= "From: $namefrom <$username>" . $newLine;
      $headers .= "Reply-To: $namefrom <$replyto>" . $newLine;
      $headers .= "X-Mailer: ".phpversion(). $newLine;

      fputs($smtpConnect, "Subject: $subject\n$headers\n\n$message\n.\n" );
      $smtpResponse = fgets($smtpConnect, 515);
      if($smtpResponse{0} !='2' )
        return "Failed: $smtpResponse";


  //10    // Say Bye to SMTP
      fputs($smtpConnect,"QUIT" . $newLine);
      $smtpResponse = fgets($smtpConnect, 1024);
      if($smtpResponse{0} !='2' )
        return "Failed: $smtpResponse";

      return false;
}

?>
/*
2ХХ — команда успешно выполнена
3XX-3XX-3XX-3XX-3XX-3XX-3XX-3XX-3XX-3XX-3XX-3XX-3XX-3XX-3XX-3XX-3XX-3XX-3XX-3XX-3XX-3XX-3XX-3XX-3XX-3XX-3XX-3XX-3XX-3XX-3XX-3XX-3XX-3XX
4ХХ — временная ошибка, клиент должен произвести следующую попытку через некоторое время
5ХХ — неустранимая ошибка
*/
//0//连接到指定端口上的主机
$smtpConnect=fsockopen($smtpServer、$port、$errno、$errstr、$timeout);
$smtpResponse=fgets($smtpConnect,1024);
if(空($smtpConnect)| |$smtpResponse{0}!='2')
{
返回“连接失败:$smtpResponse”;
}
//1//hello服务器
fputs($smtpConnect,“EHLO服务器名”。$newLine);
$smtpResponse=fgets($smtpConnect);
if($smtpResponse{0}!='2')
返回“失败:$smtpResponse”;
$smtpResponse=fgets($smtpConnect);
if($smtpResponse{0}!='2')
返回“失败:$smtpResponse”;
$smtpResponse=fgets($smtpConnect);
if($smtpResponse{0}!='2')
返回“失败:$smtpResponse”;
$smtpResponse=fgets($smtpConnect);
if($smtpResponse{0}!='2')
返回“失败:$smtpResponse”;
$smtpResponse=fgets($smtpConnect);
if($smtpResponse{0}!='2')
返回“失败:$smtpResponse”;
$smtpResponse=fgets($smtpConnect);
if($smtpResponse{0}!='2')
返回“失败:$smtpResponse”;
//2//请求身份验证登录
fputs($smtpConnect,“身份验证登录”。$newLine);
$smtpResponse=fgets($smtpConnect,1024);
if($smtpResponse{0}!='3')
返回“失败:$smtpResponse”;
//3//发送用户名
fputs($smtpConnect,base64_encode($username)。$newLine);
$smtpResponse=fgets($smtpConnect,1024);
if($smtpResponse{0}!='3')
返回“身份验证失败:$smtpResponse”;
//4//发送密码
fputs($smtpConnect,base64_encode($password)。$newLine);
$smtpResponse=fgets($smtpConnect,1024);
if($smtpResponse{0}!='2')
返回“失败:$smtpResponse”;
//6//
fputs($smtpConnect,“邮件发件人:”.$username.$newLine);
$smtpResponse=fgets($smtpConnect,1024);
if($smtpResponse{0}!='2')
返回“失败:$smtpResponse”;
//7//发送电子邮件至
FPUT($smtpConnect,“RCPT TO:”.$sendto.$newLine);
$smtpResponse=fgets($smtpConnect,1024);
if($smtpResponse{0}!='2')
返回“失败:$smtpResponse”;
//8//电子邮件
FPUT($smtpConnect,“数据”。$newLine);
$smtpResponse=fgets($smtpConnect,1024);
if($smtpResponse{0}!='3')
返回“失败:$smtpResponse”;
//9//构造标题
$headers=“MIME版本:1.0”。$newLine;
$headers.=“内容类型:text/html;charset=windows-1251”。$newLine;
$headers.=“To:Аааааааа”。$newLine;
$headers.=“From:$namefrom”。$newLine;
$headers.=“回复:$namefrom”。$newLine;
$headers.=“X-Mailer:”.phpversion().$newLine;
fputs($smtpConnect,“主题:$Subject\n$headers\n\n$message\n.\n”);
$smtpResponse=fgets($smtpConnect,515);
if($smtpResponse{0}!='2')
返回“失败:$smtpResponse”;
//10//向SMTP说再见
fputs($smtpConnect,“退出”。$newLine);
$smtpResponse=fgets($smtpConnect,1024);
if($smtpResponse{0}!='2')
返回“失败:$smtpResponse”;
返回false;
}
?>

从hMailServer的论坛:


在IP范围内。转到my computer ip范围并取消本地到外部和/或外部到外部的身份验证。

感谢您的快速响应,我已将hMailServer用于邮件服务器,并尝试使用google mail和local,但没有效果。关于我应该为google mail使用的设置,有什么建议吗?请参阅尝试遵循本教程,修改我之前所做的php.ini。但是,将更改放在sendmail文件中的位置并不十分明显。你知道把它放在哪里吗?
  /*
  2ХХ — команда успешно выполнена
  3XX — ожидаются дополнительные данные от клиента
  4ХХ — временная ошибка, клиент должен произвести следующую попытку через некоторое время
  5ХХ — неустранимая ошибка
  */


  //0    //Connect to the host on the specified port
      $smtpConnect = fsockopen($smtpServer, $port, $errno, $errstr, $timeout);
      $smtpResponse = fgets($smtpConnect, 1024);
      if(empty($smtpConnect) || $smtpResponse{0} !='2' )
      {
        return  "Failed to connect: $smtpResponse";
      }


  //1    //hello server
      fputs($smtpConnect,"EHLO servername" . $newLine);
      $smtpResponse = fgets  ($smtpConnect);
      if($smtpResponse{0} !='2' )
        return "Failed: $smtpResponse";

      $smtpResponse = fgets  ($smtpConnect);
      if($smtpResponse{0} !='2' )
        return "Failed: $smtpResponse";

      $smtpResponse = fgets  ($smtpConnect);
      if($smtpResponse{0} !='2' )
        return "Failed: $smtpResponse";
      $smtpResponse = fgets  ($smtpConnect);
      if($smtpResponse{0} !='2' )
        return "Failed: $smtpResponse";
      $smtpResponse = fgets  ($smtpConnect);
      if($smtpResponse{0} !='2' )
        return "Failed: $smtpResponse";
      $smtpResponse = fgets  ($smtpConnect);
      if($smtpResponse{0} !='2' )
        return "Failed: $smtpResponse";

  //2    //Request Auth Login
      fputs($smtpConnect,"AUTH LOGIN" . $newLine);
      $smtpResponse = fgets($smtpConnect, 1024);
      if($smtpResponse{0} !='3' )
        return "Failed: $smtpResponse";

  //3    //Send username
      fputs($smtpConnect,  base64_encode($username).$newLine);
      $smtpResponse = fgets($smtpConnect, 1024);
      if($smtpResponse{0} !='3' )
        return "Authentification failed: $smtpResponse";

  //4    //Send password
      fputs($smtpConnect,  base64_encode($password).$newLine);
      $smtpResponse = fgets($smtpConnect, 1024);
      if($smtpResponse{0} !='2' )
        return "Failed: $smtpResponse";


  //6    //Email From
      fputs($smtpConnect, "MAIL FROM: ".$username . $newLine);
      $smtpResponse = fgets($smtpConnect, 1024);
      if($smtpResponse{0} !='2' )
        return "Failed: $smtpResponse";

  //7    //Email To
      fputs($smtpConnect, "RCPT TO: ".$sendto . $newLine);
      $smtpResponse = fgets($smtpConnect, 1024);
      if($smtpResponse{0} !='2' )
        return "Failed: $smtpResponse";

  //8    //The Email
      fputs($smtpConnect, "DATA" . $newLine);
      $smtpResponse = fgets($smtpConnect, 1024);
      if($smtpResponse{0} !='3' )
        return "Failed: $smtpResponse";

  //9 //Construct Headers
      $headers = "MIME-Version: 1.0" . $newLine;
      $headers .= "Content-type: text/html; charset=windows-1251" . $newLine;
      $headers .= "To: Администратор <$sendto>" . $newLine;
      $headers .= "From: $namefrom <$username>" . $newLine;
      $headers .= "Reply-To: $namefrom <$replyto>" . $newLine;
      $headers .= "X-Mailer: ".phpversion(). $newLine;

      fputs($smtpConnect, "Subject: $subject\n$headers\n\n$message\n.\n" );
      $smtpResponse = fgets($smtpConnect, 515);
      if($smtpResponse{0} !='2' )
        return "Failed: $smtpResponse";


  //10    // Say Bye to SMTP
      fputs($smtpConnect,"QUIT" . $newLine);
      $smtpResponse = fgets($smtpConnect, 1024);
      if($smtpResponse{0} !='2' )
        return "Failed: $smtpResponse";

      return false;
}

?>