1. Composer installe phpmailer
1 | composer require phpmailer/phpmailer
|
Copier après la connexion
2. Encapsuler la classe du service de messagerie dans ThinkPHP
Je l'encapsule dans le répertoire d'extension extend/ Mail Dans le fichier .php, le contenu est le suivant :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | <?php
class Mail extends \PHPMailer
{
function __construct()
{
date_default_timezone_set('PRC');
$this ->CharSet = config('mail.charset');
$this ->isSMTP();
$this ->SMTPDebug = config('mail.smtp_debug');
$this ->Debugoutput = config('mail.debug_output');
$this ->Host = config('mail.host');
$this ->Port = config('mail.port');
$this ->SMTPAuth = config('mail.smtp_auth');
$this ->SMTPSecure = config('mail.smtp_secure');
$this ->Username = config('mail.username');
$this ->Password = config('mail.password');
$this ->setFrom(config('mail.from'), config('mail.from_name'));
$this ->addReplyTo(config('mail.reply_to'), config('mail.reply_to_name'));
}
function sendMail( $toMail , $toName , $subject , $content , $attachment = null)
{
$this ->addAddress( $toMail , $toName );
$this ->Subject = $subject ;
$this ->msgHTML( $content );
if ( $attachment ) {
if ( is_string ( $attachment )){
is_file ( $attachment ) && $this ->AddAttachment( $attachment );
}
else if ( is_array ( $attachment )){
foreach ( $attachment as $file ) {
is_file ( $file ) && $this ->AddAttachment( $file );
}
}
}
if (! $this ->send()){
return $this ->ErrorInfo;
}
else {
return true;
}
}
}
|
Copier après la connexion
Remarque : Si vous envoyez une pièce jointe, il est recommandé d'utiliser le chemin anglais . Les chemins chinois peuvent entraîner l'échec de l'envoi des pièces jointes et la réception des e-mails sans pièces jointes.
J'ai mis certains des paramètres de configuration requis ci-dessus dans le fichier application/extra/mail.php du répertoire de configuration de l'extension. Le contenu est le suivant :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?php
return [
'charset' => 'utf-8',
'smtp_debug' => 0,
'debug_output' => 'html',
'host' => 'smtp.126.com',
'port' => 465,
'smtp_auth' => true,
'smtp_secure' => 'ssl',
'username' => 'yourname@example.com',
'password' => 'yourpassword',
'from' => 'from@example.com',
'from_name' => 'name',
'reply_to' => '',
'reply_to_name' => '',
];
|
Copier après la connexion
.
Remarque : Le port par défaut est généralement 25. Si le protocole de sécurité SSL est utilisé, le numéro de port est généralement 465 ou 587. Par exemple, 126 boîtes aux lettres. Il est recommandé d'utiliser un protocole sécurisé, car les serveurs Alibaba Cloud interdisent le port 25 des protocoles non sécurisés.
3. Test
Dans la méthode dans le contrôleur, ajoutez le code de test :
1 2 3 4 5 6 | public function mail()
{
$mail = new \Mail;
$ok = $mail ->sendMail('xxxxxxxxx@qq.com', 'mingc', '邮件来了', '<p style= "color: #f60; font-weight: 700;" >恭喜,邮件成功!</p>', 'C:/Users/Administrator/Desktop/body.bmp');
var_dump( $ok );
}
|
Copier après la connexion
Ici j'utilise le 126 boîte aux lettres, protocole de sécurité SSL, numéro de port 465, envoi de contenu html, test réussi :
![](https://img.php.cn/upload/article/000/023/547/865e7cc3594c97fcc895465b2727f364-0.png)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!