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.
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.
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.
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
:
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>邮件订阅</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.
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 thinkacadeConfig; 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.
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 thinkacadeConfig; 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' ], // ... ];
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!