通过phpmailer发送电子邮件不会返回对Javascript的响应

时间:2018-04-18 13:24:08

标签: javascript jquery phpmailer

我正在使用phpmailer从php / Javascript发送电子邮件并且它正在工作但是没有返回成功:函数(响应)。

我的javascript:

<script type="text/javascript" language="javascript">
$(document).ready(function() {

     $('.pendente').click(function() {
            $.ajax({
                type: 'POST',
                dataType: 'json',
                url: 'send_email.php',
                async: true,
                data: dados,
                context: this,
                success: function(response) {
                    alert("Ok!");
                    $(this).removeClass('btn-default').addClass('btn-warning');

                }
            });

});

我的send_email.php:

<?php 
include "ligacao.php"; //connection string to BD

$encweb = $_POST['enc'];
$datapendente = date("Y-m-d H:i:s");

$texto = "'Pendente em ".$datapendente;
$texto = $texto."'";

$sql="UPDATE Texoleo.dbo.bo set bo.logi2=0, bo.logi4=1 ";
$sql=$sql.", bo.dataopen='".$datapendente."', bo.u_msgshist=";
$sql=$sql." concat(".$texto.", char(13)+char(10))+(cast(bo.u_msgshist as nvarchar(600))) ";
$sql=$sql." where bo.fref='".$encweb."'";

$result = odbc_exec($connect, $sql);
/**** Fim sql ****/


/**** Enviar email ****/

$clientenome = $_POST['nome'];
$clienteemail = $_POST['email'];

include('lib/class.phpmailer.php');
include('lib/class.smtp.php');

$mail = new PHPMailer;

$mail->SMTPDebug = 2;                              

$mail->isSMTP();                                      
$mail->Host = 'myhost.com';  
$mail->SMTPAuth = true;                              

$mail->Username ='user@user.com';
$mail->Password = 'mypassword'; 
$mail->SMTPSecure = 'tls';                           
$mail->Port = 587;                                  

$mail->setFrom('my@email.com', 'Me');
$mail->addAddress('customer email', 'Customer name');

$mail->isHTML(true);                                  
$texto = 'bla, bla, bla ';
$mail->Subject = 'My subject';
$mail->Body    =  $texto;
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

if(!$mail->send()) {
    echo 'Message could not be sent.';
    echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
    echo 'Message has been sent';
};

$response = array("success" => true);
echo json_encode($response);

?>

在没有$ mail-&gt; send()的情况下测试相同的Javascript它返回成功为true但是使用$ mail-&gt; send()它会执行它必须做的事情(一些SQL更新和发送的电子邮件)但它没有' t返回成功为true以继续执行Javascript代码。

4 个答案:

答案 0 :(得分:0)

我注意到几乎没有导致问题的回声。您的回答如下:

{"success":true, "msg":'Message has been sent'}

你希望它看起来像下面,所以javascript可以将它作为 json 处理,而不是字符串:

if(!$mail->send()) {
    $msg = 'Message could not be sent: '.$mail->ErrorInfo;
} else {
    $msg = 'Message has been sent'; 
};

$response = array("success" => true, 'msg' => $msg);
echo json_encode($response);

您应该将消息变为可变消息,以便可以通过响应传递消息。

<?php
header('Content-Type: application/json');

您可以在开发人员工具中使用网络标签,了解您的ajax调用的请求和响应有效负载。

另外,您最好将内容类型标题设置为json。

[RestaurantStats]

答案 1 :(得分:0)

您使用的是哪个版本的jQuery?

如果您正在使用jQuery 3.0+,则应该使用.done()而不是.success(),因为它已被弃用。

  

弃用通知:从jQuery 3.0开始,jqXHR.success(),jqXHR.error()和jqXHR.complete()回调被删除。您可以使用jqXHR.done(),jqXHR.fail()和jqXHR.always()代替。

答案 2 :(得分:0)

问题在于SMTPDebug = 2。它应该是@synchro提出的SMTDebug = 0。非常感谢АтанасАтанасов的帮助。 $ mail-&gt; SMTPDebug = 0;

答案 3 :(得分:0)

在我的评论中:

调试输出正在搞乱JSON格式。通过设置SMTPDebug = 0禁用它,并删除任何其他非JSON输出。

如果您在浏览器的开发工具中检查对XHR请求的响应,通常可以看到这种情况发生。