Heim  >  Artikel  >  PHP-Framework  >  Wie verwende ich ThinkPHP6 für E-Mail-Abonnements und Push?

Wie verwende ich ThinkPHP6 für E-Mail-Abonnements und Push?

王林
王林Original
2023-06-12 08:27:501458Durchsuche

Mit der rasanten Entwicklung des Internets hat E-Mail als traditionellstes und stabilstes Kommunikationsmittel in verschiedenen Branchen immer mehr an Bedeutung gewonnen. Als Entwickler ist die Frage, wie wir Benutzern zuverlässige und effiziente E-Mail-Abonnement- und Push-Dienste bereitstellen können, zu einem Problem geworden, über das wir nachdenken und das wir lösen müssen. In diesem Artikel wird die Verwendung des ThinkPHP6-Frameworks für E-Mail-Abonnements und Push-Vorgänge vorgestellt. Ich hoffe, dass er für alle hilfreich ist.

  1. Vorbereitung

Zuerst müssen wir PHP, Apache/Nginx und andere Webserver sowie MySQL und andere Datenbanken auf der lokalen Installation oder dem Remote-Server installieren. Gleichzeitig müssen wir zum Versenden von E-Mails das SMTP-Protokoll verwenden, daher benötigen wir auch ein Konto und ein Passwort für den SMTP-Server.

  1. Installieren Sie das Framework und die Erweiterungspakete

Bevor wir mit bestimmten Vorgängen fortfahren, müssen wir Composer verwenden, um das ThinkPHP6-Framework und die Erweiterungspakete zu installieren. Geben Sie zur Installation den folgenden Befehl in die Befehlszeile ein.

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

Darunter besteht der erste Befehl darin, das ThinkPHP6-Framework zu installieren, der zweite Befehl darin, das PHPMailer-Erweiterungspaket herunterzuladen und der dritte Befehl darin, das PHPMailer-Erweiterungspaket in das Herstellerverzeichnis von ThinkPHP6 zu kopieren.

  1. E-Mail- und Abonnementinformationen konfigurieren

Bevor wir die E-Mail-Abonnementfunktion ausführen, müssen wir das SMTP-Serverkonto, das Passwort sowie den Namen und die Adresse des Absenders in der Datei .env konfigurieren, damit der Vorgang ausgeführt werden kann kann reibungslos verlaufen. Mail verschicken. Gleichzeitig müssen wir auch eine neue Abonnementinformationstabelle erstellen, um die Abonnementinformationen des Benutzers zu speichern. Im ThinkPHP6-Framework können wir den Migrationsbefehl verwenden, um eine Abonnementinformationstabelle mit dem Namen subscribe_info zu erstellen. .env文件中配置SMTP服务器的账号、密码以及发件人姓名和地址,以便程序顺利发送邮件。同时,我们还需要新建一个订阅信息表,以便存储用户的订阅信息。在ThinkPHP6框架中,我们可以使用migration命令创建一张名为subscribe_info的订阅信息表。

php think migrate:run --seed

在执行完以上命令后,我们需要在subscribe_info表中添加以下字段:

  • id:主键,自增长
  • email:用户的邮箱
  • is_subscribed:是否订阅邮件
  1. 编写订阅页面

当我们完成了配置文件和订阅信息表的创建后,我们需要开始编写订阅页面。在ThinkPHP6框架中,我们可以使用tp6/public目录下的index.phpindex.html进行页面的开发。为了展现方便,这里我们直接在index.html中添加一个简单的表单,用于输入用户的邮箱地址并提交。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>邮件订阅</title>
</head>
<body>
    <h1>邮件订阅</h1>
    <div>
        <form method="POST" action="{:url('/api/subscribe/submit')}">
            邮箱:<input name="email" type="email" required>
            <button type="submit">提交</button>
        </form>
    </div>
</body>
</html>

当用户提交表单后,我们需要将用户输入的邮箱地址保存到订阅信息表中,以便进行邮件推送。

  1. 编写订阅API

为了将用户输入的邮箱地址保存到订阅信息表中,我们需要编写一个名为Subscribe.php的API。在ThinkPHP6框架中,我们可以使用tp6/application/api目录进行API的开发。以下是一个简单的Subscribe.php文件。

<?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->param('email');
        $subscribeInfo = SubscribeInfo::where('email', $email)->find();

        if (empty($subscribeInfo)) {
            $subscribeInfo = new SubscribeInfo();
            $subscribeInfo->email = $email;
            $subscribeInfo->is_subscribed = true;
            $subscribeInfo->save();
        } else {
            $subscribeInfo->is_subscribed = true;
            $subscribeInfo->save();
        }

        $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->addAddress($email);    
        $mail->Subject = '欢迎订阅本站邮件';
        $mail->Body    = '你好,欢迎订阅本站邮件';
        $mail->send();

        return ['code' => 0, 'message' => '订阅成功'];
    }
}

在以上代码中,我们先从请求中获取到用户输入的邮箱地址,并查找订阅信息表中是否已经有该用户的记录。若没有,则新建一条记录;若已有,则将该记录的is_subscribed字段设置为true。

接下来,我们可以使用PHPMailer扩展包来发送邮件。我们先在config目录下的mail.php文件中添加以下配置信息。

# 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',
];

在以上配置信息中,我们填写了SMTP服务器的地址、端口、账号、密码等信息。在Subscribe.php文件中,我们可以将这些信息读取出来,并使用PHPMailer扩展包发送邮件。成功发送邮件后,我们返回给用户一个订阅成功的消息。

  1. 编写邮件推送脚本

当用户成功订阅邮件后,我们需要编写一个邮件推送脚本,以便能够定时将最新的文章内容推送给订阅用户。在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'
    ],
    // ...
];
  1. 配置定时任务

当我们编写好邮件推送脚本后,我们需要配置定时任务,以便定时执行邮件推送脚本。在Linux系统下,我们可以使用crontab

crontab -e

Nachdem wir den obigen Befehl ausgeführt haben, müssen wir die folgenden Felder zur Tabelle subscribe_info hinzufügen:

    id: Primärschlüssel, automatische Inkrementierung

    E-Mail: E-Mail des Benutzers 🎜🎜is_subscribed : ob Abonnement-E-Mail🎜
    🎜Schreiben der Abonnementseite🎜🎜🎜Nachdem wir die Erstellung der Konfigurationsdatei und der Abonnementinformationstabelle abgeschlossen haben, müssen wir mit dem Schreiben der Abonnementseite beginnen. Im ThinkPHP6-Framework können wir index.php und index.html im Verzeichnis tp6/public verwenden, um Seiten zu entwickeln. Zur Vereinfachung der Präsentation fügen wir hier direkt ein einfaches Formular in index.html ein, um die E-Mail-Adresse des Benutzers einzugeben und zu übermitteln. 🎜
    0 18 * * * /path/to/php /path/to/tp6/think mail
    🎜Nachdem der Benutzer das Formular abgeschickt hat, müssen wir die vom Benutzer eingegebene E-Mail-Adresse in der Abonnementinformationstabelle für den E-Mail-Push speichern. 🎜
      🎜Schreiben einer Abonnement-API🎜🎜🎜Um die vom Benutzer eingegebene E-Mail-Adresse in der Abonnement-Informationstabelle zu speichern, müssen wir eine API mit dem Namen Subscribe.phpschreiben >. Im ThinkPHP6-Framework können wir das Verzeichnis tp6/application/api für die API-Entwicklung verwenden. Unten finden Sie eine einfache Subscribe.php-Datei. 🎜rrreee🎜Im obigen Code erhalten wir zunächst die vom Benutzer eingegebene E-Mail-Adresse aus der Anfrage und prüfen, ob in der Abonnementinformationstabelle bereits ein Datensatz des Benutzers vorhanden ist. Wenn nicht, erstellen Sie einen neuen Datensatz. Wenn dieser bereits vorhanden ist, setzen Sie das Feld „is_subscribed“ des Datensatzes auf „true“. 🎜🎜Als nächstes können wir das PHPMailer-Erweiterungspaket zum Versenden von E-Mails verwenden. Wir fügen zunächst die folgenden Konfigurationsinformationen zur Datei mail.php im Verzeichnis config hinzu. 🎜rrreee🎜In den obigen Konfigurationsinformationen haben wir die Adresse, den Port, die Kontonummer, das Passwort und andere Informationen des SMTP-Servers eingegeben. In der Datei Subscribe.php können wir diese Informationen lesen und das PHPMailer-Erweiterungspaket zum Versenden von E-Mails verwenden. Nach erfolgreichem Versand der E-Mail senden wir eine erfolgreiche Abonnementnachricht an den Benutzer zurück. 🎜
        🎜Schreiben Sie ein E-Mail-Push-Skript🎜🎜🎜Nachdem der Benutzer die E-Mail erfolgreich abonniert hat, müssen wir ein E-Mail-Push-Skript schreiben, damit der neueste Artikelinhalt regelmäßig an den abonnierten Benutzer gesendet werden kann. Im ThinkPHP6-Framework können wir das Verzeichnis tp6/application/command verwenden, um Befehlsskripte zu entwickeln. Das Folgende ist ein einfaches MailPush.php-Skript. 🎜rrreee🎜Im obigen Code erhalten wir zunächst die abonnierten Benutzerinformationen aus der Abonnementinformationstabelle und senden dann die E-Mail über das PHPMailer-Erweiterungspaket. Wir müssen auch den Pfad zum Befehlsskript in config/app.php hinzufügen. 🎜rrreee
          🎜Geplante Aufgaben konfigurieren🎜🎜🎜Nachdem wir das E-Mail-Push-Skript geschrieben haben, müssen wir die geplante Aufgabe konfigurieren, damit das E-Mail-Push-Skript regelmäßig ausgeführt werden kann. Unter Linux-Systemen können wir den Befehl crontab verwenden, um geplante Aufgaben zu konfigurieren. Geben Sie den folgenden Befehl in die Befehlszeile ein, um die Konfigurationsdatei für die geplante Aufgabe zu öffnen. 🎜rrreee🎜In der Konfigurationsdatei für geplante Aufgaben fügen wir den folgenden Inhalt hinzu, was bedeutet, dass das E-Mail-Push-Skript jeden Nachmittag um 6 Uhr ausgeführt wird. 🎜rrreee🎜Nach Abschluss der obigen Konfiguration können wir das ThinkPHP6-Framework vollständig für E-Mail-Abonnements und Push nutzen. Nachdem der Benutzer seine E-Mail-Adresse eingegeben und einen Abonnementantrag eingereicht hat, sendet das E-Mail-Push-Skript zum angegebenen Zeitpunkt der geplanten Aufgabe den neuesten Artikelinhalt an den Benutzer. Ich hoffe, es hilft allen. 🎜

Das obige ist der detaillierte Inhalt vonWie verwende ich ThinkPHP6 für E-Mail-Abonnements und Push?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn