ホームページ >PHPフレームワーク >ThinkPHP >電子メールの購読とプッシュに ThinkPHP6 を使用するにはどうすればよいですか?

電子メールの購読とプッシュに ThinkPHP6 を使用するにはどうすればよいですか?

王林
王林オリジナル
2023-06-12 08:27:501506ブラウズ

インターネットの急速な発展に伴い、最も伝統的で安定したコミュニケーション ツールとしての電子メールは、さまざまな業界でますます重要になってきています。開発者として、信頼性が高く効率的な電子メール サブスクリプションとプッシュ サービスをユーザーに提供する方法は、考えて解決する必要がある問題となっています。この記事では、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 フレームワークをインストールし、2 番目のコマンドは PHPMailer 拡張パッケージをダウンロードし、3 番目のコマンドは PHPMailer 拡張パッケージを ThinkPHP6 のベンダー ディレクトリにコピーします。

  1. 電子メールとサブスクリプション情報の構成

電子メール サブスクリプション機能を実行する前に、.env で SMTP サーバー アカウントとパスワードを構成する必要があります。ファイルのほか、プログラムが電子メールをスムーズに送信できるように、送信者の名前とアドレスも含まれます。同時に、ユーザーのサブスクリプション情報を保存するための新しいサブスクリプション情報テーブルを作成する必要もあります。 ThinkPHP6 フレームワークでは、migration コマンドを使用して、subscribe_info という名前のサブスクリプション情報テーブルを作成できます。

php think migrate:run --seed

上記のコマンドを実行した後、subscribe_info テーブルに次のフィールドを追加する必要があります:

  • id: 主キー、自動インクリメント
  • email: ユーザーのメールボックス
  • is_subscribed: 電子メールを購読するかどうか
  1. 購読ページの作成

完了したら構成ファイルとサブスクリプション情報 テーブルの作成後、サブスクリプション ページの作成を開始する必要があります。 ThinkPHP6 フレームワークでは、ページ開発に tp6/public ディレクトリ内の index.php および index.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 フレームワークでは、API 開発に tp6/application/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

スケジュールされたタスク構成ファイルに、次の内容を追加します。これは、電子メール プッシュ スクリプトが毎日午後 6 時に実行されることを意味します。

0 18 * * * /path/to/php /path/to/tp6/think mail

上記の設定を完了すると、電子メールのサブスクリプションとプッシュに ThinkPHP6 フレームワークを完全に使用できるようになります。ユーザーが電子メール アドレスを入力して購読申し込みを送信すると、電子メール プッシュ スクリプトによって、スケジュールされたタスクの指定された時間に最新の記事コンテンツがユーザーに送信されます。皆さんのお役に立てれば幸いです。

以上が電子メールの購読とプッシュに ThinkPHP6 を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。