search
HomePHP FrameworkThinkPHPHow to use ThinkPHP6 for email subscription and push?

How to use ThinkPHP6 for email subscription and push?

Jun 12, 2023 am 08:27 AM
thinkphpE-mail SubscriptionsPush

With the rapid development of the Internet, email, as the most traditional and stable communication tool, has become increasingly important in various industries. As developers, how to provide users with reliable and efficient email subscription and push services has become a problem that we need to think about and solve. This article will introduce how to use the ThinkPHP6 framework for email subscription and push operations. I hope it will be helpful to everyone.

  1. Preparation work

First, we need to install PHP, Apache/Nginx and other web servers, as well as MySQL and other databases on the local installation or remote server. At the same time, we need to use the SMTP protocol to send emails, so we also need an SMTP server account and password.

  1. Install the framework and extension pack

Before proceeding with specific operations, we need to use composer to install the ThinkPHP6 framework and extension pack. Enter the following command on the command line to install.

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

The first command is to install the ThinkPHP6 framework, the second command is to download the PHPMailer extension package, and the third command is to copy the PHPMailer extension package to the vendor directory of ThinkPHP6.

  1. Configure email and subscription information

Before performing the email subscription function, we need to configure the SMTP server account and password in the .env file As well as the sender's name and address so that the program can send the email smoothly. At the same time, we also need to create a new subscription information table to store the user's subscription information. In the ThinkPHP6 framework, we can use the migration command to create a subscription information table named subscribe_info.

php think migrate:run --seed

After executing the above command, we need to add the following fields to the subscribe_info table:

  • id: primary key, auto-increment
  • email: User’s mailbox
  • is_subscribed: Whether to subscribe to emails
  1. Writing the subscription page

When we complete the configuration file and subscription information After the table is created, we need to start writing the subscription page. In the ThinkPHP6 framework, we can use index.php and index.html in the tp6/public directory for page development. For the convenience of presentation, here we add a simple form directly to index.html for inputting the user's email address and submitting it.

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

After the user submits the form, we need to save the email address entered by the user into the subscription information table for email push.

  1. Writing Subscription API

In order to save the email address entered by the user into the subscription information table, we need to write a file called Subscribe.php API. In the ThinkPHP6 framework, we can use the tp6/application/api directory for API development. Below is a simple Subscribe.php file.

<?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' => '订阅成功'];
    }
}

In the above code, we first obtain the email address entered by the user from the request, and check whether there is already a record of the user in the subscription information table. If not, create a new record; if it already exists, set the is_subscribed field of the record to true.

Next, we can use the PHPMailer extension package to send emails. We first add the following configuration information to the mail.php file in the config directory.

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

In the above configuration information, we filled in the address, port, account, password and other information of the SMTP server. In the Subscribe.php file, we can read this information and use the PHPMailer extension package to send emails. After successfully sending the email, we return a successful subscription message to the user.

  1. Write an email push script

After the user successfully subscribes to the email, we need to write an email push script so that the latest article content can be pushed to the subscribed user regularly. In the ThinkPHP6 framework, we can use the tp6/application/command directory to develop command scripts. The following is a simple MailPush.php script.

# 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();
        }
    }
}

In the above code, we first obtain the subscribed user information from the subscription information table, and then send the email through the PHPMailer extension package. We also need to add the path to the command script in config/app.php.

# app.php
<?php
return [
    // ...
    'commands'       => [
        'appcommandMailPush'
    ],
    // ...
];
  1. Configuring scheduled tasks

After we write the email push script, we need to configure the scheduled task so that the email push script can be executed regularly. Under Linux systems, we can use the crontab command to configure scheduled tasks. Enter the following command on the command line to open the scheduled task configuration file.

crontab -e

In the scheduled task configuration file, we add the following content, which means that the email push script will be executed at 6 o'clock every afternoon.

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

After completing the above configuration, we can fully use the ThinkPHP6 framework for email subscription and push. After the user enters their email address and submits a subscription application, the email push script will send the latest article content to the user at the specified time of the scheduled task. Hope it helps everyone.

The above is the detailed content of How to use ThinkPHP6 for email subscription and push?. For more information, please follow other related articles on the PHP Chinese website!

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

MantisBT

MantisBT

Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

Dreamweaver Mac version

Dreamweaver Mac version

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

PhpStorm Mac version

PhpStorm Mac version

The latest (2018.2.1) professional PHP integrated development tool

WebStorm Mac version

WebStorm Mac version

Useful JavaScript development tools