【问题标题】:How can we send the table data to mail using php?我们如何使用 php 将表格数据发送到邮件?
【发布时间】:2014-04-10 14:55:59
【问题描述】:

我正在显示用户提交的每日报告,现在我想在单击发送电子邮件按钮时将其邮寄到电子邮件。我怎么能在 PHP 中做到这一点? 我使用了以下代码

extract($_REQUEST);

if(isset($send_mail)){
    $edata= $_POST['send_msg'];
    echo "<script type='text/javascript'>alert('$edata');</script>";
    $ka_semail=$_SESSION['user_email'];
    $subject = "Report";
    $body = $edata;
    $headers  = 'MIME-Version: 1.0' . "\r\n";
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
    $headers .= 'From: Info <'.$ka_semail.'>' . "\r\n"; 

$mchk= mail($ka_semail, $subject, $body, $headers);
        if(isset($mchk)){
        echo "<script type='text/javascript'>alert('Your data Sent sucessfully');</script>";
        header("location:reports.php");
        }
}
?>
<body>
  <div id="main">
    <header>
      <div id="logo">
        <div id="logo_text">
          <a href="index.html">
          <div style="background:#2A0000"><img src="images/kreamsoftlogo.png"/></a></div>
        </div>

      </div>
      <?php include'nav.php'; ?>
    </header>
    <div id="site_content">
      <div id="email-data">
    <div id="content">
      <div class="content" style="min-height:385px; width: 100%" >

        <h1>Daily Report </h1>
        <? 
        $current_date = date("d/m/Y");

        $current_user = $_SESSION['user_login'];

        $find = mysql_query("select * from k_dailyreport where kr_user='$current_user'  AND kr_date='$current_date'"); 


        ?>
        <div class="content_item">
          <ul>

        <?php
        $numrow=mysql_num_rows($find);
        if($numrow>0){
                               $sino = 0;
            echo "<table border='0' width='100%'>";
            echo "<tr class='head'>";
             echo "<th>S.No</th>";

                  echo "<th>Project</th>";
                  echo "<th>Process</th>";
                  echo "<th>Process Date</th>";
                  echo "<th>Current Duration</th>";

                  echo "</tr>";
                  $sno=0;
            while($row = mysql_fetch_array($find)){
                $sno=$sno +1;
                  $sino++;
                                $cls = ($sino%2==0) ? "even" : "odd";
                  echo "<tr class='t1'>";
                   echo "<td>$sno</td>";
                  echo "<td>".$row['kr_project']."</td>";
                  echo "<td>".$row['kr_process']."</td>";
                  echo "<td>".$row['kr_rtime']."</td>";
                 echo "<td>".$row['kr_ctime']."</td>";

                  }?></td>

            <?php
                  echo "</tr>";
                  ?><form name="test" method="post"enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF'];?>"> 
                  <p style='padding-top: 15px;margin-right: 50px; float:right'><input class='submit' id="sendEmail" type="submit" name='sendmail' value='Send Mail' />
                  <input type="hidden" name="send_mail" value="send_mail" /> 
                  <input type="hidden" name="send_msg" value="<?php
        $numrow=mysql_num_rows($find);
        if($numrow>0){
                               $sino = 0;
            echo "<table border='0' width='100%'>";
            echo "<tr class='head'>";
             echo "<th>S.No</th>";

                  echo "<th>Project</th>";
                  echo "<th>Process</th>";
                  echo "<th>Process Date</th>";
                  echo "<th>Current Duration</th>";

                  echo "</tr>";
                  $sno=0;
            while($row = mysql_fetch_array($find)){
                $sno=$sno +1;
                  $sino++;
                                $cls = ($sino%2==0) ? "even" : "odd";
                  echo "<tr class='t1'>";
                   echo "<td>$sno</td>";
                  echo "<td>".$row[1]."</td>";
                  echo "<td>".$row[2]."</td>";
                  echo "<td>".$row[3]."</td>";
                 echo "<td>".$row[3]."</td>";
                  echo "</tr>";
                  }echo "</table>";}?>" /></p>

                  </form>
                  <?                
                  }else{ 
                  ?>

                      <center><img style="text-align:center" src="images/no_record.gif" /></center>


                     <?
                     } 

            echo "</table>";
        ?>
    </li>
    </ul>



        </div>
           </div> </div>
      </div>

    </div>

我想用数据邮寄整个表格

【问题讨论】:

  • Google 搜索“PHP 发送电子邮件”看起来很有希望...
  • @David 很容易使用 php 发送电子邮件。但我要问的是,必须邮寄包含记录的整个表格
  • 作为 HTML?您可以构建 HTML 电子邮件,我想大多数邮件发送库都支持这一点。你只是在循环中构建这个输出吗?您可以使用类似(甚至相同)的循环来构建电子邮件正文。当然,为电子邮件设置样式与为网页设置样式是完全不同的事情。嵌入式资源比链接资源更受欢迎,为了简单起见,内联样式通常在电子邮件正文中有意义。目前还不清楚问题是什么。您是在问如何抓取渲染页面的屏幕截图并发送它或其他什么?
  • @David “你是在问如何抓取渲染页面的屏幕截图并发送它或其他什么?”不完全是,但就像你说的那样。我想将每日报告表发送到邮件

标签: email sendmail html-email phpmailer


【解决方案1】:

在对您的代码一无所知的情况下,我或许至少可以猜出构建此表的结构。也许是这样的?:

writeTableHeader();
foreach ($values as $value) {
    writeTableRow($value);
}
writeTableFooter();

甚至可以抽象成它自己的高级函数?:

function writeTable($values) {
    $result = '';

    $result .= buildTableHeader();
    foreach ($values as $value) {
        $result .= buildTableRow($value);
    }
    $result .= buildTableFooter();

    return $result;
}

任何此类函数或抽象也可用于构造电子邮件正文的 HTML...

// ... previously building the overall email body
$mailBody .= writeTable($values);
// ... maybe some more email body elements as well
mail($to, $subject, $mailBody);

当然,电子邮件的样式将是另一回事。最好不要依赖 HTML 电子邮件中的链接资源,这些资源往往不会被邮件客户端请求,因为它们经常被垃圾邮件发送者等滥用。您也许可以将样式表作为“嵌入式资源”包含在电子邮件中,但在大多数情况下,我认为内联样式可能最适合电子邮件。 (一些邮件客户端甚至可能不会加载嵌入式资源,至少在没有先提示用户的情况下不会加载,这不是理想的用户体验。)

假设您不想复制太多代码,可以使用Form Template Method 重构模式(example here 等)抽象出上述方法。

我想我的意思是电子邮件不发送网页,而是网页和电子邮件都是基础数据的独立“视图”。它们之间的公共代码当然可以被抽象和共享,但是尝试在电子邮件中重用网页本身会使情况过于复杂。

【讨论】:

  • 感谢您的宝贵时间。现在更新了我用来在网页中打印表格的代码。现在我想要的是,按照网页中的样子邮寄整个表格
  • @user3239311:好吧,看起来您需要稍微重构一下该代码以使其更具可重用性。但我回答的一般模式是成立的。将数据库组件进一步移到顶部以获取数据,然后使用数据完成构建页眉、行和页脚的步骤。目前,这一切都是在页面中内联完成的,但也可以很容易地成为由一个函数(或一系列函数)构建的 HTML 字符串,并将 echoed 到页面。同样的字符串也可以用在电子邮件正文中。
  • 您能更正错误并给我示例代码吗?因为我尝试了我所知道的一切
  • @user3239311:恐怕您误解了 Stack Overflow 的功能。这个社区不会为你修复你的代码。我们很乐意回答您的问题,但“请改进并发送回给我”在这里并不能很好地解决。您可能会考虑使用 coder-for-hire 服务来为您完成开发工作。另一方面,如果您尝试过某事,但它没有按预期或预期工作,并且您想知道原因,您可以提出一个新的问题。
  • 好吧,再次感谢,很抱歉这样问。现在我明白了堆栈下溢的作用。实际上我在过去的两天里都在尝试这个。这就是为什么我这样问你。我会重新编码并问你是否有任何疑问。非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-22
  • 1970-01-01
  • 2023-03-31
  • 2013-12-26
相关资源
最近更新 更多