Mailer未显示任何错误

Mailer未显示任何错误

本文介绍了PHP Mailer未显示任何错误,但不发送电子邮件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在帮忙创建一个预订表格,但已决定通过域而不是服务器发送邮件。这主要是为了提高安全性,并减少响应和数据传输的限制。

I'm creating a booking form as a favour but have decided to send mail via the domain, not the server. This is mainly for better security and less limits in responses and data transfers.

最近几天我一直在研究此方法,并试图教会自己如何获得它起作用。我现在有一个非常简单的示例,可以在下面看到。

I've been working on this for the last few days and trying to teach myself how to get it to work. I now have a very simple working example which can be seen here below.

这是简单的预订表格:

<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 我有以下工作代码:

Then in process.php I have this working code:

<?php

use 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 = '[email protected]';
    $mail->Password = '[PASSWORD]';



    $mail->setFrom('[email protected]'); // 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('[email protected]'); // 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.

    $mail->addBCC('[email protected]'); // This is to keep a record of all emails that have been sent. Responses will also be saved to a CSV file.

    $mail->Subject = 'Booking Request'; // Subject of the email sent to [email protected] that the form responses will be contained within.

    $mail->isHTML(TRUE);
    $mail->Body = 'Booking request from '.$name.' with email '.$email; // Shows the salon the form response via the email and when they reply a new thread should start in order to compose a new email to reply to the email of the form submitter.

    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 (带有确认的过程文件)消息)

The code above works and sends the emails from the right address, to the right address. That was on a site in public_html/testing and has been moved to a different site in public_html/booking so the relative paths will be the same. The only files within this directory are index.php (the form) and send.php (the process file with confirmation message)

由于某种原因,此包含所有表单值的新代码将无法发送。老实说,我不太确定为什么它现在不起作用,因此任何指针都将不胜感激。

For some reason this new code with all of the form values will not send. I'm honestly not too sure as to why it won't work now so any pointers at all would be massively appreciated.

<?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 = '[email protected]';
    $mail->Password = '[PASSWORD]';



    $mail->setFrom('Handler | Bookings'); // Emails sent via Noreply.

    $mail->addAddress('[email protected]'); // Email form responses sent to [email protected]
    $mail->addReplyTo($email); // Reply to the user who submitted the form.

    $mail->addBCC('[email protected]'); // Store record of all emails sent via the system.

    $mail->Subject = 'Booking Request'; // Subject of the email sent to [email protected] that the form responses will be contained within.

    $mail->isHTML(TRUE);
    $mail->Body = '

    Booking request from '.$forename.' with email '.$email;'
    Test Values: $forename $surname $email $phone $service $date $time



    if(!$mail->send()) { // Send the email.
      echo '';
      echo 'Mailer error: ' . $mail->ErrorInfo;
    } else {
      echo '';
    }
}
?>

我不需要最后的echo语句,我只需要在此之后发送电子邮件格式:

I don't need the echo statements at the end, I just need the email to send following this sort of format:

<img src="https://via.placeholder.com/300x150" width="15%">
<p><b>Name:</b> $forename $surname</p>
<p><b>Email:</b> $email</p>
<p><b>Phone:</b> $phone</p>
<p><b>Service:</b> $service</p>
<p><b>Date:</b> $date</p>
<p><b>Time:</b> $time</p>

我只是不确定为什么现在,以前完成的电子邮件将不再发送。任何指针将不胜感激。

I'm just not sure why the emails now will not send when they have done before. Any pointers would be appreciated.

UPDATE

这是更新的代码,其中感谢 Mr Perfect

Here's the updated code with the progress made with thanks to Mr Perfect

<?php
mail("[email protected]", "test", "message");
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'];

    $message  = <<<DELIMETER
<img src="https://via.placeholder.com/300x150" width="15%">
    <p><b>Name:</b> {$forename} {$surname}</p>
    <p><b>Email:</b> {$email}</p>
    <p><b>Phone:</b> {$phone}</p>
    <p><b>Service:</b> {$service}</p>
    <p><b>Date:</b> {$date}</p>
    <p><b>Time:</b> {$time}</p>
DELIMETER;

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

    $mail = new PHPMailer;
    $mail->isSMTP();
    $mail->SMTPDebug = 3;
    $mail->Host = 'smtp.hostinger.com';
    $mail->Port = 587;
    $mail->SMTPAuth = true;
    $mail->Username = '[email protected]';
    $mail->Password = '[PASSWORD]';

    $mail->setFrom('Handler | Bookings'); // Emails sent via Noreply.

    $mail->addAddress('[email protected]','ADMIN'); // Email form responses sent to [email protected].

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

    // $mail->addBCC('[email protected]'); // Store record of all emails sent via the system.

    $mail->Subject = 'Booking Request | SUBMISSION'; // Subject of the email sent to [email protected] that the form responses will be contained within.

    $mail->isHTML(TRUE);
    $mail->Body    = $message;
    $mail->AltBody = $message;

    if(!$mail->send()) { // Send the email.
      echo '';
      echo '' . $mail->ErrorInfo; // I don't need to echo any errors because the submission page has the text above already.
    } else {
      echo '';
    }
}
?>


推荐答案

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

You should look at your $mail->addAdress, $mail->addBCC and $mail->addReplyTo fields and follow the correct syntax for those fields.

测试以下代码。

    <?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 = '[email protected]';
        $mail->Password = '[PASSWORD]';

        $mail->setFrom('[email protected]','Bookings'); // Emails sent via Noreply.

        $mail->addAddress('[email protected]',''); // Email form responses sent to [email protected]

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

        $mail->addBCC('[email protected]',''); // Store record of all emails sent via the system.

        $mail->Subject = 'Booking Request'; // Subject of the email sent to [email protected] 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 '';
        }
    }
    ?>

这篇关于PHP Mailer未显示任何错误,但不发送电子邮件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-23 18:29