一个简单的PHP邮件列表管理器
2015-09-11 10:22
597 查看
1、需求分析
管理员应该能够建立和修改邮件内容。管理员应该能够将文本或HTML格式的新闻信件发送给一个列表中的所有订阅者。
用户应该能够通过注册使用一个站点,并且可以进入并修改他们的个人资料。
用户应该能够订阅该站点的任意一个列表的新闻信件。
用户应该能够取消一个邮件列表的订阅。
用户应该能够根据个人喜好以HTML格式或纯文本格式存储新闻信件。
处于安全的原因,用户应该不能将邮件发送到列表,或者不能看见其他用户的邮件地址。
用户和管理员应该能够查看有关邮件列表的信息。
用户和管理员应该能够查看过去已经噶送给某个列表(存档文件)上的新闻信件。
2、解决方案
2.1 用户权限图
2.2 邮件列表管理器中的文件列表
文件名称 | 类型 | 描述 |
index.php | 应用程序 | 运行整个程序中的主要脚本 |
include_fns.php | 函数 | 该程序包含文件的集合 |
data_valid_fns.php | 函数 | 验证输入数据的函数集合 |
db_fns.php | 函数 | 连接到mlm数据库中的函数集合 |
mlm_fns.php | 函数 | 该应用程序专用的函数集合 |
output_fns.php | 函数 | 输出HTML的函数集合 |
upload.php | 组件 | 该脚本对管理员使用的文件上载组件进行管理。单独列出以简化安全机制 |
user_auth_fns.php | 函数 | 用户验证的函数集合 |
create_database.sql | SQL | 用来设置mlm数据库,设置Web用户和管理员用户的SQL |
2.3 邮件列表管理器中可能的操作
动作 | 执行者 | 描述 |
log-in | 任何人 | 为用户给出一个登录表单 |
log-out | 任何人 | 结束一个会话 |
new-account | 任何人 | 为用户创建一个新账号 |
store-account | 任何人 | 保存账号详细信息 |
show-all-lists | 任何人 | 显示可供使用的邮件列表的清单 |
show-archive | 任何人 | 显示特定列表的存档新闻信件 |
information | 任何人 | 显示特定列表的基本信息 |
account-settings | 登录用户 | 显示用户账户设置 |
show-other-lists | 登录用户 | 显示用户没有订阅的邮件列表 |
show-my-lists | 登录用户 | 显示用户已经订阅的邮件列表 |
subscribe | 登录用户 | 用户订阅特定列表 |
unsubscribe | 登录用户 | 取消用户对特定列表的订阅 |
change-password | 登录用户 | 显示修改密码表单 |
store-change-password | 登录用户 | 在数据库中更新用户密码 |
create-mail | 管理员 | 显示上载新闻信件表单 |
create-list | 管理员 | 显示创建新邮件列表表单 |
store-list | 管理员 | 在数据库中保存邮件列表的详细信息 |
view-mail | 管理员 | 显示已经上载但仍未发送的新闻信件 |
send | 管理员 | 向订阅者发送新闻信件 |
3、实现数据库
CREATE DATABASE mlm; #创建mlm数据库 use mlm; #使用mlm数据库 CREATE TABLE lists #列表 ( listid INT AUTO_INCREMENT NOT NULL PRIMARY KEY, #列表ID listname CHAR(20) NOT NULL, #列表名 blurb VARCHAR(255) #列表主要内容 ); CREATE TABLE subscribers #订阅者 ( email CHAR(100) NOT NULL PRIMARY KEY, #邮箱 realname CHAR(100) NOT NULL, #真实姓名 mimetype CHAR(1) NOT NULL, #想要接收邮件类型 password CHAR(40) NOT NULL, #密码 admin TINYINT NOT NULL #管理员标记 ); CREATE TABLE sub_lists #订阅-列表关系表 ( email CHAR(100) NOT NULL, #邮件 listid INT NOT NULL #列表ID ); CREATE TABLE mail #邮件表 ( mailid INT AUTO_INCREMENT NOT NULL PRIMARY KEY, #邮件ID email CHAR(100) NOT NULL, #发送方 subject CHAR(100) NOT NULL, #主题 listid INT NOT NULL, #列表ID status CHAR(10) NOT NULL, #邮件状态,是否被发送 sent DATETIME, #发送时间 modified TIMESTAMP #最后一次修改时间戳 ); CREATE TABLE images #图像表 ( mailid INT NOT NULL, #邮件ID path CHAR(100) NOT NULL, #路径 mimetype CHAR(100) NOT NULL #图片类型 ); GRANT SELECT,INSERT,UPDATE,DELETE #创建mlm用户 ON mlm.* TO mlm@localhost IDENTIFIED BY 'password'; #插入订阅者标记 INSERT INTO subscribers VALUES ('admin@localhost','Administrative User','H',SHA1('admin'),1); INSERT INTO subscribers VALUES ('Switch_1@switch.com','Administrative User','H',SHA1('admin'),1);
4、实现源代码
下载地址:一个简单的PHP邮件列表管理器相关文章推荐
- php中的mysql和mysqli
- php中的mysql和mysqli
- URL重写是实现PHP伪静态
- NTP monlist指令反射型分布式拒绝服务
- 一个简单的php restful 框架 slim framework
- PHP数据库连接mysql与mysqli的区别与用法
- php抽象类和接口的异同【转】
- php无极分类
- RTP传输中的负载类型和时间戳
- 文件传输协议FTP、SFTP和SCP
- PHP核心知识要点
- PHP-P函数打印数据
- PHP-C函数读取配置信息
- ThinkPHP函数详解之M方法和R方法
- php上传功能集后缀名判断和随机命名(强力推荐)
- 给定一个数组input[] ,如果数组长度n为奇数,则将数组中最大的元素放到 output[] 数组 最中间的位置,如果数组长度n为偶数,则将数组中最大的元素放到 output[] 数组中间两个位置偏右的那个位置上
- 国内外免费PHP开源建站程序
- laravel blog 一
- PHP路由设置原理
- php通用防注入和XSS攻击全局过滤代码