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

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

王林
王林原創
2023-06-12 08:27:501457瀏覽

隨著網路的快速發展,電子郵件作為一種最為傳統和穩定的通訊工具,其在各行業中的重要性愈發凸顯。作為開發者,如何為用戶提供可靠、高效的郵件訂閱和推播服務,成為了我們需要思考和解決的問題。本文將介紹如何使用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中加入一個簡單的表單,用於輸入使用者的郵箱地址並提交。 <pre class='brush:html;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>當使用者提交表單後,我們需要將使用者輸入的郵件地址儲存到訂閱資訊表中,以便進行郵件推送。

寫訂閱API

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

目錄進行API的開發。以下是一個簡單的Subscribe.php檔案。 <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>在上述程式碼中,我們先從請求中取得到使用者輸入的郵箱位址,並尋找訂閱資訊表中是否已經有該使用者的記錄。若沒有,則新建一筆記錄;若已有,則將該記錄的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