您的当前位置:首页>全部文章>文章详情

【PHP】使用 PHPMailer 实现邮件的实时发送

CrazyPanda发表于:2023-12-28 21:08:26浏览:324次TAG:


今天我们利用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;
}

此时表单显示如下:

1.png

下载 PHPMailer 并配置

Github地址:https://github.com/PHPMailer/PHPMailer

1.png

我是直接下载上面的这个压缩包,下载后解压,层级一定要放对,不然无法调用。1.png

获取邮箱授权码

这里我就以国内使用最多的QQ邮箱为例,当然其他邮箱也都类似,首先登录网页版QQ邮箱,找到设置——账号

1.png

翻到下面找到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务,点击管理服务,有的可能没开启,需要先开启服务

1.png

点击生成授权码,记得保存一下,后面需要用到

1.png

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}";
}

测试一下,可成功收到邮件。

1.png
1.png

最终实现代码

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.";
    }
}
?>

表单填写内容

1.png

后台 user_data.php 文件内显示
1.png

QQ邮箱收到的内容

1.png

成功接收邮件,统计放入了 user_data.php 文件,并显示出了此时时间。到这里我们就完整实现了使用 PHPMailer 进行邮件的实时发送,希望本篇文章能帮助到大家。


原文链接https://blog.csdn.net/qq_44273429/article/details/134784616如有侵权可联系删除

猜你喜欢

【PHP】php加密算法有哪些
php加密算法有MD5算法、SHA算法、AES算法、RSA算法、Base64编码、DES算法、RC4算法、Blowfish算法等。详细介绍:1、MD5算法,用于将任意长度的数据转换为固定长度的哈希值,在PHP中可以使用md5()函数来计算字符串的MD5哈希值;2、SHA算法,包括SHA-1、SHA-256、SHA-512等,这些算法在PHP中都有对应的函数;3、AES算法等等。本教程操作系统:windows10系统、PHP8.1.3版本、Dell G3电脑。PHP是一种广泛使用的服务器
发表于:2023-12-06 浏览:306 TAG:
【PHP】thinkphp使用队列think-queue
在ThinkPHP框架中,队列(Queue)是一种非常有用的功能,它允许你将一些耗时的任务(比如发送邮件、数据处理等)放入队列中,由后台的队列工作者(worker)异步处理,从而不阻塞主应用程序的运行。
发表于:2025-01-24 浏览:120 TAG: #php #队列 #thinkphp
【PHP】php7.4安装zipArchive,使用ZipArchive类的问题及解决方法
一、问题描述在开发过程中,有时会遇到PHP报错提示&quot;Class ZipArchive not found&quot;,这是因为PHP的ZipArchive类没有被正确加载导致的。二、具体步骤及代码步骤1:确认环境在开始解决问题之前,我们需要确认一下当前环境是否满足使用ZipArchive类的要求。首先,我们需要检查PHP版本是否符合要求,一般来说,PHP版本需要大于等于5.2.0才能使用ZipArchive类。可以通过以下代码来检查PHP版本:&lt;?php &nbsp;&nbsp;
发表于:2024-01-31 浏览:341 TAG:
【PHP】php中?:与??运算符有什么不同?
在PHP 7中,有两个类似的语法结构:“??”和“?:”,它们都是用于处理条件判断和返回值的运算符。尽管它们看起来相似,但它们的作用和用法有一些区别。&quot;?:&quot;是三目运算符,语法格式为:$result = $test ? $test : ′ ′ ; 意思就是当test存在时(即empty($test)为false),则返回它本身,否则返回空(当然也可以返回其他,这里的空只是举个例子)。&quot;??&quot;是php7新引入的语法,它相当于是isset($result[‘k
发表于:2024-08-01 浏览:279 TAG:
【PHP】PHP8 新特性 match 表达式详解
PHP8 alpha2发布了,最近引入了一个新的关键字:match, 这个关键字的作用跟switch有点类似。这个我觉得还是有点意思,match这个词也挺好看,那么它是干啥的呢?在以前我们可能会经常使用switch做值转换类的工作,类似:function&nbsp;convert($input)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;switch&nbsp;($input)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
发表于:2024-01-03 浏览:302 TAG:
【PHP】PHP防止XSS攻击的主流方法
概述跨站点脚本&nbsp;(XSS) 是一种严重的安全漏洞,允许恶意行为者将恶意脚本引入网站,使毫无戒心的访问者处于危险之中。使用 XSS,攻击者可以在受害者的 Web 浏览器中执行任意代码,可能导致敏感数据被盗、未经授权的访问或网站污损。本文旨在深入探讨 XSS 攻击的主要形式,阐明其根本原因,探索 XSS 利用的潜在后果,并深入了解防止 PHP 中 XSS 攻击的有效措施。介绍当恶意行为者成功将有害脚本插入受信任的网站时,就会发生跨站脚本&nbsp;(XSS) 攻击。这些受感染的网站在不知不
发表于:2024-07-14 浏览:239 TAG: #php
【PHP】中文日文字符串校验解决方案
由于开发需要,要识别中文和日文文字段落,网上查了很多资料,大部分都是使用正则校验preg_match,但中文和日文有些汉字是相同的,不能直接校验出结果,经过多次修改,也算是找出了解决办法。首先找到中文和日文的正则校验中文校验:preg_match(&#39;/\p{Han}+/u&#39;,&#39;&#39;,$str);日文校验:preg_match(&#39;/[\x{4E00}-\x{9FBF}\x{3040}-\x{309F}\x{30A0}-\x{30FF}]/u&#39;,&amp;nbs
发表于:2023-12-14 浏览:392 TAG:
【PHP】使用intervention/image给图片添加文字和图片
准备使用composer安装composer&nbsp;require&nbsp;intervention/image我安装的版本是2.7一、 给图片添加文字use&nbsp;Intervention\Image\ImageManagerStatic&nbsp;as&nbsp;Image; &nbsp; public&nbsp;function&nbsp;addTextToImage($imagePath,&nbsp;$text,&nbsp;$fontPath,&nbsp;$x&nbsp;=&amp;n
发表于:2024-04-02 浏览:279 TAG:
【PHP】REST API是什么
API的分类REST API(restful)REST是Representational State Transfer(表现层状态转移)的缩写,它是由罗伊·菲尔丁(Roy Fielding)提出的非 REST API(restless)REST API发送请求进行 CRUD 哪个操作由请求方式来决定同一个请求路径可以进行多个操作请求方式会用到 GET/POST/PUT/DELETE非 REST API请求方式不决定请求的 CRUD 操作一个请求路径只对应一个操作一般只有 GET/POST使用js
发表于:2024-05-23 浏览:307 TAG:
【PHP】从零搭建php8环境
从零搭建php环境-php8一、下载1、https://www.php.net/distributions/php-8.0.0.tar.gz下载到本地,文件传输上传到 /usr/local/src/2、wget -P /usr/local/src/ https://www.php.net/distributions/php-8.0.0.tar.gz二、解压、编译、安装1、解压缩&gt;&nbsp;cd&nbsp;/usr/local/src/ &gt;&nbsp;tar&nbsp;xzf&amp;nbs
发表于:2024-01-01 浏览:274 TAG: