首頁 php框架 ThinkPHP 如何使用ThinkPHP6進行郵件訂閱與推送?

如何使用ThinkPHP6進行郵件訂閱與推送?

Jun 12, 2023 am 08:27 AM
thinkphp 郵件訂閱 推播

隨著網路的快速發展,電子郵件作為一種最為傳統和穩定的通訊工具,其在各行業中的重要性愈發凸顯。作為開發者,如何為用戶提供可靠、高效的郵件訂閱和推播服務,成為了我們需要思考和解決的問題。本文將介紹如何使用ThinkPHP6框架進行郵件訂閱與推播的操作流程,希望能對大家有幫助。

  1. 準備工作

首先,我們需要在本機安裝或遠端伺服器上安裝好PHP、Apache/Nginx等Web伺服器,以及MySQL等資料庫。同時,我們需要用到SMTP協定來傳送郵件,因此我們還需要一份SMTP伺服器的帳號和密碼。

  1. 安裝框架和擴充包

在進行具體操作之前,我們需要使用composer安裝ThinkPHP6框架和擴充包。在命令列中輸入以下命令進行安裝。

composer create-project topthink/think tp6 --prefer-dist
wget https://github.com/phpmailer/phpmailer/archive/master.zip
unzip master.zip
cp -r phpmailer-master/ tp6/vendor/phpmailer/phpmailer
登入後複製

其中,第一個指令是安裝ThinkPHP6框架,第二個指令是下載PHPMailer擴充包,第三個指令則是將PHPMailer擴充包複製到ThinkPHP6的vendor目錄下。

  1. 設定郵件和訂閱資訊

在進行郵件訂閱功能之前,我們需要在.env檔案中設定SMTP伺服器的帳號、密碼以及寄件者姓名和地址,以便程式順利發送郵件。同時,我們還需要新建一個訂閱資訊表,以便儲存用戶的訂閱資訊。在ThinkPHP6框架中,我們可以使用migration指令建立一張名為subscribe_info的訂閱資訊表。

php think migrate:run --seed
登入後複製

執行完以上指令後,我們需要在subscribe_info表中加入以下欄位:

  • id:主鍵,自成長

# #email:使用者的郵箱
  1. is_subscribed:是否訂閱郵件

#編寫訂閱頁面當我們完成了設定檔和訂閱訊息表的建立後,我們需要開始編寫訂閱頁面。在ThinkPHP6框架中,我們可以使用tp6/public目錄下的

index.php

index.html

進行頁面的開發。為了展現方便,這裡我們直接在index.html中加入一個簡單的表單,用於輸入使用者的郵箱地址並提交。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;meta charset=&quot;UTF-8&quot;&gt; &lt;title&gt;邮件订阅&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;h1&gt;邮件订阅&lt;/h1&gt; &lt;div&gt; &lt;form method=&quot;POST&quot; action=&quot;{:url('/api/subscribe/submit')}&quot;&gt; 邮箱:&lt;input name=&quot;email&quot; type=&quot;email&quot; required&gt; &lt;button type=&quot;submit&quot;&gt;提交&lt;/button&gt; &lt;/form&gt; &lt;/div&gt; &lt;/body&gt; &lt;/html&gt;</pre><div class="contentsignin">登入後複製</div></div>當使用者提交表單後,我們需要將使用者輸入的郵件地址儲存到訂閱資訊表中,以便進行郵件推送。

寫訂閱API

    為了將使用者輸入的郵箱位址儲存到訂閱資訊表中,我們需要寫一個名為
  1. Subscribe.php
  2. 的API。在ThinkPHP6框架中,我們可以使用
tp6/application/api

目錄進行API的開發。以下是一個簡單的Subscribe.php檔案。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>&lt;?php namespace apppicontroller; use appcommonmodelSubscribeInfo; use PHPMailerPHPMailerPHPMailer; use think acadeConfig; use thinkRequest; class Subscribe { /** * 用户提交订阅信息 * @param Request $request [description] * @return [type] [description] */ public function submit(Request $request) { $email = $request-&gt;param('email'); $subscribeInfo = SubscribeInfo::where('email', $email)-&gt;find(); if (empty($subscribeInfo)) { $subscribeInfo = new SubscribeInfo(); $subscribeInfo-&gt;email = $email; $subscribeInfo-&gt;is_subscribed = true; $subscribeInfo-&gt;save(); } else { $subscribeInfo-&gt;is_subscribed = true; $subscribeInfo-&gt;save(); } $mail = new PHPMailer(true); $mail-&gt;SMTPDebug = 1; $mail-&gt;isSMTP(); $mail-&gt;CharSet = 'utf-8'; $mail-&gt;SMTPAuth = true; $mail-&gt;SMTPSecure = 'ssl'; $mail-&gt;Host = Config::get('mail_host'); $mail-&gt;Port = Config::get('mail_port'); $mail-&gt;Username = Config::get('mail_username'); $mail-&gt;Password = Config::get('mail_password'); $mail-&gt;setFrom(Config::get('mail_from_email'), Config::get('mail_from_name')); $mail-&gt;addAddress($email); $mail-&gt;Subject = '欢迎订阅本站邮件'; $mail-&gt;Body = '你好,欢迎订阅本站邮件'; $mail-&gt;send(); return ['code' =&gt; 0, 'message' =&gt; '订阅成功']; } }</pre><div class="contentsignin">登入後複製</div></div>在上述程式碼中,我們先從請求中取得到使用者輸入的郵箱位址,並尋找訂閱資訊表中是否已經有該使用者的記錄。若沒有,則新建一筆記錄;若已有,則將該記錄的is_subscribed欄位設為true。

接下來,我們可以使用PHPMailer擴充包來傳送郵件。我們先在config目錄下的

mail.php
    檔案中加入以下設定資訊。
  1. # mail.php
    <?php
    return [
        'mail_host'       => 'smtp.exmail.qq.com',
        'mail_port'       => '465',
        'mail_username'   => 'xxx@xxx.com',
        'mail_password'   => 'xxxx',
        'mail_from_email' => 'xxx@xxx.com',
        'mail_from_name'  => 'xxx',
    ];
    登入後複製
  2. 在上述設定資訊中,我們填寫了SMTP伺服器的位址、連接埠、帳號、密碼等資訊。在
Subscribe.php

檔案中,我們可以將這些資訊讀取出來,並使用PHPMailer擴充包發送郵件。成功發送郵件後,我們回傳給用戶一個訂閱成功的訊息。

編寫郵件推送腳本

當使用者成功訂閱郵件後,我們需要編寫一個郵件推送腳本,以便能夠定時將最新的文章內容推送給訂閱用戶。在ThinkPHP6框架中,我們可以使用

tp6/application/command###目錄進行命令腳本的開發。以下是一個簡單的###MailPush.php###腳本。 ###
# MailPush.php

namespace appcommand;

use appcommonmodelSubscribeInfo;
use PHPMailerPHPMailerPHPMailer;
use thinkconsoleCommand;
use thinkconsoleInput;
use thinkconsoleOutput;
use thinkacadeConfig;

class MailPush extends Command
{
    /**
     * The configuration.
     *
     * @var array
     */
    private $config;

    /**
     * @inheritdoc
     */
    protected function configure()
    {
        $this->setName('mail')
             ->setDescription('Push article to subscribers');
    }

    /**
     * Execute the console command.
     *
     * @param  Input   $input
     * @param  Output  $output
     * @return void
     */
    public function execute(Input $input, Output $output)
    {
        $subscribeInfos = SubscribeInfo::where('is_subscribed', true)->select();

        if ($subscribeInfos) {
            $mail = new PHPMailer(true);
            $mail->SMTPDebug = 1;                   
            $mail->isSMTP();                                            
            $mail->CharSet = 'utf-8';                                              
            $mail->SMTPAuth = true;                                       
            $mail->SMTPSecure = 'ssl';                           
            $mail->Host = Config::get('mail_host');               
            $mail->Port = Config::get('mail_port');                              
            $mail->Username = Config::get('mail_username');  
            $mail->Password = Config::get('mail_password');          
            $mail->setFrom(Config::get('mail_from_email'), Config::get('mail_from_name'));
            $mail->isHTML(true);                                  
            $mail->Subject = '本站新文章通知';
            $mail->Body    = '亲爱的订阅者,我们有新的文章发布了,快来看看吧!';

            foreach ($subscribeInfos as $subscribeInfo) {
                $mail->addAddress($subscribeInfo->email);    
            }

            $mail->send();
        }
    }
}
登入後複製
###在上述程式碼中,我們先從訂閱資訊表中取得到已經訂閱的用戶訊息,然後透過PHPMailer擴充包發送郵件。我們還需要在###config/app.php###中加入命令腳本的路徑。 ###
# app.php
<?php
return [
    // ...
    'commands'       => [
        'appcommandMailPush'
    ],
    // ...
];
登入後複製
######配置定時任務#########當我們編寫好郵件推送腳本後,我們需要設定定時任務,以便定時執行郵件推送腳本。在Linux系統下,我們可以使用###crontab###指令來設定定時任務。在命令列中輸入以下命令即可開啟定時任務設定檔。 ###
crontab -e
登入後複製
###在定時任務設定檔中,我們會新增以下內容,表示每天下午的6點鐘,執行一次郵件推送腳本。 ###
0 18 * * * /path/to/php /path/to/tp6/think mail
登入後複製
###完成以上設定後,我們就可以完整地使用ThinkPHP6框架進行郵件訂閱和推送了。使用者輸入郵箱地址並提交訂閱申請後,郵件推送腳本會在定時任務的規定時間將最新文章內容傳送給使用者。希望能夠對大家有幫助。 ###

以上是如何使用ThinkPHP6進行郵件訂閱與推送?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

thinkphp專案怎麼運行 thinkphp專案怎麼運行 Apr 09, 2024 pm 05:33 PM

執行 ThinkPHP 專案需要:安裝 Composer;使用 Composer 建立專案;進入專案目錄,執行 php bin/console serve;造訪 http://localhost:8000 查看歡迎頁面。

thinkphp有幾個版本 thinkphp有幾個版本 Apr 09, 2024 pm 06:09 PM

ThinkPHP 擁有多個版本,針對不同 PHP 版本而設計。主要版本包括 3.2、5.0、5.1 和 6.0,而次要版本用於修復 bug 和提供新功能。目前最新穩定版本為 ThinkPHP 6.0.16。在選擇版本時,需考慮 PHP 版本、功能需求和社群支援。建議使用最新穩定版本以獲得最佳性能和支援。

thinkphp怎麼運行 thinkphp怎麼運行 Apr 09, 2024 pm 05:39 PM

ThinkPHP Framework 的本機運作步驟:下載並解壓縮 ThinkPHP Framework 到本機目錄。建立虛擬主機(可選),指向 ThinkPHP 根目錄。配置資料庫連線參數。啟動 Web 伺服器。初始化 ThinkPHP 應用程式。存取 ThinkPHP 應用程式 URL 運行。

laravel和thinkphp哪個好 laravel和thinkphp哪個好 Apr 09, 2024 pm 03:18 PM

Laravel 和 ThinkPHP 框架的效能比較:ThinkPHP 效能通常優於 Laravel,專注於最佳化和快取。 Laravel 性能良好,但對於複雜應用程序,ThinkPHP 可能更適合。

開發建議:如何利用ThinkPHP框架實現非同步任務 開發建議:如何利用ThinkPHP框架實現非同步任務 Nov 22, 2023 pm 12:01 PM

《開發建議:如何利用ThinkPHP框架實現非同步任務》隨著網路技術的快速發展,Web應用程式對於處理大量並發請求和複雜業務邏輯的需求也越來越高。為了提高系統的效能和使用者體驗,開發人員常常會考慮利用非同步任務來執行一些耗時操作,例如發送郵件、處理文件上傳、產生報表等。在PHP領域,ThinkPHP框架作為一個流行的開發框架,提供了一些便捷的方式來實現非同步任務。

thinkphp怎麼安裝 thinkphp怎麼安裝 Apr 09, 2024 pm 05:42 PM

ThinkPHP 安裝步驟:準備 PHP、Composer、MySQL 環境。使用 Composer 建立專案。安裝 ThinkPHP 框架及相依性。配置資料庫連線。產生應用程式碼。啟動應用程式並造訪 http://localhost:8000。

微信如何推送好友名片 微信如何推送好友名片 Mar 30, 2024 pm 07:16 PM

名片是軟體微信中可以用來推送好友的方法,有些用戶並不知道微信如何推送好友名片,只要點進好友個人頁,選擇更多中的把TA推薦給朋友並發送即可,這篇微信推送好友名片方法的介紹就能告訴大家具體的內容,以下就是詳細介紹,趕快看看吧!微信使用教學微信如何推送好友名片答:點進好友個人頁,選擇更多中的把TA推薦給朋友並發送即可詳情介紹:1、點擊想要推送名片的好友。 2.點選右上角的【更多】選項。 3.再點選其中的【把TA推薦給朋友】。 4.選擇想要發送名片的好友。 5.點選【發送】即可。

uniapp應用程式如何實現訊息推播與通知 uniapp應用程式如何實現訊息推播與通知 Oct 18, 2023 am 09:19 AM

Uniapp是一種基於Vue.js的跨平台開發框架,可用於開發同時運行在多個平台的應用程式。在實現訊息推播和通知功能時,Uniapp提供了一些對應的外掛程式和API,以下將介紹如何使用這些外掛程式和API來實現訊息推播和通知的功能。一、訊息推送要實現訊息推播功能,我們可以使用Uniapp提供的uni-push插件。該插件基於騰訊雲端推播服務,可在多個平台上推播訊息

See all articles