【PHP】使用 PHPMailer 实现邮件的实时发送
CrazyPanda发表于:2023-12-28 21:08:26浏览:317次
今天我们利用GitHub上20K+星星的项目 PHPMailer
实现一个接收询盘并实时同步到指定邮箱的功能。
实现基本的HTML+CSS
首先我们用 HTML+CSS 做一个简单的 form
表单
<div> <div> <div>You can contact us at anytime!</div> <form action="zuizhong.php" method="post"> <input type="text" name="inquiry_lam_name_footer" placeholder='Your Name'> <input type="text" name="inquiry_lam_email_footer" placeholder='Your E-mail'> <input type="text" name="inquiry_lam_phone_footer" placeholder='Your Phone'> <input type="text" name="inquiry_lam_address_footer" placeholder='Your Company Name'> <textarea name="inquiry_lam_message_footer" placeholder='Briefly describe your requirement'></textarea> <button type="submit">Send</button> </form> </div> </div>
加点 CSS
body { font-family: Arial, sans-serif; background-color: #f4f4f4; margin: 0; padding: 0; } div { max-width: 600px; margin: 20px auto; padding: 20px; background-color: #fff; border-radius: 5px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); } div > div { text-align: center; margin-bottom: 20px; } form input[type="text"], form textarea { width: 100%; padding: 10px; margin-bottom: 10px; border-radius: 5px; border: 1px solid #ccc; box-sizing: border-box; } form button { padding: 10px 20px; border: none; border-radius: 5px; background-color: #007bff; color: #fff; cursor: pointer; } form button:hover { background-color: #0056b3; }
此时表单显示如下:
下载 PHPMailer 并配置
Github地址:https://github.com/PHPMailer/PHPMailer
我是直接下载上面的这个压缩包,下载后解压,层级一定要放对,不然无法调用。
获取邮箱授权码
这里我就以国内使用最多的QQ邮箱为例,当然其他邮箱也都类似,首先登录网页版QQ邮箱,找到设置——账号
翻到下面找到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务,点击管理服务,有的可能没开启,需要先开启服务
点击生成授权码,记得保存一下,后面需要用到
mail.php 示例代码
<?php use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; require 'PHPMailer/src/Exception.php'; require 'PHPMailer/src/PHPMailer.php'; require 'PHPMailer/src/SMTP.php'; $mail = new PHPMailer(true); try { $mail->isSMTP(); $mail->Host = 'smtp.qq.com'; //QQ邮箱用这个,跟我一样就行 $mail->SMTPAuth = true; $mail->Username = '1836360247@qq.com'; //换成你的qq邮箱 $mail->Password = 'eqjnv*****achaa'; //就是刚刚的授权码,用你的替换 $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; $mail->Port = 465; //默认都是465 //Recipients $mail->setFrom('1836360247@qq.com', 'haiyong'); $mail->addAddress('208617432@qq.com', 'Joe User'); //添加收件人 // $mail->addAddress('208617432@qq.com'); //名字可加可不加,需要多个收件人,在后面增加就行 //邮件内容 $mail->isHTML(true); $mail->Subject = '来自 海拥 的询盘'; $mail->Body = '这是一封来自 <b>海拥</b> 的询盘'; $mail->AltBody = 'This is the body in plain text for non-HTML mail clients'; $mail->send(); echo '邮件已发送'; } catch (Exception $e) { echo "邮件未发送 Mailer Error: {$mail->ErrorInfo}"; }
测试一下,可成功收到邮件。
最终实现代码
zuizhong.php
<?php use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; require 'PHPMailer/src/Exception.php'; require 'PHPMailer/src/PHPMailer.php'; require 'PHPMailer/src/SMTP.php'; // 获取表单提交的数据 if ($_SERVER["REQUEST_METHOD"] == "POST") { $name = $_POST['inquiry_lam_name_footer'] ?? ''; $email = $_POST['inquiry_lam_email_footer'] ?? ''; $phone = $_POST['inquiry_lam_phone_footer'] ?? ''; $company = $_POST['inquiry_lam_address_footer'] ?? ''; $message = $_POST['inquiry_lam_message_footer'] ?? ''; // 获取当前时间 date_default_timezone_set('Your_Timezone'); // 设置您所在的时区 $currentTime = date('Y-m-d H:i:s'); // 构建保存到文件的内容 $data = "Time: $currentTime\nName: $name\nEmail: $email\nPhone: $phone\nCompany: $company\nMessage: $message\n\n"; // 打开或创建一个文件用于写入 $file = fopen("user_data.php", "a"); // 'a' 模式表示追加写入 // if ($file) { // // 写入数据到文件 // fwrite($file, $data); // fclose($file); if ($file) { // 解码 HTML 实体编码,并转换为 UTF-8 编码,然后将数据直接写入文件 $decodedData = mb_convert_encoding(html_entity_decode($data, ENT_QUOTES | ENT_HTML5, 'UTF-8'), 'UTF-8'); fwrite($file, "\xEF\xBB\xBF"); // 添加 UTF-8 BOM,确保以 UTF-8 编码打开 fwrite($file, $decodedData); fclose($file); // 构建 HTML 内容,每个字段后添加 <br> 标签来换行 $htmlContent = "<strong>Time:</strong> $currentTime<br>" . "<strong>Name:</strong> $name<br>" . "<strong>Email:</strong> $email<br>" . "<strong>Phone:</strong> $phone<br>" . "<strong>Company:</strong> $company<br>" . "<strong>Message:</strong> $message<br><br>"; // 使用 <br> 换行,并添加额外的 <br> 产生两行间隔 // 发送邮件 $mail = new PHPMailer(true); try { //Server settings $mail->isSMTP(); $mail->Host = 'smtp.qq.com'; //QQ邮箱用这个,跟我一样就行 $mail->SMTPAuth = true; $mail->Username = '1836360247@qq.com'; //换成你的邮箱 $mail->Password = 'eqj******haa'; //你的授权码 $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; $mail->Port = 465; //不用改,一般都是465 $mail->setFrom('1836360247@qq.com', 'haiyong'); $mail->addAddress('208617432@qq.com', 'hy2'); $mail->addAddress('haiyong314@163.com', 'hy3'); //收件人,可无限加 //邮件内容 $mail->isHTML(true); $mail->Subject = 'New Contact Form haiyong.site'; $mail->Body = $htmlContent; $mail->send(); echo 'Message has been sent'; } catch (Exception $e) { echo "Message could not be sent. haiyong Error: {$mail->ErrorInfo}"; } // 如果邮件发送成功或失败,重定向到 contactsave.html 页面 header("Location: contactsave.html"); exit(); } else { echo "Error opening file."; } } ?>
表单填写内容
后台 user_data.php
文件内显示
QQ邮箱收到的内容
成功接收邮件,统计放入了 user_data.php
文件,并显示出了此时时间。到这里我们就完整实现了使用 PHPMailer 进行邮件的实时发送,希望本篇文章能帮助到大家。
原文链接https://blog.csdn.net/qq_44273429/article/details/134784616如有侵权可联系删除
猜你喜欢
- 【PHP】 thinkphp怎样编写单元测试
- 在ThinkPHP框架中编写单元测试,你可以使用ThinkPHP内置的测试功能或者集成第三方测试工具,如PHPUnit。1. 使用ThinkPHP内置的测试功能:首先,确保你的ThinkPHP版本支持测试功能。然后,在应用目录下创建一个名为tests的目录,在该目录内创建测试文件,例如ExampleTest.php。// tests/ExampleTest.php namespace tests\thinkphp; use think\testing\
- 【PHP】PHP获取器和修改器技巧
- 从入门到精通:掌握PHP中的获取器和修改器技巧在PHP编程中,获取器(Getter)和修改器(Setter)是非常重要的概念和技巧。它们被广泛应用于面向对象编程中,用于实现封装性和数据安全性。本文将介绍获取器和修改器的概念、作用以及具体的代码示例,帮助读者掌握PHP中获取器和修改器的技能,从入门到精通。一、获取器(Getter)和修改器(Setter)的基本概念和作用获取器和修改器是一对用于访问和修改对象属性的方法,主要用于保护属性的访问权限和数据的完整性。获取器用于获取对象的属性值,
- 【PHP】使用ThinkPHP6实现分布式系统
- 随着互联网的发展,越来越多的企业和组织开始使用分布式系统来支持其业务需求。分布式系统是指由多个互相独立的计算机系统集成在一起,共同完成一些任务或处理一些数据,整个系统看起来就像是一个单一的计算机系统。在Web应用程序中,ThinkPHP是一个非常流行的PHP框架。ThinkPHP6是其最新的版本,提供了更多的功能和性能优化。如果你想要使用ThinkPHP6来构建分布式系统,下面是一些实现的步骤:第一步:搭建应用程序框架首先,你需要在你的服务器上安装PHP。然后,你需要安装Composer,这是一
- 【PHP】MongoDB介绍
- MongoDBA是一个开源的、面向文档的NoSQLA数据库,它提供了高性能、可扩展的数据存储解决方案。MongoDB支持动态查询、高可用性、自动分片等功能,使其成为处理大规模数据集的优选数据库。MongoDB的核心特性包括:面向集合存储:数据被分组存储在集合中,集合类似于RDBMS中的表,但提供了更高的灵活性和无模式存储。无模式结构:存储在集合中的数据是无模式的,即每个文档可以有不同的字段和值类型,这为用户提供了极大的灵活性。高性能:MongoDB利用内存中的数据缓存来提高性能,并支持数据的
- 【PHP】intervention/image设置文字竖排显示
- 在使用 intervention/image 库时,要让文字竖排显示,可以通过设置文字的样式和使用 rotate 方法将文字旋转90度来实现。以下是一个示例代码:use Intervention\Image\ImageManagerStatic as Image; // 初始化ImageManager $imageManager = new Image(); // 加载背景图片 $back
- 【PHP】php后端搜索插件有哪些
- php后端搜索插件有Elasticsearch、Solr、Sphinx、Algolia、MySQL全文搜索等等。详细介绍:1、Elasticsearch,提供了强大的全文搜索功能,可以快速地处理大量的数据,并支持复杂的查询和过滤;2、Solr,提供了全文搜索、分布式搜索和面向文档的搜索功能,Solr具有高性能和可扩展性,并支持多种查询语法和过滤器;3、Sphinx等等。本教程操作系统:windows10系统、PHP8.1.3版本、Dell G3电脑。PHP后端搜索插件是一种用于在网站或
- 【PHP】php会出现哪些漏洞呢
- 会出现的漏洞有跨站脚本攻击、sql注入、文件包含漏洞、代码注入漏洞、文件上传漏洞、会话劫持、不安全的文件权限等等。详细介绍:1、跨站脚本攻击,xss漏洞通常是由于未正确过滤用户输入导致的,为了防止xss漏洞,开发人员应该对用户输入进行严格的过滤和转义,确保用户输入不会被当作脚本执行;2、sql注入,通常是由于未正确过滤用户输入或者使用不安全的sql查询语句导致的等等。本教程操作系统:windows10系统、PHP8.1.3版本、Dell G3电脑。PHP作为一种广泛使用的服务器端脚本语言,被广泛
- 【PHP】生成二维码海报
- 目录1.版本2.安装扩展3.生成海报4.代码解释5.附一个字体文件 6.参考文档1.版本php:7.2+ ,本示例使用的是7.3endroid/qr-code :4.* ,本示例使用的是4.3intervention/image:2.* ,本示例使用的是2.7使用前检查下是否启用了 gd2 扩展2.安装扩展composer require endroid/qr-codecomposer require intervention/image3.生成海报<? php &nb
栏目分类全部>
推荐文章
- 【MySql】mysql 数据库通过拷贝data文件恢复(物理恢复)
- 【ChatGPT】ChatGPT-3.5 插件推荐:语音输入,视频总结,联网检索
- 【PHP】使用ThinkPHP6和Swoole实现的RPC服务与微服务架构整合
- 【Python】如何使用Python中的时间和日期模块
- 【PHP】如何使用PHP8中的Constructor Property Promotion来优化数据库查询操作
- 【C#】C# System.Windows.Forms.DataVisualization Demo案例
- 【MySQL】MYSQL数据库设计规范
- 【Go】Golang如何有效地操作数组数据
- 【JavaScript】JS生成二维码-qrcode.js
- 【测试】AB测试总结