<?php
require_once "./PHPExcel/IOFactory.php";class ReadAndWrite {public static $row;public static $column;public static $db;public static $recever,$mailaddress,$title,$content;public static function sql(){//连接数据库$servername = "localhost";$username = "root";$password = "1234";$dbname = "excelmail";self::$db = mysqli_connect($servername,$username,$password,$dbname);if(!self::$db){die("数据库连接失败".mysqli_connect_error());}else {echo "数据库连接成功!".'<br/>';}mysqli_set_charset(self::$db,'utf8');$dropsql = "DROP TABLE IF EXISTS `mail`;";if(mysqli_query(self::$db,$dropsql)){$createsql = "CREATE TABLE `mail` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,`recever` varchar(20) NOT NULL,`address` varchar(20) NOT NULL,`title` varchar(50) NOT NULL,`content` varchar(200) NOT NULL,`time` timestamp NULL DEFAULT CURRENT_TIMESTAMP,PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;";if(!(mysqli_query(self::$db,$createsql))){echo "数据表创建失败".mysqli_error(self::$db);}else {echo "create success".'<br/>';}}}public static function read($filenamer) {//导出数据和写入数据库$fileName = "mail.xlsx";if (!file_exists($fileName)) {return "文件不存在";}$phpExcel = PHPExcel_IOFactory::load($fileName);$phpExcel->setActiveSheetIndex(0);$sheetCount = $phpExcel->getSheetCount();self::$row = $phpExcel->getActiveSheet()->getHighestRow();self::$column = $phpExcel->getActiveSheet()->getHighestColumn();echo "表格数目为:$sheetCount" . "表格的行数:".self::$row . "列数:".self::$column;for ($i = 1; $i <= self::$row; $i++) {for ($c = 'A'; $c <= self::$column; $c++) {$data[] = $phpExcel->getActiveSheet()->getCell($c . $i)->getValue();}}echo "<pre>";print_r($data);   foreach(array_keys($data) as $k){}echo "key1:\"$k\"<br/>";for($num = 5;$num<=$k;$num+=4){self::$mailaddress[] = $data[$num];}for($num = 4;$num<=$k;$num+=4){self::$recever[] = $data[$num];}for($num = 6;$num<=$k;$num+=4){self::$title[] = $data[$num];}for($num = 7;$num<=$k;$num+=4){self::$content[] = $data[$num];}for($i = 4;$i<$k;$i+=4){$x = $i+1;$y = $x+1;$z = $y+1;$sql = "insert into mail(recever,address,title,content) values('$data[$i]','$data[$x]','$data[$y]','$data[$z]');";if(!($rs = mysqli_query(self::$db,$sql))){var_dump(mysqli_error(self::$db));var_dump($rs);echo '插入数据失败';}}}public static function write($filenamew) {//导出数据库和写入excel表格$fileName = "mail.xlsx";$phpExcel = PHPExcel_IOFactory::load($fileName);require_once "./PHPExcel/IOFactory.php";error_reporting(E_ALL);ini_set('display_errors', TRUE);ini_set('display_startup_errors', TRUE);date_default_timezone_set('Europe/London');define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '<br />');echo date('H:i:s') , " Create new PHPExcel object" , EOL;$objPHPExcel = new PHPExcel();//设置文档基本属性echo date('H:i:s') , " Set document properties" , EOL;$objPHPExcel->getProperties()->setCreator("ZARM")//设置创建者->setLastModifiedBy("2019/12/24")//设置时间->setTitle("PHPExcel")//设置标题->setSubject("excelmail")//设置备注->setDescription("null")//设置描述->setKeywords("office PHPExcel php")//设置关键字->setCategory("Test result file");//设置类别echo date('H:i:s') , " Add some data" , EOL;$objPHPExcel->getActiveSheet()->getStyle('C')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_TEXT);$objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1', '收件人')->setCellValue('B1', '邮箱地址')->setCellValue('C1','标题')->setCellValue('D1', '内容')->setCellValue('E1','发送时间');$rs = mysqli_query(self::$db,"select recever,address,title,content,time from mail;");if(mysqli_num_rows($rs) > 0 ){while($mysql_r = mysqli_fetch_array($rs,MYSQLI_NUM)){print_r($row);$data_write[]=$mysql_r;}}print_r($data_write);for($x = 2,$datas = 0;$datas<=self::$row-2;$x++,$datas++){for($y ='A',$z = 0;$y<='E'&&$z<=4;$y++,$z++){$objPHPExcel->setActiveSheetIndex(0)->setCellValue($y.$x,$data_write[$datas][$z]);}}$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(25);$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(35);$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(20);echo date('H:i:s') , " Rename worksheet" , EOL;$objPHPExcel->getActiveSheet()->setTitle('Simple');$objPHPExcel->setActiveSheetIndex(0);echo date('H:i:s') , " Write to Excel2007 format" , EOL;$callStartTime = microtime(true);$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');$objWriter->save(str_replace('.php', '.xlsx', __FILE__));$callEndTime = microtime(true);$callTime = $callEndTime - $callStartTime;echo date('H:i:s') , " Write to Excel5 format" , EOL;$callStartTime = microtime(true);}public static function sendMail($to,$title,$content){//发送邮件require_once("phpmailer/class.phpmailer.php"); require_once("phpmailer/class.smtp.php");$mail = new PHPMailer();$mail->SMTPDebug = 1;$mail->isSMTP();$mail->SMTPAuth=true;$mail->Host = 'smtp.qq.com';$mail->SMTPSecure = 'ssl';$mail->Port = 465;$mail->Hostname = '入门到精通';$mail->CharSet = 'UTF-8';$mail->FromName = '入门到精通';$mail->Username ='XXXXXXXX@qq.com';$mail->Password = 'diiksozjktkegbif';$mail->From = 'XXXXXX@qq.com';$mail->isHTML(true); $mail->addAddress($to);$mail->Subject = $title;$mail->Body = $content;$status = $mail->send();if($status) {return true;}else{return false;}}
}
?>
<?phprequire('./readandwrite_three.php');ReadAndWrite::sql();ReadAndWrite::read('mail.xlsx');ReadAndWrite::write('write.xlsx');for($num=0,$nums=1;$num<=ReadAndWrite::$row-2;$num++,$nums++){$flag = ReadAndWrite::sendMail(ReadAndWrite::$mailaddress[$num],ReadAndWrite::$title[$num],ReadAndWrite::$content[$num]);if($flag){echo "<h3>"."第".$nums."封邮件发送邮件成功!:)"."</h3>"."<br/>";}else{echo "<h3>"."第".$nums."发送邮件失败!:("."</h3>"."<br/>";}}
?>

准备工作:

1.需要下载PHPExcel和PHPMailer类库文件,放到根目录中,并且配置相应环境。

2.创建一个excel表,用来输入邮件内容,代码中用的是mail.xlsx。如:

3.新建一个数据库,代码中用的是excelmail。

该系统具体流程为:在excel表中写入数据->从excel表中导出数据放入数据库中->将数据库中的数据导出写入excel表格->发送邮件。

也可以先发送邮件再导入excel表格,这样的话就可以再插入一列,显示是否发送成功。

数据导入数据库时容易出现乱码,可以使用相应的数据库管理软件。如:navicat。

在命令提示符中:

在navicat中:

且在创建表时应该统一设置为utf8模式

发送成功时显示:

最好不要让用户看到调试信息和错误信息。可以将错误信息换成错误代码,如101,102.

发送成功后,会出现一个新的excel表,打开可以看到一下内容

重难点为:

1.PHPMailer和PHPExcel的使用

2.foreach的使用

3.static的使用

每天一点PHP之第四天:基于excel表格的邮箱系统相关推荐

  1. 结构光系统标定(四)基于双目视觉的结构光系统标定

    上一篇文章讲了基于多项式拟合的结构光系统标定,实际上就是将一系列待测的长度值,隐式地表达在一个多项式里面,通过拟合的方式去求出从相位计算三维坐标所需的参数.当然,这个名字是我自己取的,不一定准确. 这 ...

  2. 【matlab选题推荐四】基于图像识别的人脸考勤系统

    题目:基于图像识别的人脸考勤系统 背景 :课堂考勤系统的作用为督促学生参与到课堂教学中,让学生能够更好学习相关知识.传统的课堂教学采用课堂点名的方式,容易打乱教师的授课节奏.基于对人脸识别技术开发现状 ...

  3. java初级系统项目_JavaSE-初级阶段项目-基于excel表格的学生管理系统

    1.需求分析 配置 项目文件 环境:IDEA IntelliJ 工具包 :hutool-poi-apidocs 工具包导入: 右击项目文件 open module settings 3.具体实现 (1 ...

  4. python基础学习四:合并Excel表格小程序

    import xlrd import xlsxwriter import os #在原有的基础上,对程序进行完善:因为大多数合并的表格,他们的格式都是一样的,就拿我自己来说, #把很多同学填写的信息进 ...

  5. word2vec 中的数学原理具体解释(四)基于 Hierarchical Softmax 的模型

    word2vec 是 Google 于 2013 年开源推出的一个用于获取 word vector 的工具包,它简单.高效,因此引起了非常多人的关注.因为 word2vec 的作者 Tomas Mik ...

  6. fpga驱动rgb液晶屏_正点原子开拓者FPGA开发板资料连载第五十四章基于的数字识别实验...

    1)实验平台:正点原子开拓者FPGA 开发板 2)摘自<开拓者FPGA开发指南>关注官方微信号公众号,获取更多资料:正点原子 3)全套实验源码+手册+视频下载地址:http://www.o ...

  7. (四)基于Multisim的超外差接收系统:检波器的设计

    (四)基于Multisim的超外差接收系统 写在前面 系统要求 基本原理 本地振荡器的设计 混频器的设计 中频放大器的设计 检波器的设计 二极管大信号包络检波 基本原理 充放电过程 惰性失真和负峰切割 ...

  8. 实践数据湖iceberg 第三十四课 基于数据湖icerberg的流批一体架构-流架构测试

    系列文章目录 实践数据湖iceberg 第一课 入门 实践数据湖iceberg 第二课 iceberg基于hadoop的底层数据格式 实践数据湖iceberg 第三课 在sqlclient中,以sql ...

  9. 聚类(四)—— 基于密度的聚类

    主要内容 聚类分析概述 K-Means聚类 层次聚类 基于密度的聚类 其他聚类方法 聚类评估 小结 四.基于密度的聚类 算法原理 基于密度的聚类算法的主要思想是:只要邻近区域的密度(对象或数据点的数目 ...

最新文章

  1. QIIME 2教程. 10数据导出Exporting data(2020.11)
  2. Python中的eval--字符串解析
  3. python2.7虚拟环境virtualenv安装及使用
  4. 【Modern OpenGL】坐标系统 Coordinate Systems
  5. 表格锁定表头不动_Excel教程:你有没有被表头难过?分享几招搞定(下)
  6. over oracle 不足补零,oracle的rank,over partition涵数使用
  7. Maven教程:tutorialspoint-maven
  8. Java 多线程:线程池实现原理
  9. 数据结构课设:仓库管理系统(C++)
  10. 高等数学(第七版)同济大学 习题7-3 个人解答
  11. 前端实现打印页面的指定内容 + 快递面单的模板
  12. python自动聊天机器人_Python实现微信聊天机器人
  13. 【趣读官方文档】1.管家的抉择 (Android进程生命周期)
  14. 南京标志设计-logo商标设计-企业VI形象识别系统
  15. 常用数学符号英文名字
  16. 无人驾驶汽车系统入门(二)——高级运动模型和扩展卡尔曼滤波
  17. 世界节约水资源日PPT模板
  18. hp打印机没连上计算机,有关如何将HP打印机连接到计算机,如何添加打印机的详细步骤-...
  19. [Pico]读取新建写入文本文件
  20. Faceted project metadata file “/game/.settings/org.eclipse.wst.common.projec

热门文章

  1. 最新kube-batch编译、部署、运行无坑教程
  2. ABAP SAP 千分位 处理
  3. C++ 2048 编程 小游戏
  4. javascript 、Jquery 拆分字符串
  5. Windows SDK
  6. 怎么样可以把自己的项目部署在腾讯云服务器上,别人可以访问到
  7. 弹弹堂分析与部分源码模拟实现
  8. Linux部署 kafka集群
  9. 中国铂合金行业发展趋势及投资风险研究报告
  10. github中如何删除本地仓库