【问题标题】:Error in HTML setting of PHP mail functionPHP邮件功能的HTML设置错误
【发布时间】:2013-06-11 21:59:30
【问题描述】:

您好,我已经编写了一个脚本来从 MySQL 中获取数据并将其邮寄。我正在使用 HTML 内容类型,我的问题是输出 HTML 内容格式

这是我的代码

<?php
$con=mysqli_connect("host","user","pwd","db");
// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . Mysqli_connect_error();
  }

$result3 = mysqli_query($con,"SELECT  cardnumber, email, firstname, surname, GROUP_CONCAT(borrowernumber) as borrowernumber, GROUP_CONCAT(issuedate) as issuedate, GROUP_CONCAT(date_due) as date_due,  GROUP_CONCAT(barcode) as barcode, GROUP_CONCAT(title SEPARATOR '//') as Title, GROUP_CONCAT(author SEPARATOR '/') as Author FROM issuestestmail GROUP BY email");
while($row = mysqli_fetch_array($result3))
{
$to = $row['email'];
$emailBody="<html><body><font face='arial' size='2'>";
// explode the Pin/balances on the comma's
$borrowernumber = explode(',',$row['borrowernumber']);
$barcode = explode(',',$row['barcode']);
$issuedate = explode(',',$row['issuedate']);
$date_due = explode(',',$row['date_due']);
$Title = explode('//',$row['Title']);
$Author = explode('/',$row['Author']);
$subject = "List of Issued Books ( Total : ".count($barcode).")";
// Create a line for each item/balance
$emailBody .= "<b>Dear,</b>  ".$row['firstname']." ".$row['surname']."  ("  ."<b>ID:</b> <b>".$row['cardnumber']."</b>)<br/><br/>"."\r\n"."Kindly find the list of library items which are currently issued on your account"."<br/><br/>";

    $emailBody .= "<b>Total no of issued books:</b> ".count($barcode)."<br/><br/>";

    foreach($borrowernumber as $key => $borrowernumber){

    $emailBody .= "<table border='0' width='100%' id='table1' style='border-width: 0px; font-size:14px'><tr>";
        $emailBody .= "<td width='100' style='border-style: none; border-width: medium'><b>Barcode</b></td>";
    $emailBody .= "<td style='border-style: none; border-width: medium'>: ".$barcode[$key]."</td>";
    $emailBody .= "</tr></table>";

    $emailBody .= "<table border='0' width='100%' id='table2' style='border-width: 0px; font-size:14px'><tr>";
        $emailBody .= "<td width='100' style='border-style: none; border-width: medium'><b>Title</b></td>";
    $emailBody .= "<td style='border-style: none; border-width: medium'>: ".$Title[$key]."</td>";
    $emailBody .= "</tr></table>";

    $emailBody .= "<table border='0' width='100%' id='table3' style='border-width: 0px; font-size:14px'><tr>";
        $emailBody .= "<td width='100' style='border-style: none; border-width: medium'><b>Author</b></td>";
    $emailBody .= "<td style='border-style: none; border-width: medium'>: ".$Author[$key]."</td>";
    $emailBody .= "</tr></table>";

    $emailBody .= "<table border='0' width='100%' id='table4' style='border-width: 0px; font-size:14px'><tr>";
        $emailBody .= "<td width='100' style='border-style: none; border-width: medium'><b>Issue date</b></td>";
    $emailBody .= "<td style='border-style: none; border-width: medium'>: ".$issuedate[$key]."</td>";
    $emailBody .= "</tr></table>";

    $emailBody .= "<table border='0' width='100%' id='table5' style='border-width: 0px; font-size:14px'><tr>";
        $emailBody .= "<td width='100' style='border-style: none; border-width: medium'><b>Due Date</b></td>";
    $emailBody .= "<td style='border-style: none; border-width: medium'>: ".$date_due[$key]."</td>";
    $emailBody .= "</tr></table><br/><hr><br/>";}

// add a Total Balance line

$emailBody .= "<br/><br/><b>Library</b><br/>xyz<br/>";
$emailBody .= "</font></body></html>";
$headers = "From: Library@lotus.edu.in\r\n";
$headers .= "Reply-To: Library@lotus.edu.in\r\n";
$headers .= "Return-Path: Library@lotus.edu.in\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n";

      if(mail($to, $subject, $emailBody, $headers)) {
          echo $emailBody;
          echo 'Email sent successfully!<br/><br/>';
      } else {
          echo $emailBody;
          die('Failure: Email was not sent!');
      }

}

mysqli_close($con);
?>

现在这封邮件在gmail上的输出是这样的

一切都很好,但我在第 3 条记录中遇到了错误 """"

【问题讨论】:

    标签: php


    【解决方案1】:

    1) 使用这行代码使用 base64 对整个消息进行编码:

    $emailBody= chunk_split(base64_encode($emailBody));
    

    然后,将其附加到您的标题中:

    $headers .= "Content-Transfer-Encoding: base64\r\n\r\n";
    

    这将告诉邮件客户端您的邮件是 base64 编码的。

    其实在这里,

    ""< table border='0' width='100%' id='table3' style='border-width: 0px; font-size:14px'>""
    

    &lt;table 之间添加了某种空间,导致此错误。

    2) 另外,我在您的标记中发现了另一个小问题,即以下行中的 width='100'

    $emailBody .= "<td width='100' style='border-style: none; border-width: medium'><b>Due Date</b></td>";
    

    将其更改为 width='100%' 或 width='100px' 任何您希望输出的内容。

    3) 根据您评论的要求,(即跳过从查询中找不到电子邮件地址的电子邮件)您只需要用if检查包裹您的那部分

    例如:

    while($row = mysqli_fetch_array($result3))
    {
    if($row['email'])
    {
    $to = $row['email'];
    $emailBody="<html><body><font face='arial' size='2'>";
    .
    .
    .
    .
          if(mail($to, $subject, $emailBody, $headers)) {
              echo $emailBody;
              echo 'Email sent successfully!<br/><br/>';
          } else {
              echo $emailBody;
              die('Failure: Email was not sent!');
          }
    }
    }
    

    【讨论】:

    • 不,在 gmail 上不是我的代码,您可以检查我粘贴的代码,我没有任何空间。请检查
    • 如果一行中没有电子邮件,它不会向任何人发送邮件,如何跳过这些邮件并发送所有有邮件的人
    • 启动 'while' 循环后,将整个代码包装在 'if($row['email'])' 中检查
    • 在答案中为您添加了示例,兄弟。
    • 谢谢它再次工作......它的输出或日​​志还有一件事不正确,它显示编码语言作为输出,最后它显示成功发送的电子邮件。它没有显示哪个用户没有收到邮件............我希望我有一个日志,其中包含成功发送的卡号电子邮件以及失败......现在我有更改最后作为“GROUP BY CARDNUMBER”而不是电子邮件和卡号的 SQL 语句是唯一的,并且每个卡号都有一个电子邮件 ID.......
    猜你喜欢
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-27
    • 2014-03-10
    • 2014-08-12
    相关资源
    最近更新 更多