繁体   English   中英

PHP PDO发送电子邮件代码仅在纯文本时发送-需要发送HTML

[英]PHP PDO send e-mail code only sends if text-only - need to send HTML

我正在执行以下代码:(1)将记录从一个表移动到另一个表(在同一数据库中),(2)将表1的内容发送到预定的电子邮件,以及(3)删除表1的内容。表1-模拟“添加到购物车”功能。

我的问题是,如果未在mail()上发送$ headers,则下面的代码将仅能成功发送电子邮件。 但是,我需要将表内容发送为HTML或至少允许

    用于不同的记录。 如果有可能未发送电子邮件,则也不执行代码的删除部分。 我究竟做错了什么?

    提前致谢!

    修改后的代码(如果我不发送$headers

     <?php include '../config/database.php'; date_default_timezone_set('CET'); $date = date('Ymd H:i:s'); $query = "INSERT INTO claims_archive (t20pctID, total_amount, user_id, sent) SELECT t20pctID, total_amount, user_id, @date FROM cart WHERE t20pctID LIKE '%sony%'"; $stmt = $con->prepare($query); if ($stmt->execute()) { $query = "SELECT t.t20pctID, t.main_artist, t.track_title, t.original_album, c.total_amount FROM cart c LEFT JOIN tblclaims t ON t.t20pctID = c.t20pctID WHERE t.t20pctID LIKE '%sony%' ORDER BY t.main_artist"; $stmt=$con->prepare($query); $stmt->execute(); $to = "testmail2@gmail.com"; $subject = "Test"; $headers = "MIME-Version: 1.0" . "\\r\\n"; $headers .= "Content-type:text/html;charset=UTF-8" . "\\r\\n"; $headers .= "From: Test <testmail1@mail.com>" . "\\r\\n"; $body = "Sent on: ". $date . "-\\r\\n"; while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { extract($row); $body .= "Track title: ".$row ["track_title"]. "-"; } $success = mail($headers, $to, $subject, $body); if ($success) { $query_delete = "DELETE FROM cart WHERE t20pctID LIKE '%sony%'"; $stmt = $con->prepare($query_delete); $stmt->execute(); header('Location: cart.php?action=sent'); } else { header('Location: cart.php?action=sent_failed'); } } else { header('Location: cart.php?action=sent_failed'); } include 'layout_foot.php'; ?> 

    原始码

     <?php include '../config/database.php'; date_default_timezone_set('CET'); $date = date('Ymd H:i:s'); $query = "INSERT INTO claims_archive (t20pctID, total_amount, user_id, sent) SELECT t20pctID, total_amount, user_id, @date FROM cart WHERE t20pctID LIKE '%sony%'"; $stmt = $con->prepare($query); if ($stmt->execute()) { //header('Location: cart.php?action=sent'); //please disregard this line as I forgot to remove it when I wrote this post. $query = "SELECT t.t20pctID, t.main_artist, t.track_title, t.original_album, c.total_amount FROM cart c LEFT JOIN tblclaims t ON t.t20pctID = c.t20pctID WHERE t.t20pctID LIKE '%sony%' ORDER BY t.main_artist"; $stmt=$con->prepare($query); $stmt->execute(); $to = "testmail2@gmail.com"; $subject = "Test"; $headers = "Test <testmail1@mail.com>". "\\r\\n". "MIME-Version: 1.0" ."\\r\\n". "Content-type: text/html; charset=iso-8859-1" ."\\r\\n"; $body = "Sent on: ". $date . "-"; while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { extract($row); $body .= "Track title: ".$row ["track_title"]. "-"; } $success = mail($to, $subject, $body); if ($success) { header('Location: cart.php?action=sent'); } else { header('Location: cart.php?action=sent_failed'); } $query_delete = "DELETE FROM cart WHERE t20pctID LIKE '%sony%'"; $stmt = $con->prepare($query_delete); $stmt->execute(); } else { header('Location: cart.php?action=sent_failed'); } include 'layout_foot.php'; ?> 

    在任何情况下都不会执行您的删除代码,因为在此代码运行之前您正在重定向。

    1. 删除header('Location: cart.php?action=sent'); 在下面写到if ($stmt->execute()) {

    2. 将您的删除代码置于标头之前的if($success)条件中。

    3. 使用以下代码更新$ headers变量,并将其包含在您的mail函数中:

       $headers = "MIME-Version: 1.0" . "\\r\\n"; $headers .= "Content-type:text/html;charset=UTF-8" . "\\r\\n"; $headers .= 'From: Test <testmail1@mail.com>' . "\\r\\n"; 

    这个

    $success = mail($headers, $to, $subject, $body);
    

    没有正确的参数顺序...

    请参阅http://php.net/manual/de/function.mail.php正确的签名是这样的:

    bool mail ( string $to , string $subject , string $message 
             [, string $additional_headers [, string $additional_parameters ]] )
    

    所以

    $success = mail($to, $subject, $body, $headers);
    

    暂无
    暂无

    声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

     
    粤ICP备18138465号  © 2020-2024 STACKOOM.COM