dede邮件群发mail txt文件夹如何使用?

99ANYc3cd6
预计阅读时长 21 分钟
位置: 首页 DEDE建站 正文

核心概念解析

我们要理解 mailtxt 这两个文件夹在DedeCMS邮件系统中的角色:

dede邮件群发mail txt文件夹
(图片来源网络,侵删)

txt 文件夹:邮件模板库

  • 位置: /plus/ 目录下。
  • 作用: 这个文件夹是DedeCMS存放邮件模板文件的地方,邮件模板不是最终要发送的邮件内容,而是一个带有“占位符”的HTML或纯文本文件。
  • 占位符: 模板中会使用一些特殊标记(如 {dede:field.name/})来代表动态内容,当发送邮件时,系统会用实际的数据(如用户名、订单号、文章标题等)替换掉这些占位符。
  • 常见文件:
    • sendmail.txt: 最常用的模板,通常用于发送系统通知、会员注册验证、密码重置等,默认是纯文本格式。
    • htmlmail.txt: 用于发送HTML格式的邮件,可以包含图片、样式、链接等,视觉效果更好。
    • 你也可以在这个文件夹里创建自己的模板文件,promotion.txt (活动推广)、news_letter.txt (电子报) 等。

mail 文件夹:邮件发送程序

  • 位置: /include/ 目录下。
  • 作用: 这个文件夹包含了DedeCMS处理邮件发送的核心PHP文件,它负责读取邮件模板、替换占位符、连接邮件服务器,并最终将邮件发送出去。
  • 关键文件:
    • sendmail.php: 最重要的文件,这是执行邮件发送的脚本,我们通常通过调用这个文件来触发邮件群发。
    • config_smtp.php: 邮件服务器配置文件,用于设置发送邮件所需的SMTP服务器地址、端口、账号和密码。
    • .cls_smtp.php: SMTP协议的底层实现类,封装了与邮件服务器通信的细节。

邮件群发的完整流程

下面我们通过一个完整的流程,从配置到执行,来理解如何使用这两个文件夹进行邮件群发。

配置邮件服务器

在发送邮件之前,必须先告诉DedeCMS你的邮箱信息。

  1. 找到配置文件: 打开 /include/mail/config_smtp.php

  2. 修改配置信息:

    dede邮件群发mail txt文件夹
    (图片来源网络,侵删)
    // $smtpserver = "smtp.qq.com"; // SMTP服务器
    // $smtpserverport = 25; // SMTP服务器端口
    // $smtpusermail = "your_email@qq.com"; // 你的邮箱
    // $smtpuser = "your_email@qq.com"; // SMTP服务器的用户名 (通常和邮箱一样)
    // $smtppass = "your_password"; // SMTP服务器的密码 (注意:很多邮箱需要使用授权码,不是登录密码!)
    // $mailtype = "TXT"; // 邮件格式 (TXT 或 HTML)
    // $smtp = array (
    //     "host"=>$smtpserver,
    //     "port"=>$smtpserverport,
    //     "user"=>$smtpuser,
    //     "pass"=>$smtppass
    // );

    重要提示:

    • 授权码: 对于QQ邮箱、163、Gmail等,密码通常指“客户端授权码”,你需要在你的邮箱设置中开启SMTP服务并获取授权码。
    • 端口: 常见端口有 25 (非加密), 465 (SSL加密), 587 (TLS加密),建议使用 465587,更安全。
    • $mailtype: 如果你想发送HTML邮件,就设置为 "HTML",此时系统会默认去调用 htmlmail.txt 模板。

准备或修改邮件模板

  1. 打开模板文件: 编辑 /plus/txt/sendmail.txt (或 htmlmail.txt)。

  2. : 模板文件里可以写固定的文本,也可以使用DedeCMS的模板标签。

    • 纯文本示例 (sendmail.txt):

      dede邮件群发mail txt文件夹
      (图片来源网络,侵删)
      尊敬的{dede:field.name/},您好!
      感谢您注册我们的网站,您的账号信息如下:
      用户名:{dede:field.name/}
      邮箱:{dede:field.email/}
      请点击以下链接激活您的账户:
      {dede:global.cfg_basehost/}/member/index_do.php?fmdo=user&dopost=checkreg&uid={dede:field.userid/}&key={dede:field.randcode/}
      如果无法点击,请将链接复制到浏览器中打开。
      此致,
      敬礼!
      [网站名称]
    • HTML示例 (htmlmail.txt):

      <html>
      <head>
          <meta charset="utf-8">
          <title>欢迎加入我们!</title>
      </head>
      <body>
          <p>尊敬的<strong>{dede:field.name/}</strong>,您好!</p>
          <p>感谢您注册我们的网站,您的账号信息如下:</p>
          <table border="1">
              <tr><td>用户名</td><td>{dede:field.name/}</td></tr>
              <tr><td>邮箱</td><td>{dede:field.email/}</td></tr>
          </table>
          <p>请点击以下按钮激活您的账户:</p>
          <a href="{dede:global.cfg_basehost/}/member/index_do.php?fmdo=user&dopost=checkreg&uid={dede:field.userid/}&key={dede:field.randcode/}" style="padding: 10px 15px; background-color: #4CAF50; color: white; text-decoration: none;">激活账户</a>
          <p>如果按钮无法点击,请将链接复制到浏览器中打开。</p>
          <p>此致,<br>敬礼!<br>[网站名称]</p>
      </body>
      </html>

调用发送程序进行群发

这是最关键的一步,你需要在某个PHP文件中调用 sendmail.php 来触发发送,通常有两种方式:

通过后台手动触发(常用)

  1. 创建触发文件: 在网站根目录创建一个新文件,send_all_mail.php

  2. 编写代码: 将以下代码粘贴到 send_all_mail.php 中。

    <?php
    require_once (dirname(__FILE__) . "/include/common.inc.php");
    require_once DEDEINC."/mail.cls.php";
    set_time_limit(0); // 防止脚本超时
    // 1. 获取所有需要发送邮件的用户
    $dsql->SetQuery("SELECT id, uname, email FROM `dede_member` WHERE email != ''");
    $dsql->Execute();
    $user_count = $dsql->GetTotalRow(); // 获取总用户数,用于进度提示
    echo "开始发送邮件,共需发送给 {$user_count} 位用户...<br>";
    $i = 0;
    // 2. 遍历每个用户,并发送邮件
    while ($row = $dsql->GetArray()) {
        $i++;
        // 准备替换模板的数据
        $emailbody = "
            尊敬的".$row['uname'].",您好!
            这是一封系统测试邮件,用于验证邮件群发功能。
            您的用户信息如下:
            用户名:".$row['uname']."
            用户ID:".$row['id']."
            邮箱:".$row['email']."
            感谢您的关注!
            [你的网站名称]
        ";
        // 调用邮件发送类
        $mailtype = 'TXT'; // 如果是HTML邮件,则设置为 'HTML'
        $smtp = new smtp();
        $smtp->smtp_send($row['email'], '【网站通知】测试邮件', $emailbody, $mailtype);
        echo "已发送给第 {$i} / {$user_count} 位用户: {$row['email']}<br>";
        flush(); // 立即输出缓冲区内容
        ob_flush(); // 关闭缓冲区
        sleep(1); // 礼貌性暂停1秒,避免邮件服务器拒绝连接
    }
    echo "邮件群发完成!";
    ?>
  3. 执行: 在浏览器中访问 http://你的域名/send_all_mail.php,脚本就会开始执行并逐条发送邮件。

通过后台功能触发(如会员管理)

DedeCMS的会员管理模块中,本身就集成了邮件群发功能,其原理也是调用了 sendmail.php

  1. 登录后台: 进入“核心” -> “会员管理” -> “会员列表”。
  2. 选择会员: 勾选你想要发送邮件的会员,或者点击“全选”。
  3. 执行操作: 在列表下方的“批量操作”下拉菜单中,选择“发送邮件”。
  4. 填写信息:
    • 邮件主题: 填写邮件的标题。
    • : 这里可以直接写邮件内容,也可以使用模板,系统会自动使用 /plus/txt/sendmail.txt 作为模板,并将选中的会员信息(如用户名)替换到模板中。
  5. 点击“确定发送”: 系统会开始批量发送邮件。

注意事项与最佳实践

  1. 邮件服务器限制: 不要在短时间内发送大量邮件,这极易被邮件服务器(如QQ、Gmail)识别为垃圾邮件发送行为,导致你的IP或域名被列入黑名单,使用 sleep() 函数控制发送频率是很好的做法。
  2. 队列处理: 对于超大规模的邮件群发(如数万封),直接循环执行可能会导致服务器超时或崩溃,更专业的做法是使用队列系统:先生成一个任务队列(将所有待发送的邮件信息存入数据库表),然后通过一个计划任务(如Linux的cron job)每隔一段时间执行一次发送任务,每次处理少量邮件。
  3. 测试先行: 在进行大规模群发前,务必先用一两个测试邮箱地址进行测试,确保邮件模板、内容和发送逻辑都正确无误。
  4. 内容合规: 确保你的邮件内容不包含垃圾邮件的关键词,并提供明确的退订方式,以提高邮件的送达率和打开率。
  5. 附件: 如果需要发送附件,你需要修改 sendmail.php 或使用更高级的邮件类(如PHPMailer),因为DedeCMS自带的邮件类对附件的支持比较有限。
  • txt文件夹“模板库”,存放的是带有占位符的邮件草稿。
  • mail文件夹“引擎车间”,存放的是处理邮件发送逻辑的PHP代码。
  • 邮件群发的核心流程是:配置服务器 (config_smtp.php) -> 准备模板 (txt/) -> 调用发送程序 (sendmail.php),并通过一个循环脚本将模板内容动态填充并发送给不同的收件人。
-- 展开阅读全文 --
头像
unsigned short范围是多少?
« 上一篇 2025-12-04
如何织梦index.php频繁被挂马?
下一篇 » 2025-12-04

相关文章

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

目录[+]