为了账号安全,请及时绑定邮箱和手机立即绑定

PHP Mailer 没有显示错误但不发送电子邮件

PHP Mailer 没有显示错误但不发送电子邮件

PHP
手掌心 2022-01-02 15:45:01
我正在创建一个预订表格作为帮助,但已决定通过域而不是服务器发送邮件。这主要是为了更好的安全性和更少的响应和数据传输限制。最近几天我一直在研究这个,并试图自学如何让它发挥作用。我现在有一个非常简单的工作示例,可以在下面看到。这是简单的预订表格:<form method="post" name="process.php" action="process.php"><p>Name:</p><br><input type="text" name="name"><br><br><p>Email Address:</p><br><input type="email" name="email"><br><br><br><input type="submit" name="submit" value="Send Email">然后在process.php我有这个工作代码:<?phpuse PHPMailer\PHPMailer\PHPMailer;if(isset($_POST['submit'])) {    // Values need to be santiised    $name = $_POST['name']; //Name of the person requesting a booking    $email = $_POST['email']; //Email of the person requesting a booking        require '../vendor/autoload.php';    $mail = new PHPMailer;    $mail->isSMTP();    $mail->SMTPDebug = 0;    $mail->Host = 'smtp.hostinger.com';    $mail->Port = 587;    $mail->SMTPAuth = true;    $mail->Username = 'test@handler.net';    $mail->Password = '[PASSWORD]';    $mail->setFrom('test@handler.net'); // All emails would be sent from the handler.net domain to the bookings email of the other domain. (Using test to test, will be noreply)    $mail->addAddress('bookings@salon.com'); // Recipient of the email should be the bookings address, this won't change.    $mail->addReplyTo($email); // The reply to address will be the email address of the user who submitted the booking enquiry.    if(!$mail->send()) { // Send the email.      echo 'Message was not sent.';      echo 'Mailer error: ' . $mail->ErrorInfo;    } else {      echo 'Message has been sent.';    }}?>上面的代码有效并将电子邮件从正确的地址发送到正确的地址。那是在一个站点上public_html/testing并且已被移动到另一个站点中,public_html/booking因此相对路径将是相同的。此目录中的唯一文件是index.php(表单)和send.php(带有确认消息的流程文件)出于某种原因,这个包含所有表单值的新代码将不会发送。老实说,我不太确定为什么它现在不起作用,因此将非常感谢任何指针。
查看完整描述

3 回答

?
HUX布斯

TA贡献1876条经验 获得超6个赞

您应该查看$mail->addAdress,$mail->addBCC和$mail->addReplyTo字段并遵循这些字段的正确语法。


测试下面的代码。


    <?php


    use PHPMailer\PHPMailer\PHPMailer;


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

    {

        // Values need to be santiised


        $forename = $_POST['forename'];

        $surname = $_POST['surname'];

        $email = $_POST['email'];

        $phone = $_POST['phone'];

        $service = $_POST['service'];

        $date = $_POST['date'];

        $time = $_POST['time'];


        require '../vendor/autoload.php';


        $mail = new PHPMailer;

        $mail->isSMTP();

        $mail->SMTPDebug = 0;

        $mail->Host = 'smtp.hostinger.com';

        $mail->Port = 587;

        $mail->SMTPAuth = true;

        $mail->Username = 'test@handler.net';

        $mail->Password = '[PASSWORD]';


        $mail->setFrom('test@handler.net','Bookings'); // Emails sent via Noreply.


        $mail->addAddress('bookings@salon.com',''); // Email form responses sent to bookings@salon.com


        $mail->addReplyTo($email,$forename.' '.$surname); // Reply to the user who submitted the form.


        $mail->addBCC('outbox@handler.net',''); // Store record of all emails sent via the system.


        $mail->Subject = 'Booking Request'; // Subject of the email sent to admin@handler.net that the form responses will be contained within.


        $mail->isHTML(TRUE);

        $mail->Body = <<<EOD

            Booking request from {$forename} with email {$email}.<br  />

            Contact details: <br />

            Full name: {$forename} {$surname}<br />

            Email: {$email} <br />

            Phone number: {$phone} <br />

            Service: {$service} <br />

            Date: {$date} {$time}

EOD;

        if(!$mail->send()) { // Send the email.

          echo '';

          echo 'Mailer error: ' . $mail->ErrorInfo;

        } else {

          echo '';

        }

    }

    ?>


查看完整回答
反对 回复 2022-01-02
?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

这段代码是错误的,缺少一些引号


$mail->Body = '


    Booking request from '.$forename.' with email '.$email;'

    Test Values: $forename $surname $email $phone $service $date $time

要在字符串上启用变量替换,请使用双引号,并且您不需要使用 dot(.) 连接变量,这也可以使用像 \n 这样的转义字符,尝试像这样调整您的代码:


$mail->Body = "Booking request from $forename with email $email\n" .

              "Test Values: $forename $surname $email $phone $service $date $time";


查看完整回答
反对 回复 2022-01-02
?
侃侃无极

TA贡献2051条经验 获得超10个赞

首先,我们必须查看错误,因此您必须设置

$mail->SMTPDebug = 0;

进入

$mail->SMTPDebug = 3;

因此,您可以根据该错误发布该错误。


查看完整回答
反对 回复 2022-01-02
  • 3 回答
  • 0 关注
  • 203 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信