Excel如何自动织梦并发送邮件?

99ANYc3cd6
预计阅读时长 26 分钟
位置: 首页 织梦建站 正文

下面我将为你提供一个完整、详细的实现方案,包括前端表单提交、后端PHP处理、Excel生成和邮件发送四个核心步骤。

织梦 excel发送到邮箱
(图片来源网络,侵删)

整体思路

  1. 前端:创建一个表单,让用户填写必要信息(如邮箱地址),并提交到后端处理页面。
  2. 后端处理
    • 接收前端提交的数据。
    • 使用PHP库(推荐 PhpSpreadsheet)来生成Excel文件。
    • 将生成的Excel文件保存到服务器临时目录。
    • 使用PHP的 mail() 函数或更强大的 PHPMailer 库来发送邮件,并将Excel文件作为附件。
    • 发送成功后,删除服务器上的临时Excel文件,避免占用空间。
  3. 织梦集成:将上述PHP代码整合到织梦的内核中,确保能正确调用织梦的函数和配置。

详细实现步骤

第一步:准备工作(引入PhpSpreadsheet库)

织梦默认不包含Excel操作库,所以我们需要手动引入一个。PhpSpreadsheet 是目前非常流行和强大的库。

  1. 下载库文件

  2. 上传到织梦目录

    • 解压下载的 zip 包。
    • 将解压后的 vendor 文件夹上传到你的织梦网站根目录下,你的网站目录结构会变成 .../dede/.../include/.../vendor/
  3. 准备邮件发送库(推荐使用PHPMailer)

    织梦 excel发送到邮箱
    (图片来源网络,侵删)
    • 同样,从 PHPMailer GitHub 下载最新版本。
    • PHPMailer.php, SMTP.php, Exception.php, OAuth.php 等核心文件上传到你的网站任意目录,../phpmailer/

第二步:创建前端表单(以用户提交为例)

在你的模板文件(index.htm)中,添加一个表单,这个表单可以用来收集用户希望接收Excel报告的邮箱地址。

<form action="/plus/send_excel.php" method="post">
    <div>
        <label for="user_email">您的邮箱地址:</label>
        <input type="email" id="user_email" name="user_email" required placeholder="请输入您的邮箱">
    </div>
    <div>
        <!-- 这里可以添加其他需要提交的字段 -->
        <input type="hidden" name="typeid" value="1"> <!-- 示例:传递一个栏目ID -->
    </div>
    <button type="submit">提交并获取Excel报告</button>
</form>

注意

  • action="/plus/send_excel.php":我们将在 plus 目录下创建一个专门的处理文件。
  • name="user_email":这个 name 属性值非常重要,后端PHP将用它来获取数据。

第三步:创建后端处理文件(核心逻辑)

在织梦的 /plus/ 目录下,创建一个新文件,命名为 send_excel.php

将以下代码完整复制到 send_excel.php 文件中,并根据你的实际情况进行修改。

织梦 excel发送到邮箱
(图片来源网络,侵删)
<?php
require_once(dirname(__FILE__)."/../include/common.inc.php");
require_once '../vendor/autoload.php'; // 引入 PhpSpreadsheet
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
// 引入 PHPMailer
// 注意:请将下面的路径修改为你实际存放PHPMailer文件的路径
require_once '../phpmailer/PHPMailer.php';
require_once '../phpmailer/SMTP.php';
require_once '../phpmailer/Exception.php';
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
/**
 * 生成并发送Excel邮件
 */
function sendExcelByEmail($toEmail, $excelData, $filename)
{
    // 1. 创建 Spreadsheet 对象
    $spreadsheet = new Spreadsheet();
    $sheet = $spreadsheet->getActiveSheet();
    // 2. 写入数据 (这里根据你的实际数据结构调整)
    // 设置表头
    $sheet->setCellValue('A1', 'ID');
    $sheet->setCellValue('B1', '标题');
    $sheet->setCellValue('C1', '发布时间');
    $sheet->setCellValue('D1', '点击量');
    // 写入数据 (示例:从织梦的dede_archives表获取数据)
    // $excelData 应该是一个二维数组,例如从数据库查询得到的结果
    $row = 2;
    foreach ($excelData as $data) {
        $sheet->setCellValue('A' . $row, $data['id']);
        $sheet->setCellValue('B' . $row, $data['title']);
        $sheet->setCellValue('C' . $row, date('Y-m-d H:i:s', $data['pubdate']));
        $sheet->setCellValue('D' . $row, $data['click']);
        $row++;
    }
    // 3. 保存 Excel 文件到服务器临时目录
    $writer = new Xlsx($spreadsheet);
    $tempFilePath = dirname(__FILE__) . '/temp_' . $filename . '.xlsx'; // 建议使用临时目录
    $writer->save($tempFilePath);
    // 4. 使用 PHPMailer 发送邮件
    $mail = new PHPMailer(true);
    try {
        // 服务器设置 - 请替换成你自己的SMTP配置
        $mail->isSMTP();                                            // 使用 SMTP
        $mail->Host       = 'smtp.example.com';                     // SMTP 服务器地址
        $mail->SMTPAuth   = true;                                   // 启用 SMTP 认证
        $mail->Username   = 'your_email@example.com';                // SMTP 用户名 (你的邮箱)
        $mail->Password   = 'your_email_password';                   // SMTP 密码 (注意:很多邮箱需要开启SMTP服务并使用授权码)
        $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;            // 启用 SSL/TLS 加密
        $mail->Port       = 465;                                    // SMTP 端口
        // 收件人
        $mail->setFrom('your_email@example.com', '织梦网站'); // 发件人
        $mail->addAddress($toEmail);                              // 收件人
        // 附件
        $mail->addAttachment($tempFilePath, $filename . '.xlsx'); // 添加附件
        // 内容
        $mail->isHTML(true);                                      // 设置邮件格式为 HTML
        $mail->Subject = '您请求的Excel报告';
        $mail->Body    = '您好,<br>您请求的Excel报告已生成,请查收附件。';
        $mail->AltBody = '您好,您请求的Excel报告已生成,请查收附件。';
        $mail->send();
        echo '邮件发送成功!';
    } catch (Exception $e) {
        echo "邮件发送失败: {$mail->ErrorInfo}";
    } finally {
        // 5. 删除服务器上的临时文件
        if (file_exists($tempFilePath)) {
            unlink($tempFilePath);
        }
    }
}
// --- 主程序逻辑 ---
// 1. 获取前端提交的数据
$userEmail = isset($_POST['user_email']) ? trim($_POST['user_email']) : '';
$typeid = isset($_POST['typeid']) ? intval($_POST['typeid']) : 0;
if (empty($userEmail) || !filter_var($userEmail, FILTER_VALIDATE_EMAIL)) {
    die('请输入有效的邮箱地址!');
}
// 2. 准备要写入Excel的数据 (这里以获取指定栏目下的文章为例)
$sql = "SELECT id, title, pubdate, click FROM `#@__archives` WHERE typeid = {$typeid} ORDER BY id DESC";
$dsql->SetQuery($sql);
$dsql->Execute();
$excelData = array();
while ($row = $dsql->GetArray()) {
    $excelData[] = $row;
}
// 3. 调用发送函数
$reportFilename = '栏目_' . $typeid . '_文章列表_' . date('YmdHis');
sendExcelByEmail($userEmail, $excelData, $reportFilename);
?>

第四步:代码详解与注意事项

  1. 配置邮件信息

    • sendExcelByEmail 函数中,找到 PHPMailer 的配置部分,务必修改成你自己的邮箱SMTP信息。
    • Host: SMTP服务器地址,如 smtp.qq.com, smtp.163.com
    • Username: 你的邮箱地址。
    • Password: 不是你的邮箱登录密码,而是SMTP授权码,你需要在你的邮箱设置中开启SMTP服务并获取授权码。
    • Port: SSL通常是465,TLS通常是587。
  2. 数据获取

    • 示例代码中,我们通过 $dsql->Execute() 查询了 #@__archives 表来获取文章数据,你需要根据你的实际业务需求修改SQL查询,获取你想要导出到Excel的数据。
  3. Excel内容生成

    • setCellValue('A1', 'ID') 用于设置单元格内容,你可以自由调整表头和数据。
  4. 文件路径

    • require_once '../vendor/autoload.php';require_once '../phpmailer/...'; 的路径是相对于 /plus/send_excel.php 的,请确保你的目录结构正确。
    • $tempFilePath = dirname(__FILE__) . '/temp_' . $filename . '.xlsx';,将临时文件生成在 /plus/ 目录下,为了安全,最好在网站根目录外创建一个专门的临时目录。
  5. 安全性

    • 对用户输入的数据(如邮箱)进行验证,如 filter_var($userEmail, FILTER_VALIDATE_EMAIL)
    • 对SQL查询中的变量进行类型转换和过滤,如 intval($typeid),防止SQL注入。

通过以上四个步骤,你就可以在织梦CMS中实现一个完整的功能:用户在前端提交邮箱,后端自动生成包含特定数据的Excel文件,并将其作为邮件附件发送给用户。

这个方案具有很强的扩展性,你可以轻松地将它应用到:

  • 后台管理:在后台某个操作(如“导出数据”)的点击事件中调用此逻辑。
  • 会员中心:会员登录后可以导出自己的订单、文章等数据。
  • 定时任务:结合织梦的计划任务,每天/每周自动生成并发送报表邮件。
-- 展开阅读全文 --
头像
织梦模板HTML5分享,如何快速上手与适配?
« 上一篇 2025-12-29
如何通过FTP修改织梦后台密码?
下一篇 » 2025-12-30

相关文章

取消
微信二维码
支付宝二维码

目录[+]