【问题标题】:Disable PHPMailer Redirection禁用 PHPMailer 重定向
【发布时间】:2020-09-27 15:14:06
【问题描述】:

我有一个包含邮件表单的页面。

 <section class="contato" id="inicio-form">
        <div class="container">
            <h2 class="heading-form" tabindex="-1">Descubra o que a Softcom pode fazer pelo seu negócio</h2>
            <form action="app/mail.php" method="POST" class="js-form" _lpchecked="1">
            <div class="form-group row">
            <div class="col-sm-12 text-center">
                <input type="text" name="nome" class="form-control form-control-sm required" id="colFormLabelSm" placeholder="Nome" style="background-image: url(&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABHklEQVQ4EaVTO26DQBD1ohQWaS2lg9JybZ+AK7hNwx2oIoVf4UPQ0Lj1FdKktevIpel8AKNUkDcWMxpgSaIEaTVv3sx7uztiTdu2s/98DywOw3Dued4Who/M2aIx5lZV1aEsy0+qiwHELyi+Ytl0PQ69SxAxkWIA4RMRTdNsKE59juMcuZd6xIAFeZ6fGCdJ8kY4y7KAuTRNGd7jyEBXsdOPE3a0QGPsniOnnYMO67LgSQN9T41F2QGrQRRFCwyzoIF2qyBuKKbcOgPXdVeY9rMWgNsjf9ccYesJhk3f5dYT1HX9gR0LLQR30TnjkUEcx2uIuS4RnI+aj6sJR0AM8AaumPaM/rRehyWhXqbFAA9kh3/8/NvHxAYGAsZ/il8IalkCLBfNVAAAAABJRU5ErkJggg==&quot;); background-repeat: no-repeat; background-attachment: scroll; background-size: 16px 18px; background-position: 98% 50%; cursor: auto;">
            </div>
            </div>
            <div class="form-group row">
            <div class="col-sm-12 text-center">
                <input type="email" name="email" class="form-control form-control-sm required" id="colFormLabel" placeholder="E-mail">
            </div>
            </div>
            <div class="form-group row">
            <div class="col-sm-12 text-center">
                <input type="text" name="telefone" class="form-control form-control-sm mask-phone required" id="colFormLabelLg" placeholder="Telefone">
            </div>
            </div>
            <div class="form-group row">
            <div class="col-sm-12 text-center">
                <input type="text" name="cidade" class="form-control form-control-sm required" id="colFormLabelLg" placeholder="Cidade">
            </div>
            </div>

            <button type="submit" class="btn btn-dark js-submit" data-text="Solicite uma ativação">Solicite uma ativação</button>

            <div class="msg">
            <p class="msg-error" style="display: none;">Preencha todos os campos corretamente.</p>
            <p class="msg-success" style="display: none;">Mensagem enviada com sucesso!</p>
            </div>

        </form>
        </div>
    </section>

还有这个 PHPMailer 脚本:

    <?php
require 'PHPMailer/PHPMailerAutoload.php';

$nome = utf8_decode($_POST['nome']);
$email = $_POST['email'];
$celular = trim($_POST['telefone'], '_');
$cidade = utf8_decode($_POST['cidade']);

  $content = '
    <h1>Contato Landing Page - Meu Carrinho</h1>
    <table>
      <tr>
        <td><b>Nome</b></td>
        <td>' . $nome . '</td>
      </tr>
      <tr>
        <td><b>E-mail</b></td>
        <td>' . $email . '</td>
      </tr>
      <tr>
        <td><b>Telefone</b></td>
        <td>' . $celular . '</td>
      </tr>
      <tr>
      <tr>
        <td><b>Cidade</b></td>
        <td>' . $cidade . '</td>
      </tr>
    </table>
  ';

 $mail = new PHPMailer;

  $mail->IsSMTP();
  $mail->Host = 'xxx';
  $mail->Username = 'xxx';
  $mail->Password = 'xxx';
  $mail->Port = xxx;
  $mail->SMTPSecure = 'xxx';

  $mail->SMTPDebug = 0;
  $mail->SMTPAuth = true;

  $mail->isHTML(true);
  $mail->CharSet = 'UTF-8';
  $mail->Subject =  "xxx";
  $mail->From = 'xxx';
  $mail->FromName = 'xxx';
  $mail->Body = $content;

  $mail->addAddress('xxx@xxx.xx');
  $mail->addAddress('xxx@xxx.xx');

  if(!$mail->send()) {

    $retorno = array(
      'success' => false,
      'message' => 'Não foi possível enviar email.',
    );
  } else {

    if($mail->send()){
      $retorno = array(
        'success' => true,
        'message' => 'Email enviado com sucesso.',
      );
    }

  }

die(json_encode($retorno));

发送电子邮件工作正常,但脚本将我重定向到带有回显消息的 mail.php 链接 ({"success":true,"message":"Email enviado com sucesso."})。

如何禁用它并留在同一页面上,或者如何在同一页面上显示此消息?

谢谢!

【问题讨论】:

  • 使用 Ajax 将表单元素发布到所需页面。然后,返回响应 Json 对象。根据响应,您可以显示不同的消息,例如错误、成功等...
  • 您是否尝试过阻止重定向?你看过phpmailer的手册看看有没有选项?

标签: php phpmailer


【解决方案1】:

只需删除代码:

if($mail->send()){
$retorno = array(
    'success' => true,
    'message' => 'Email enviado com sucesso.',
  );
}

将链接放置在您实际要重定向的位置,而不是该代码。 要重定向,可以使用header() 函数。

例如:

if($mail->send()){
  header("Location: Your_Preferable_PAGE.php");
}

最后,也去掉die()函数:

die(json_encode($retorno));

【讨论】:

    【解决方案2】:

    你在这里问错了问题。 PHPMailer 与重定向完全无关。这完全取决于您调用 PHPMailer 的脚本,编写。

    您的 PHP 脚本是从 JS 调用的,它需要一个有效的 JSON 响应,但您没有给它一个响应。这样做:

    header('Content-type: application/json');
    echo json_encode($retorno);
    

    我还建议您返回正确的 HTTP 错误代码 - 出现错误时不要返回 200 OK 响应 - 返回 400 Bad request 或类似内容,而不是依赖于其中的 success 属性你的 JSON。如果你不这样做,你可能会发现你的浏览器缓存了它不应该缓存的东西。

    【讨论】:

      【解决方案3】:

      这是因为您将 json 对象作为参数传递给 die 函数。此参数表示退出脚本时要打印的消息。只需从 die 函数中删除参数即可。

      【讨论】:

        猜你喜欢
        • 2015-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-15
        • 1970-01-01
        • 1970-01-01
        • 2018-01-17
        • 1970-01-01
        相关资源
        最近更新 更多