cari
Rumahrangka kerja phpThinkPHPBagaimana untuk menggunakan ThinkPHP6 untuk langganan e-mel dan tolak?
Bagaimana untuk menggunakan ThinkPHP6 untuk langganan e-mel dan tolak?Jun 12, 2023 am 08:27 AM
thinkphpLangganan e-melmenolak

Dengan perkembangan pesat Internet, e-mel, sebagai salah satu alat komunikasi yang paling tradisional dan stabil, telah menjadi semakin penting dalam pelbagai industri. Sebagai pembangun, cara menyediakan pengguna dengan perkhidmatan langganan dan tolak e-mel yang boleh dipercayai dan cekap telah menjadi masalah yang perlu kami fikirkan dan selesaikan. Artikel ini akan memperkenalkan cara menggunakan rangka kerja ThinkPHP6 untuk langganan e-mel dan operasi tolak saya harap ia akan membantu semua orang.

  1. Persediaan

Pertama sekali, kita perlu memasang PHP, Apache/Nginx dan pelayan web lain, serta MySQL dan pangkalan data lain pada pemasangan tempatan atau alat kawalan jauh pelayan. Pada masa yang sama, kami perlu menggunakan protokol SMTP untuk menghantar e-mel, jadi kami juga memerlukan akaun pelayan SMTP dan kata laluan.

  1. Pasang rangka kerja dan pek sambungan

Sebelum meneruskan operasi tertentu, kami perlu menggunakan komposer untuk memasang rangka kerja ThinkPHP6 dan pek sambungan. Masukkan arahan berikut pada baris arahan untuk dipasang.

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

Antaranya, arahan pertama ialah memasang rangka kerja ThinkPHP6, arahan kedua ialah memuat turun pakej sambungan PHPMailer, dan arahan ketiga ialah menyalin pakej sambungan PHPMailer ke direktori vendor ThinkPHP6.

  1. Konfigurasikan maklumat e-mel dan langganan

Sebelum melaksanakan fungsi langganan e-mel, kami perlu mengkonfigurasi akaun pelayan SMTP, kata laluan dan nama penghantar dalam fail .env dan alamat supaya program dapat menghantar e-mel dengan lancar. Pada masa yang sama, kami juga perlu mencipta jadual maklumat langganan baharu untuk menyimpan maklumat langganan pengguna. Dalam rangka kerja ThinkPHP6, kita boleh menggunakan arahan migrasi untuk mencipta jadual maklumat langganan bernama subscribe_info.

php think migrate:run --seed

Selepas melaksanakan arahan di atas, kita perlu menambah medan berikut pada jadual subscribe_info:

  • id: kunci utama, auto-increment
  • e-mel: alamat e-mel pengguna
  • is_subscribed: Sama ada hendak melanggan e-mel
  1. Menulis halaman langganan

Apabila kami telah menyelesaikan penciptaan fail konfigurasi dan jadual maklumat langganan , kita perlu mula menulis halaman langganan. Dalam rangka kerja ThinkPHP6, kita boleh menggunakan tp6/public dan index.php dalam direktori index.html untuk membangunkan halaman. Untuk kemudahan pembentangan, di sini kami menambah borang ringkas terus di index.html untuk memasukkan alamat e-mel pengguna dan menyerahkannya.

<!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>

Selepas pengguna menyerahkan borang, kami perlu menyimpan alamat e-mel yang dimasukkan oleh pengguna ke dalam jadual maklumat langganan untuk menolak e-mel.

  1. Menulis API langganan

Untuk menyimpan alamat e-mel yang dimasukkan oleh pengguna ke dalam jadual maklumat langganan, kami perlu menulis API bernama Subscribe.php. Dalam rangka kerja ThinkPHP6, kita boleh menggunakan direktori tp6/application/api untuk pembangunan API. Di bawah ialah fail Subscribe.php yang ringkas.

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

Dalam kod di atas, kami mula-mula mendapatkan alamat e-mel yang dimasukkan oleh pengguna daripada permintaan, dan menyemak sama ada sudah ada rekod pengguna dalam jadual maklumat langganan. Jika tidak, buat rekod baharu jika ia sudah wujud, tetapkan medan is_subscribed rekod itu kepada benar.

Seterusnya, kita boleh menggunakan pakej sambungan PHPMailer untuk menghantar e-mel. Mula-mula kami menambah maklumat konfigurasi berikut pada fail config dalam direktori 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',
];

Dalam maklumat konfigurasi di atas, kami mengisi alamat, port, nombor akaun, kata laluan dan maklumat lain pelayan SMTP. Dalam fail Subscribe.php, kami boleh membaca maklumat ini dan menggunakan pakej sambungan PHPMailer untuk menghantar e-mel. Selepas berjaya menghantar e-mel, kami mengembalikan mesej langganan yang berjaya kepada pengguna.

  1. Menulis skrip push e-mel

Selepas pengguna berjaya melanggan e-mel, kita perlu menulis skrip push e-mel supaya kandungan artikel terkini boleh ditolak ke pengguna yang dilanggan dengan kerap. Dalam rangka kerja ThinkPHP6, kita boleh menggunakan direktori tp6/application/command untuk membangunkan skrip arahan. Di bawah ialah skrip MailPush.php mudah.

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

Dalam kod di atas, kami mula-mula mendapatkan maklumat pengguna yang dilanggan daripada jadual maklumat langganan, dan kemudian menghantar e-mel melalui pakej sambungan PHPMailer. Kita juga perlu menambah laluan kepada skrip arahan dalam config/app.php.

# app.php
<?php
return [
    // ...
    'commands'       => [
        'appcommandMailPush'
    ],
    // ...
];
  1. Konfigurasikan tugas berjadual

Selepas kami menulis skrip push e-mel, kami perlu mengkonfigurasi tugasan berjadual supaya skrip push e-mel dapat dilaksanakan dengan kerap. Di bawah sistem Linux, kita boleh menggunakan perintah crontab untuk mengkonfigurasi tugas yang dijadualkan. Masukkan arahan berikut pada baris arahan untuk membuka fail konfigurasi tugas yang dijadualkan.

crontab -e

Dalam fail konfigurasi tugas yang dijadualkan, kami menambah kandungan berikut, yang bermaksud bahawa skrip push e-mel akan dilaksanakan pada pukul 6 setiap petang.

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

Selepas melengkapkan konfigurasi di atas, kami boleh menggunakan sepenuhnya rangka kerja ThinkPHP6 untuk langganan dan push e-mel. Selepas pengguna memasukkan alamat e-mel mereka dan menyerahkan permohonan langganan, skrip tolak e-mel akan menghantar kandungan artikel terkini kepada pengguna pada masa yang ditetapkan untuk tugasan yang dijadualkan. Semoga ia membantu semua orang.

Atas ialah kandungan terperinci Bagaimana untuk menggunakan ThinkPHP6 untuk langganan e-mel dan tolak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
thinkphp是不是国产框架thinkphp是不是国产框架Sep 26, 2022 pm 05:11 PM

thinkphp是国产框架。ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。

一起聊聊thinkphp6使用think-queue实现普通队列和延迟队列一起聊聊thinkphp6使用think-queue实现普通队列和延迟队列Apr 20, 2022 pm 01:07 PM

本篇文章给大家带来了关于thinkphp的相关知识,其中主要介绍了关于使用think-queue来实现普通队列和延迟队列的相关内容,think-queue是thinkphp官方提供的一个消息队列服务,下面一起来看一下,希望对大家有帮助。

thinkphp的mvc分别指什么thinkphp的mvc分别指什么Jun 21, 2022 am 11:11 AM

thinkphp基于的mvc分别是指:1、m是model的缩写,表示模型,用于数据处理;2、v是view的缩写,表示视图,由View类和模板文件组成;3、c是controller的缩写,表示控制器,用于逻辑处理。mvc设计模式是一种编程思想,是一种将应用程序的逻辑层和表现层进行分离的方法。

实例详解thinkphp6使用jwt认证实例详解thinkphp6使用jwt认证Jun 24, 2022 pm 12:57 PM

本篇文章给大家带来了关于thinkphp的相关知识,其中主要介绍了使用jwt认证的问题,下面一起来看一下,希望对大家有帮助。

thinkphp扩展插件有哪些thinkphp扩展插件有哪些Jun 13, 2022 pm 05:45 PM

thinkphp扩展有:1、think-migration,是一种数据库迁移工具;2、think-orm,是一种ORM类库扩展;3、think-oracle,是一种Oracle驱动扩展;4、think-mongo,一种MongoDb扩展;5、think-soar,一种SQL语句优化扩展;6、porter,一种数据库管理工具;7、tp-jwt-auth,一个jwt身份验证扩展包。

thinkphp 怎么查询库是否存在thinkphp 怎么查询库是否存在Dec 05, 2022 am 09:40 AM

thinkphp查询库是否存在的方法:1、打开相应的tp文件;2、通过“ $isTable=db()->query('SHOW TABLES LIKE '."'".$data['table_name']."'");if($isTable){...}else{...}”方式验证表是否存在即可。

一文教你ThinkPHP使用think-queue实现redis消息队列一文教你ThinkPHP使用think-queue实现redis消息队列Jun 28, 2022 pm 03:33 PM

本篇文章给大家带来了关于ThinkPHP的相关知识,其中主要整理了使用think-queue实现redis消息队列的相关问题,下面一起来看一下,希望对大家有帮助。

thinkphp3.2怎么关闭调试模式thinkphp3.2怎么关闭调试模式Apr 25, 2022 am 10:13 AM

在thinkphp3.2中,可以利用define关闭调试模式,该标签用于变量和常量的定义,将入口文件中定义调试模式设为FALSE即可,语法为“define('APP_DEBUG', false);”;开启调试模式将参数值设置为true即可。

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SecLists

SecLists

SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.

EditPlus versi Cina retak

EditPlus versi Cina retak

Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

mPDF

mPDF

mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),