phpmailer无法发送电子邮件

时间:2018-08-13 03:59:58

标签: php email phpmailer send

其他都可以,但是由于某些原因我无法发送电子邮件:

<?php    
$msg="";

use PHPMailer\PHPMailer\PHPMailer;
include_once "PHPMailer/PHPMailer.php";
include_once "PHPMailer/Exception.php";

if(isset($_POST['submit'])) {
    $subject=$_POST['subject'];
    $email=$_POST['email'];
    $message=$_POST['message'];


    $mail= new PHPMailer();

     $mail->AddAddress('nkhlpatil647@gmail.com', 'First Name');
     $mail->SetFrom('nkhlpatil647@gmail.com','admin');


    $mail->Subject = $subject; 
   $mail-> isHTML(true); 
   $mail->Body=$message;

    if($mail->send())
        $msg="Your rmail msg has been send";
     else
       $msg="mail msg has not been send";
}
?>

$mail->send()函数始终转到else部分。我在做什么错了?

2 个答案:

答案 0 :(得分:1)

您没有声明发送邮件的内容,这可能是原因之一。 PHPMailer实际上并不发送电子邮件,它被设计为挂接到Web服务器上可以发送电子邮件的内容,例如:sendmail,postfix,与邮件中继服务的SMTP连接等,因此您可能需要声明在您的设置中。

例如,如果您使用的是Web服务器内置的sendmail,请在

之后添加
$mail = new PHPMailer;
// declare what mail function you are using
$mail->isSendmail();

PHPMailer也支持其他几个选项,例如SMTP和gmail。请参阅以下示例以最适合您的情况:https://github.com/PHPMailer/PHPMailer/tree/master/examples

此外,这是我的设置方式,不确定require或include_once是否最佳,但我的安装效果很好。另外,我还添加了SMTP模块,以便通过sendmail使用该模块。

// require php mailer classes
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

// require php mailer scripts
require 'src/Exception.php';
require 'src/PHPMailer.php';
require 'src/SMTP.php';

这是我的PHPMailer个人安装实际上如何工作的方式,该过程通过PHP实例化,而不是通过Composer安装。我在SO的另一篇文章-How to use PHPMailer without composer?

中使用了此答案

答案 1 :(得分:0)

我认为始终使用花括号是一种很好的编码实践。这是参考您的if / else语句。

除此之外,我在您的代码中看不到任何可直接跳出并指出问题区域的信息。

请确保您所有的$ _POST变量都在回显其期望值。

也回显您的消息,以确保它正在输出您的期望值。

您不希望这些参数中的任何一个为空。

PHPMailer类具有错误处理。我建议您使用try / catch块来显示存在的任何可能的错误并从那里进行故障排除。

您也可以使用$mail->ErrorInfo;。这将显示在$mail->send()函数调用之后生成的所有错误。我已经在回答中包含了这两个概念。

像这样:

$msg="";

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception; //<---Add this.

//Switch your includes to requires.
require "PHPMailer/PHPMailer.php";
require "PHPMailer/Exception.php";
//require "PHPMailer/SMTP.php";  //If you are using SMTP make sure you have this line.

if(isset($_POST['submit'])) {

  try{

    $subject =$_POST['subject'];
    $email =$_POST['email'];
    $message =$_POST['message'];


    //$mail = new PHPMailer();
    $mail = new PHPMailer(true); //Set to true. Will allow exceptions to be passed.

    $mail->AddAddress('nkhlpatil647@gmail.com', 'First Name');
    $mail->SetFrom('nkhlpatil647@gmail.com','admin');


    $mail->Subject = $subject; 
    $mail->isHTML(true); 
    $mail->Body = $message;

    if($mail->send()){

      $msg="Your email msg has been send";


    }else{

       $msg="mail msg has not been send"; 
       echo 'Mailer Error: ' . $mail->ErrorInfo;
     }

   }catch(phpmailerException $e){

      echo $e->errorMessage();

   }

} 

如果您使用的是SMTP,则可以尝试使用$mail->SMTPDebug设置进​​行播放。可能会为您提供一些其他信息。检查PHPMailer文档中的值及其属性。