在之前的文章《PHP小示例:用户邮箱注册登录》(https://www.php.cn/original/86.html)中我们详细介绍了怎么用php来实现邮箱注册和登录的相关问题,提到邮箱我们可能还会遇到的问题就是群发邮件的相关问题,下面一起来看一下,希望对大家有帮助。
https://gitee.com/wang-boy326/sendemail.git
首先照例我们需要先设计表
该表用于存储需要群发的地址和姓名,建表语句如下:
CREATE TABLE `email_addresses` ( `id` int(11) NOT NULL, `email` varchar(255) NOT NULL, `name` varchar(20) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
该表用于存储群发的信息,包括群发信息的标题和群发信息的内容,建表语句如下:
CREATE TABLE `emails` ( `id` int(11) NOT NULL, `subject` varchar(255) NOT NULL, `message` text NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
在开始写代码之前,我们需要用到一个小插件:PHPMailer
PHPMailer是一个用于发送电子邮件的PHP库。它提供了一个简单、灵活和可靠的方式来发送电子邮件,支持SMTP、PHP mail()函数和Sendmail等邮件传输方式。
简单来说使用PHPMailer,可以轻松地在PHP应用程序中发送电子邮件
可以使用Composer来安装PHPMailer,运行命令是:
composer require phpmailer/phpmailer
<?php require_once 'database.php'; ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <h2>请输入您需要群发的邮件地址:</h2> <form action="save_email.php" method="GET"> <input type="email" name="email" placeholder="邮件地址" required> <input type="text" name="name" placeholder="姓名"> <input type="submit" value="提交"> </form> <form action="http://sendmail.deu/index.php" method="post"> <button type="submit">去发送</button> </form> <ul> <?php //最新留言展示在最前面 $sql = "SELECT * FROM `email_addresses` ORDER BY `email_addresses`.`id` DESC"; //执行sql语句 $result = $conn->query($sql); if($result->num_rows > 0){ //输出数据 while($row = $result->fetch_assoc()){ ?> <li> <p>群发地址:<?php echo $row["email"];?></p> <p>姓名:<?php echo $row["name"];?></p> </li> <?php } }else{ //没有留言 echo "暂无群发地址"; } ?> </ul> </body> </html>
这段代码主要实现了一个简单的群发邮件地址管理系统的前端界面。下面是对代码的功能进行分析:
HTML 表单:页面中包含两个 HTML 表单,分别用于输入邮件地址和姓名,并提交到 save_email.php 文件进行保存。
群发邮件地址展示:使用一个无序列表 <ul> 来展示已保存的群发邮件地址和姓名。通过执行 SQL 查询语句,从数据库中获取数据,并使用 PHP 循环语句将每个邮件地址和姓名显示在列表项 <li> 中。
没有留言提示:如果数据库中没有保存任何邮件地址,则显示 "暂无群发地址"。
发送邮件按钮:通过一个表单和提交按钮,将用户导航到 index.php 页面,用于发送邮件的功能。
总体而言,这段代码提供了一个简单的界面,让用户输入和保存群发邮件地址,并展示已保存的地址。用户还可以通过按钮跳转到发送邮件的功能页面。
<?php function insertEmailInfo($email, $name) { $servername = "localhost"; $username = "root"; $password = "root"; $dbname = "sendmail"; // 创建数据库连接 $conn = new mysqli($servername, $username, $password, $dbname); if ($conn->connect_error) { die("数据库连接失败: " . $conn->connect_error); } // 插入语句 $sql = "INSERT INTO `email_addresses` (`id`,`email`,`name`) VALUES (NULL,'$email','$name');"; // 执行插入语句,将留言信息插入到数据库中。 $conn->query($sql); $conn->close(); header("Location:collect.php"); } $email = $_GET["email"]; $name = $_GET["name"]; insertEmailInfo($email, $name); //跳转到首页 header("Location:http://sendmail.deu/collect.php"); ?>
这段代码主要用于将用户输入的邮件地址和姓名保存到数据库中,并进行页面跳转。
以下是代码的功能分析:
insertEmailInfo() 函数:该函数用于将邮件地址和姓名插入到数据库中。函数首先创建数据库连接,然后执行插入语句将邮件地址和姓名插入到 email_addresses 表中。最后关闭数据库连接。
获取邮件地址和姓名:通过 $email = $_GET["email"]; 和 $name = $_GET["name"]; 两行代码,从 URL 中获取用户输入的邮件地址和姓名。
调用 insertEmailInfo() 函数:将获取到的邮件地址和姓名作为参数传递给 insertEmailInfo() 函数,以将其保存到数据库中。
页面跳转:通过 header("Location:http://sendmail.deu/collect.php"); 代码进行页面跳转,将用户重定向到 collect.php 页面。
总体而言,这段代码的作用是将用户输入的邮件地址和姓名保存到数据库中,并将用户重定向到 collect.php 页面。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>发送邮件</title> </head> <body> <h2>发送邮件:</h2> <form method="post" action="send_email.php"> <label for="subject">主题:</label> <input type="text" name="subject" id="subject" required><br><br> <label for="message">内容:</label><br> <textarea name="message" id="message" required></textarea><br><br> <input type="submit" value="发送邮件"> </form> </body> </html>
这段代码实现了一个简单的发送邮件的表单页面。
<?php require 'vendor/autoload.php'; // 引入PHPMailer库 require_once 'database.php'; use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; function sendEmail($subject, $message) { $servername = "localhost"; $username = "root"; $password = "root"; $dbname = "sendmail"; $conn = new mysqli($servername, $username, $password, $dbname); if ($conn->connect_error) { die("数据库连接失败: " . $conn->connect_error); } // 执行查询,获取结果集对象 $result = $conn->query('SELECT * FROM email_addresses'); if ($result->num_rows > 0) { $successCount = 0; $errorCount = 0; while ($row = $result->fetch_array(MYSQLI_ASSOC)) { $mail = new PHPMailer(); $mail->isSMTP(); $mail->Host = 'smtp.qq.com'; // SMTP服务器 $mail->SMTPAuth = true; $mail->Username = '你的邮箱账号'; // 邮箱账号 $mail->Password = 'iygmjhqzpunqiicg'; // 邮箱密码 $mail->SMTPSecure = 'ssl'; $mail->Port = 465; $mail->setFrom('你的邮箱账号', 'wboy'); // 发件人邮箱和名称 $mail->addAddress($row["email"], $row["name"]); // 收件人邮箱和名称 $mail->Subject = $subject; // 邮件主题 $mail->Body = $message; // 邮件内容 if ($mail->send()) { $successCount++; } else { $errorCount++; } } if ($successCount > 0) { return '成功发送邮件给 ' . $successCount . ' 个收件人'; } else { return '邮件发送失败'; } } else { // 没有收件人 return "暂无群发地址"; } } function saveEmailInfo($subject, $message) { $servername = "localhost"; $username = "root"; $password = "root"; $dbname = "sendmail"; $conn = new mysqli($servername, $username, $password, $dbname); if ($conn->connect_error) { die("数据库连接失败: " . $conn->connect_error); } $sql = "INSERT INTO emails (subject, message) VALUES ('$subject', '$message')"; if ($conn->query($sql) === TRUE) { return "邮件信息保存成功!"; } else { return "邮件信息保存失败: " . $conn->error; } $conn->close(); } $subject = $_POST["subject"]; $message = $_POST["message"]; $sendEmail=sendEmail($subject, $message); $saveEmailInfo=saveEmailInfo($subject, $message); echo $sendEmail; echo $saveEmailInfo;
这段代码实现了发送邮件和保存邮件信息的功能。
sendEmail() 函数:该函数用于群发邮件给数据库中的收件人。函数首先创建数据库连接,然后执行查询语句获取收件人列表。接着使用 PHPMailer 库创建邮件对象,并设置 SMTP 服务器、邮箱账号、密码等信息。循环遍历收件人列表,将邮件发送给每个收件人。最后返回发送结果。
saveEmailInfo() 函数:该函数用于将邮件的主题和内容保存到数据库中。函数首先创建数据库连接,然后执行插入语句将邮件主题和内容插入到 emails 表中。根据插入结果返回相应的信息。
获取表单数据:通过 $subject = $_POST["subject"]; 和 $message = $_POST["message"]; 两行代码,从表单中获取用户输入的邮件主题和内容。
调用 sendEmail() 和 saveEmailInfo() 函数:将获取到的邮件主题和内容作为参数传递给 sendEmail() 和 saveEmailInfo() 函数,进行邮件发送和保存邮件信息的操作。
其中需要注意的就是SMTP服务器地址、SMTP密码
SMTP服务器地址不同的邮箱不同,可以搜一下
以qq邮箱为例:
1476浏览 2023-09-11
358浏览 2023-09-07
340浏览 2023-09-28
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
请在支付页面继续完成支付