【问题标题】:Why phpmailer is not sending mail to my domain mail server为什么 phpmailer 不向我的域邮件服务器发送邮件
【发布时间】:2020-08-05 03:31:13
【问题描述】:

我正在尝试将邮件发送到我的域邮件服务器: 我使用了一个 try{} catch(){} 来检测是否有任何错误,但令人惊讶的是,没有任何错误。

<?php 
function Redirect_to($New_Location){
    header("Location:" . $New_Location);
    exit;
}
if(isset($_POST['Submitenq'])){
    require('phpmailer/PHPMailerAutoload.php');

    define ('GUSER','courses@cadcentreju.org');
    define ('GPWD','mymailpass');

    $recever1 = 'courses@cadcentreju.org';

    $enq_name = $_POST["enq_name"];
    $enq_email = $_POST["enq_email"];
    $enq_phone = $_POST["enq_phone"];
    $enq_message = $_POST["enq_message"];

    date_default_timezone_set("Asia/Kolkata");
    $CurrentTime = time();
    $DateTime = strftime("%B-%d-%Y %H:%M:%S",$CurrentTime);
    
    if(empty($enq_name) || empty($enq_email) || empty($enq_phone) || empty($enq_message)){
        Redirect_to("index.php?error=1");
    }else{
        $mail = new PHPMailer();
        try{
            $mail->IsSMTP();
            $mail->Mailer = "smtp";
                // $mail->SMTPDebug  = 2; 
            $mail->SMTPAuth   = TRUE;
            $mail->SMTPSecure = "ssl";
            $mail->Port       = 465;
            $mail->Host       = "mail.supremecluster.com";
            // $mail->CharSet   = "UTF-8";
            $mail->Username   = GUSER;
            $mail->Password   = GPWD;
            $mail->isHTML(true); 
                $mail->setFrom($enq_email,$enq_name);
                $mail->addAddress($recever1);
        
              $mail->Subject = 'Enquery Mail from - '. $enq_name;
              $mail->Body = '<table class="table" cellspacing="0">
              <thead>
                <tr>
                    <th colspan="2">Enquery Mail from - '. $enq_name .'</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                    <td colspan="2">'. '<p>Dear Sir / Madam, I have some enqueries as follows :</p></br>' .'</td>
                </tr>
                <tr>
                    <td>Email:</td>
                    <td>'. $enq_email .'</td>
                </tr>
                <tr>
                    <td>Phone No:</td>
                    <td>'. $enq_phone .'</td>
                </tr>
                <tr>
                    <td>City:</td>
                    <td>'. $sendercity .'</td>
                </tr>
                <tr>
                    <td>Message:</td>
                    <td>'. $enq_message .'</td>
                </tr>
                <tr>
                    <td>Date of Enquery:</td>
                    <td>'. $DateTime .'</td>
                </tr>
              </tbody>
              </table>';
              
              $mail->send();
              $success_msg =  "Your Message Sent Successfully: ";
        }catch(phpmailerException $e){
            echo $e->errorMessage();
        }catch(Exception $e){
            echo $e->getMessage();
        }

    }

}

?>
<?php include 'header.php'; ?>

<div style="height:50vh;margin-top: 268px; background:#ddd;" class="d-flex justify-content-center align-items-center">
    <?php 
        if(isset($success_msg)){
    ?>
    <div class="alert alert-success" role="alert">

        <?php
            echo $success_msg . $enq_name;
        ?>
    </div>
    <?php
        }else{
    ?>
    <div class="alert alert-danger" role="alert">
<?php
    echo "Something went wrong";

?>
</div>
    <?php
        }
    ?>
</div>

<?php include 'footer.php'; ?>

它显示电子邮件发送成功,但我没有收到 任何邮件。

我已经联系了我的服务器帮助热线,他们说某些 IP 被阻止了。但现在我已经允许来自 CPanel 的这些 IP。但是仍然没有发送邮件

我真的需要这方面的帮助 :)

感谢您抽出宝贵时间阅读。

【问题讨论】:

  • 供应商有时会屏蔽其他位置。您必须设置您的 gmail 帐户以不阻止此
  • 感谢您的回复,马克斯。但我没有尝试将邮件发送到任何 gmail 服务器。这是我的域服务器。
  • 如果你想让我注意到你的回复,你必须像我现在一样在我的名字前添加一个@。
  • 如果您尝试通过域服务器发送电子邮件,这将不起作用。您必须明确地通过电子邮件服务器发送电子邮件。然后你会有一些日志文件,它们会告诉你为什么没有发送电子邮件。请查看日志文件
  • @MaxMuster 感谢您的回复。但我不知道如何使用 phpMailer 来做到这一点。

标签: php phpmailer


【解决方案1】:

默认情况下PHPMailer 不会抛出异常——你必须通过将true 传递给构造函数来请求它们,就像$mail = new PHPMailer(true); 一样。否则,您必须检查 send() 等方法的返回值,以了解它们是否有效。

错误存储在 ErrorInfo 属性中 - 请参阅 any of the code examples provided with PHPMailer 了解如何正确处理错误。

您也可以设置$mail-&gt;SMTPDebug = 2; 来查看您的邮件服务器在说什么。除此之外,请阅读the PHPMailer troubleshooting guide

【讨论】:

    【解决方案2】:

    我的最终工作代码是:

    function Redirect_to($New_Location){
        header("Location:" . $New_Location);
        exit;
    }
    if(isset($_POST['Submitenq'])){
        require('phpmailer/PHPMailerAutoload.php');
    
        define ('GUSER','courses@cadcentreju.org');
        define ('GPWD','mailpass');
    
        $recever1 = 'courses@cadcentreju.org';
    
        $enq_name = $_POST["enq_name"];
        $enq_email = $_POST["enq_email"];
        $enq_phone = $_POST["enq_phone"];
        $enq_message = $_POST["enq_message"];
    
        date_default_timezone_set("Asia/Kolkata");
        $CurrentTime = time();
        $DateTime = strftime("%B-%d-%Y %H:%M:%S",$CurrentTime);
        
        if(empty($enq_name) || empty($enq_email) || empty($enq_phone) || empty($enq_message)){
            Redirect_to("index.php?error=1");
        }else{
            $mail = new PHPMailer(true);
            try{
                $mail->IsSMTP();
                $mail->Mailer = "smtp";
                    // $mail->SMTPDebug  = 2; 
                $mail->SMTPAuth   = TRUE;
                $mail->SMTPSecure = "none";
                $mail->Port       = 25;
                $mail->Host       = "mail.supremecluster.com";
                // $mail->CharSet   = "UTF-8";
                $mail->Username   = GUSER;
                $mail->Password   = GPWD;
                $mail->isHTML(true); 
                $mail->setFrom($enq_email,$enq_name);
                $mail->From = GUSER; 
                $mail->FromName = $enq_name;
    
                $mail->addAddress($recever1);
            
                  $mail->Subject = 'Enquiry Mail from - '. $enq_name;
                  $mail->Body = '<table class="table" cellspacing="0">
                  <thead>
                    <tr>
                        <th colspan="2">Enquiry Mail from - '. $enq_name .'</th>
                    </tr>
                  </thead>
                  <tbody>
                    <tr>
                        <td colspan="2">'. '<p>Dear Sir / Madam, I have some enquiries. My Details are as follows :</p></br>' .'</td>
                    </tr>
                    <tr>
                        <td>Email:</td>
                        <td>'. $enq_email .'</td>
                    </tr>
                    <tr>
                        <td>Phone No:</td>
                        <td>'. $enq_phone .'</td>
                    </tr>
                    <tr>
                        <td>Message:</td>
                        <td>'. $enq_message .'</td>
                    </tr>
                    <tr>
                        <td>Date and TIME of Enquery:</td>
                        <td>'. $DateTime .'</td>
                    </tr>
                  </tbody>
                  </table>';
                  
                  $mail->send();
                  $success_msg =  "Your Message Sent Successfully: ";
            }catch(phpmailerException $e){
                echo $e->errorMessage();
            }catch(Exception $e){
                echo $e->getMessage();
            }
    

    我决定从我自己的服务器而不是 Gmail 服务器发送邮件:

    所以我改变了:

    $mail->SMTPSecure = "ssl";
    

    $mail->SMTPSecure = "none";
    

    要记住的最重要的事情:

    $mail->Username   = GUSER;
    

    $mail->From = GUSER;
    

    必须相同

    另外, 我们必须将 true 传递给构造函数:

    $mail = new PHPMailer(true)
    

    // 构造函数中的参数 true 启用异常

    【讨论】:

      【解决方案3】:

      转到您的 Gmail 帐户 -> 安全性

      找到“访问不太安全的应用”。打开它并再次运行您的 PHP 文件。

      应该发送邮件。

      【讨论】:

        猜你喜欢
        • 2013-09-06
        • 2015-03-16
        • 2010-10-14
        • 2012-09-15
        • 1970-01-01
        • 1970-01-01
        • 2021-04-19
        • 1970-01-01
        相关资源
        最近更新 更多