Skip to content

系统可用于处理 多项目定时邮件 冲突问题,可实现定时发送固定邮件,定时发送动态邮件(调用自定义函数返回内容),通过标志定位 (表查询) 管理定时队列中的邮件。

License

Notifications You must be signed in to change notification settings

wangerzi/Multi-project-timed-mail-delivery-management

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Multi - project timed mail delivery management

多项目定时邮件发送管理

Overview:

本系统可用于处理 多项目定时邮件 冲突问题,邮件发送使用PHPMailer类。

系统可实现定时发送固定邮件,定时发送动态邮件(调用自定义函数返回内容),通过 表查询 管理定时队列中的邮件。

通过PDO操作MySQL数据库(或者使用redis驱动)实现邮件定时队列和待发送队列。通过for字段可有效区分 项目、发送用户、发送目的,并通过MyEmail类中的delEmailTimeQueue方法进行控制。

线上案例:学习计划管理系统

源码内置demo/demo-test.php用来熟悉使用本系统。

详见MyEmail.class.php,Conf/mail.php,Conf/db.php

Structure

目录结构
----------
|---PHPMailer/-PHPMailerAutoload.php      #PHPMailer插件
|
|         |--db.php                       #数据库配置
|         |
|         |--redis.php                    #redis配置
|---Conf/-|
|         |--mail.php                     #邮件发送配置。
|
|           |--Db.php                     #数据库处理驱动
|---Driver/-|
|           |--Redis.php                  #redis处理驱动
|
|--demo/--demo-test.php                   #邮件发送案例
|
|--MyEmail.class.php                      #核心类文件
|
|--time.php                               #定时邮件发送脚本
|
|--windows.bat                            #批处理刷脚本以达到定时发送效果
|
|--Linux.sh                               #直接使用Linux的shell指令
|
|--wq_mail.sql                            #数据库文件,内含表结构。

Usage

Windows:使用 windows.bat 即可

文件实质: php time.php

Linux:使用 Linux.sh 即可,若使用 nohup php time.php &可实现登出后依旧后台运行

文件实质: nohup php time.php &
配置(Conf/mail.php和Conf/db.php):
  1. 需要打开php.ini中的 php_openssl扩展,否则SMTP Connect failed
  2. Conf/mail.php中配置&&用户名、密码、邮件引用,自动调用函数加载 等信息。
  3. 使用mysql等数据库作为处理驱动
    1. 创建数据库 wq_mail,执行wq_mail.sql 初始化表结构。
    2. Conf/db.php 中配置数据库连接信息。
  4. 使用redis作为处理驱动
    1. 在Linux或Windows中开启redis-server
    2. Conf/redis.php中配置redis服务器地址和密码等信息。
    3. Conf/mail.php中配置MAIL_DRIVER=>'redis'
调用(更多请看demo/demo-test.php):
<?php
    require "./MyEmail.class.php";//这里填写MyEmail类的路径。
    //首先,引入MyEmail.class.php
    require '../MyEmail.class.php';
    
    //然后,实例化对象
    $email = new MyEmail();
    
    //最后,发邮件或者管理邮件即可。
    $email->addEmailTimeQueue('admin@wj2015.com.cn','对方称呼','邮件名字','内容',time()+20);//延迟20s发送
?>

Notice

  1. 本系统为原生PHP开发,PHP版本最好在5.3.8以上,以减少MySQL注入等安全问题。
  2. 系统发送邮件的功能由PHPMailer实现,用户可自己制定PHPMailer的路径。
  3. 使用时,需要在php.ini中开启php_openssl 扩展,否则出现SMTP connect failed.错误。
  4. 数据库操作使用PDO对象,所以需要在php.ini中开启php_pdo相关扩展。
  5. 如果使用QQ邮箱,在配置Conf/mail.php中的密码时,需要用QQ邮箱独立密码。
  6. 为了避免重复发送邮件 和 端口冲突等问题,time.php只能用命令行执行,无法用HTTP访问。
  7. 如果您的发送内容是某函数返回值,并且该函数基于 Thinkphp等框架实现,请在Conf/mail.php中配置MAIL_CON_EXTRA中配置入口文件(index.php)以及函数所在路径(Common/function.php)。
  8. 如果您的发送内容是某函数返回值,并且该函数基于 Thinkphp等框架实现,请在Conf/mail.php中配置MAIL_CON_EXTRA中配置入口文件(index.php)或者核心文件(../ThinkPHP/ThinkPHP.class.php)+函数所在路径(Common/function.php)。
    1. 对于使用框架的用户,个人建议引入核心文件,因为引入入口文件可能会因为静态缓存等原因导致脚本停止运行。

    2. 经过实际的使用,还是建议使用框架入口文件,因为引入核心文件很容易出现框架的自动加载文件出错,导致程序终止运行。

    3. 当使用框架自带缓存的时候,请先将缓存关掉,避免程序终止,程序开启成功后即可再次开启缓存。

       配置样例('Conf/mail.php'):
       ...
       ...
       'MAIL_CON_EXTRA'    =>  '../index.php',
       ...
       ...
      
    4. 注意:如果引入入口文件(index.php),则需要在index.php中加入chdir(dirname(__FILE__))改变include相对定位点,否则加载出错。

       配置样例('Conf/mail.php'):
       ...
       ...
       //加载框架的入口函数,记得在`index.php`中调用chdir(dirnane(__FILE__))
       'MAIL_CON_EXTRA'    =>  '../index.php,../LMS/Common/functions.php',
       ...
       ...
      

Version

1.0.3 2017年06月18日
  1. UPG:程序支持redis处理了,如果有redis服务的话,可在Conf/mail.php中调整参数MAIL_DRIVER=>'redis',然后编辑Conf/redis.php写入连接信息即可。
  2. OPT:程序结构有所调整,Driver/目录下存放Db.php和Redis.php,分别为数据库和redis的处理驱动。
  3. BUG:处理了重复引入自身配置,驱动文件报错的问题。
1.0.2 2017年05月8日
  1. BUG:修复普通定时邮件重复发送的BUG(需要更改wq_email_time中repeat,is_function的数据类型)。
  2. OPT:针对定时邮件积累的优化,当定时过早,只会发一次邮件,而不是重复发n次。
  3. OPT:由于该进程一直开启,Linux重定向输出会占用很大的空间,所以修改了time.php中处理逻辑,只输出有价值的信息。
1.0.1 2017年03月24日
  1. BUG:更改重复发送部分的逻辑错误。
  2. OPT:优化include相对定位点的问题。
1.0.0 2017年5月2日

第一个版本

author:Jeffrey Wang - 2017年3月2日21:19:49

About

系统可用于处理 多项目定时邮件 冲突问题,可实现定时发送固定邮件,定时发送动态邮件(调用自定义函数返回内容),通过标志定位 (表查询) 管理定时队列中的邮件。

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages