Revue PHP : Envoi d'e-mails

不言
Libérer: 2023-03-24 06:14:01
original
1550 Les gens l'ont consulté

Cet article présente principalement la révision PHP de l'envoi d'e-mails. Il a une certaine valeur de référence. Maintenant, je le partage avec tout le monde. Les amis dans le besoin peuvent s'y référer

Veuillez indiquer la source de l'article lors de la réimpression : https. ://tlanyan.me/php-review...

Table des matières de la série de critiques PHP

  • Bases de PHP

  • demande web

  • cookie

  • réponse web

  • session

  • Opérations de base de données

  • Cryptage et décryptage

  • Composer

  • Créez le vôtre Package Composer

L'envoi d'e-mails est une fonction courante des sites Web. Des scénarios tels que l'activation de l'utilisateur et la récupération du mot de passe nécessitent souvent l'envoi d'e-mails aux boîtes aux lettres des utilisateurs. Cet article passe d'abord en revue les concepts associés à l'envoi d'e-mails, puis donne un exemple de code pour l'envoi d'e-mails à l'aide de PHP.

Envoyer des messages texte

Fonctionnellement, les messages texte sont similaires aux e-mails et sont souvent utilisés pour les notifications et la vérification de sécurité. L’envoi de messages texte nécessite (essentiellement) de payer le fournisseur, les fournisseurs de SMS sont donc incités à fournir une documentation claire et des interfaces faciles à utiliser auxquelles les utilisateurs peuvent accéder. De manière générale, ceux qui envoient des SMS sont :

  1. Recherche de fournisseurs, tels qu'Alibaba Big Fish, de données agrégées, etc.

  2. Créez un compte et obtenez l'appid et l'appkey ;

  3. Modèle d'application

  4. Affichez le document d'interface et intégrez-le dans l'application ;

  5. Appelez l'API pour envoyer des messages texte.

Le processus est simple et facile à comprendre, et il est également très pratique d'accès et d'utilisation. Fondamentalement, il peut être connecté et testé en une heure ou deux. Les utilisateurs n'ont pas besoin de prendre en compte des détails tels que le codage et l'adressage des messages pendant le processus de communication. L'inconvénient est qu'ils doivent payer.

Le courrier électronique est généralement un service gratuit, mais le support associé n'est pas celui en place, ce qui doit être compris. Il existe de nombreuses bibliothèques de classes pour l'envoi d'e-mails dans différents langages de programmation. Du point de vue de la source, elles peuvent être essentiellement divisées en deux catégories : l'envoi depuis la machine locale et l'envoi depuis un fournisseur de services de messagerie tiers. Afin de comprendre le processus d’envoi d’e-mails, introduisons d’abord quelques concepts connexes.

Concepts associés

La plupart des personnes exposées à Internet ont de l'expérience dans l'utilisation du courrier électronique, mais elles sont fondamentalement limitées aux concepts de client de messagerie, de page Web et de fournisseur. En tant que développeur, comprendre les concepts suivants dans cette section vous aidera à mieux maîtriser les détails de la communication par courrier électronique.

MUA : Agent utilisateur de messagerie. L'agent utilisateur est un mot souvent rencontré dans le développement. Il fait principalement référence à un outil qui comprend les intentions humaines et demande des ressources au fournisseur de ressources au nom de l'utilisateur. Par exemple, le navigateur est l'agent utilisateur le plus couramment utilisé. Il envoie une requête au serveur Web au format de protocole HTTP/HTTPS, analyse la réponse et la restitue à l'utilisateur. Les agents utilisateurs de messagerie sont généralement des outils tels que Foxmail et Outlook. Une fois que les utilisateurs ont écrit des e-mails, ils encapsulent le contenu de l'e-mail en fonction du format et communiquent avec le serveur de messagerie.

MTA : Mail Transfer Agent, un programme qui aide les utilisateurs à envoyer et à recevoir des e-mails. Le serveur de messagerie souvent mentionné fait référence au MTA. Les programmes open source incluent sendmail, postfix, QMail, etc.

MRA : Mail Retrieval Agent, un agent de collecte de courrier, récupère le courrier de l'utilisateur depuis le serveur de messagerie localement. Les clients de messagerie sont des MRA courants.

SMTP : Protocole de transfert de courrier simple, Protocole de transfert de courrier simple. Les utilisateurs, les serveurs de messagerie et les serveurs de messagerie utilisent tous ce protocole pour transférer du courrier entre eux (la valeur par défaut est le texte brut et le cryptage SSLTLS peut être utilisé).

POP3/IMAP : Post Office Protocol version 3/Internet Message Access Protocol, Post Office Protocol version 3 ou Network Information Acquisition Protocol, le protocole utilisé par le client pour obtenir le courrier du serveur .

L'utilisateur A (boîte aux lettres 163) envoie une lettre à l'utilisateur B (boîte aux lettres Gmail). Le processus par lequel l'utilisateur B obtient la lettre implique les concepts ci-dessus. Le processus et la relation conceptuelle peuvent être représentés par le diagramme simplifié suivant :

用户A  --发送邮件--> 用户B
 M|S                 M|I
 U|M                 R|M
 A|T                 A|A
  |P                  |P
  v                   v
MTA(163)--转发(SMTP)->MTA(gmail)
Copier après la connexion
Remarque : La figure ci-dessus montre le processus général d'envoi d'e-mails. D'autres MSA, MDA, ESMTP, SMTPS, etc. peuvent apparaître dans. l'ensemble du processus. Mais cela n'affecte pas la compréhension de l'envoi et de la réception d'e-mails. Les abréviations et concepts mentionnés ci-dessous seront notés. Pour les autres, veuillez vérifier par vous-même.

postfix

Les logiciels d'envoi d'emails sous Linux sont principalement sendmail et postfix, qui jouent le rôle de MTA/MDA (Mail Delivery Agent, Mail Delivery Agent) dans le système comme mentionné ci-dessus. Il aide les utilisateurs à envoyer des e-mails sortants et à recevoir des e-mails envoyés dans la boîte aux lettres de l'utilisateur (emplacement par défaut /var/spool/mail/username).

Sendmail est un logiciel de messagerie établi de longue date et jouissant d'une très grande réputation. Mais Wietse (Wietse Zweitze Venema) n'en était pas content, alors il a proposé postfix. La commande postfix est (presque) compatible avec sendmail, mais plus efficace et sécurisée (à l'origine du correctif du suffixe). Il s'agit actuellement du logiciel d'envoi et de réception d'e-mails par défaut pour la plupart des distributions Linux. Il est recommandé d'utiliser postfix au lieu de sendmail (). il y a de nombreuses années, il y avait un article sur ce blog sur la configuration de sendmail, j'étais jeune et ignorant à cette époque, j'avais donc prévu de prendre le temps de réviser cet article).

Le fichier de configuration principal de postfix est /etc/postfix/main.cf Le fichier de configuration est très bien commenté et les options sont fondamentalement explicites. Les configurations les plus importantes sont : myhostname, myorigin, inet_interfaces, inet_protocols et mydestination (si vous prévoyez de recevoir des lettres de réseaux externes). Il est à noter que lorsque inet_interfaces est configuré comme localhost, la valeur de inet_protocols doit être ipv4, sinon un message d'erreur similaire à postfix: fatal: parameter inet_interfaces: no local interface found for ::1 peut apparaître.

Plusieurs commandes Postfix courantes liées au courrier sont :

  1. mail ou mailx, pour envoyer du courrier. tlanyanL'utilisateur envoie un e-mail à root : mail -s "Greetings" root@localhost -r tlanyan@localhost, puis saisit A nice day! dans le terminal, puis appuie sur Entrée, appuyez sur ctrl+D pour terminer l'édition du texte, et l'e-mail a été envoyé. Connectez-vous au compte root et vous serez informé qu'il y a de nouveaux e-mails dans /var/spool/mail/root. Utilisez tail ou d'autres commandes pour afficher les informations détaillées de l'e-mail.

  2. postquque, vérifiez la file d'attente d'envoi des emails. postqueue -p peut remplacer la commande sendmail dans mailq, et postqueue -f actualise la file d'attente (force une tentative d'envoi de messages dans la file d'attente).

  3. postcat pour afficher les informations des e-mails non envoyés. Par exemple, postcat -q xxxx (xxxx est l'ID de file d'attente non envoyé affiché par postqueue ou mailq) peut afficher les informations détaillées de l'e-mail, et postcat -b -q xxxxx ne peut afficher que le corps de l'e-mail.

  4. postsuper, un programme de gestion de courrier électronique qui ne peut être utilisé que par les super utilisateurs. postsuper -d xxxx, supprimez le mail avec l'ID de file d'attente xxxxx postsuper -h xxxxx, suspendez l'envoi du mail avec l'ID de file d'attente xxxx, etc.

L'introduction ci-dessus est fondamentalement suffisante pour envoyer des e-mails. Notez que le courrier envoyé par la commande mail ne peut être remis que si postfix est en cours d'exécution (ps aux | grep postfix | grep -v grep la sortie n'est pas vide).

Avec postfix, après configuration, vous pouvez envoyer des e-mails en externe et recevoir des e-mails envoyés depuis le réseau externe, mais cela est limité aux opérations en ligne de commande. Si vous souhaitez utiliser des clients tels que foxmail pour envoyer et recevoir des e-mails, vous devez faire en sorte que le serveur prenne en charge le protocole POP3/IMAP. Le pigeonnier open source peut réaliser cette fonction. Dovecot sert à recevoir des e-mails plutôt qu'à les envoyer. Le comprendre n'aide pas au développement. Si vous souhaitez créer un système de messagerie complet (incluant la prise en charge des pages Web, le filtrage du spam, la détection des virus, le cryptage des transmissions, etc.), il est recommandé de se référer ou d'utiliser l'open source national EwoMail.

Dans quelle mesure connaître Postfix est-il utile pour envoyer des e-mails pendant le développement ? Pour être honnête, peu d’aide. En effet, afin d'éviter la prolifération du spam, les principaux fabricants de serveurs cloud ont bloqué le port 25 (Google Cloud a même bloqué le port 465). Il est possible qu'Amazon Cloud soit publié via une application (mais il existe des limites de taux et de quota quotidien), et les autres fournisseurs ne vous laisseront presque jamais utiliser votre propre nom de domaine pour envoyer des e-mails directement à partir de cette machine. C'est presque une pratique courante dans l'industrie de bloquer le port 25 et d'utiliser un service de messagerie tiers.

Les gens intelligents peuvent penser que l'utilisation du port 465 crypté (basé sur SMTPS, SMTP sur protocole SSL) ou du port 587 (SMTP sur protocole STARTTLS) pour envoyer des e-mails peut contourner les restrictions ? Alibaba Cloud/Tencent Cloud et d'autres fabricants ne bloquent pas le port 465. Vous pouvez utiliser ce port pour envoyer des e-mails sans en faire la demande. Mais notez que les ports 465 et 587 sont utilisés pour la communication entre le client et le serveur de messagerie , et le port 25 est utilisé pour la communication entre les serveurs de messagerie. Vous pouvez vous connecter à la boîte aux lettres Gmail via le port 465 pour envoyer des e-mails en externe, mais vous ne pouvez pas laisser Postfix utiliser le port 465 pour envoyer des e-mails au serveur de messagerie Hotmail.

En résumé, sendmail/postfix, en tant que logiciel de serveur de messagerie avant la prolifération du spam et des e-mails frauduleux, a apporté une grande contribution à l'industrie. Avec la popularité des serveurs cloud, il est presque impossible d'envoyer des emails avec des noms de domaine pointant vers la machine locale Sendmail/postfix est de peu d'utilité sauf pour envoyer des emails de rappel au sein de la machine locale. Pour envoyer des e-mails en externe, vous devez soit créer votre propre salle informatique, soit utiliser un système de messagerie tiers.

Fonction mail de PHP

En tant que développeur PHP, il est toujours utile de comprendre sendmail/postfix. mailLa fonction utilise sendmail/postfix pour envoyer des e-mails par défaut. Si vous comprenez la configuration correspondante, vous saurez pourquoi cela peut fonctionner/pourquoi cela ne fonctionne pas.

Revue PHP : Envoi d'e-mails

Pour faire simple, pour que la fonction de messagerie de PHP fonctionne correctement, vous devez procéder comme suit :

  1. Demandez un nom de domaine, définissez des enregistrements MX en résolution DNS et envoyez des e-mails dirigés vers cette machine (les e-mails envoyés à des hôtes non légaux (FQDN, nom de domaine complet) seront directement rejetés comme spam

  2. Installez sendmail/postfix, configurez le logiciel et exécutez-le ;

  3. Configurez le pare-feu, le groupe de sécurité et libérez les ports.

发送效率低、非面向对象的调用方式,配置麻烦以及云服务器厂商的封锁,是使用mail函数的最大阻碍。所以做PHP以来,本人并未直接用过mail函数。

PHP发送邮件

发个邮件要了解这么多,会让人觉得很心累。说好的PHP是最好的语言呢?

PHP发送邮件也可以很简单,推荐方式就是使用Swift MailerPHPMailer等类库。引入这些类库后,注册第三方邮箱(比如Gmail、QQ等),填好用户名密码,配置好STMP地址和端口,就能像发送短信一样轻松发送邮件。当然这些类库也支持使用sendmail/postfix发送邮件,但我想你不会再这样做了。

Swift Mailer为例,直接上代码说明使用PHP发送邮件也是一个非常简单的事情!

首先,在项目中引入Swift Mailer

composer require "swiftmailer/swiftmailer:^6.0"
Copier après la connexion

然后准备好邮件内容(以文本文件为例,不带附件):

$message = (new Swift_Message('Test Message'))
    ->setFrom(['tlanyan@tlanyan.me' => 'tlanyan'])
    ->setTo(['tlanyan1@tlanyan.me'])
    ->setBody('Hello, this is a test mail from Swift Mailer!');
Copier après la connexion

接着,设置好邮件传输方式(使用Gmail邮箱):

$transport = (new Swift_SmtpTransport('smtp.gmail.com', 465, 'ssl'))
    ->setUsername('username')
    ->setPassword('password');
Copier après la connexion

或者使用sendmail/postfix的方式(不推荐):

$transport = (new Swift_SendmailTransport());
Copier après la connexion

最后,使用transport构造mailer实例,发送邮件:

$mailer = new Swift_Mailer($transport);
$result = $mailer->send($message);
Copier après la connexion

老板再也不用担心发送邮件收不到了,So easy!

总结

本文先回顾了发送邮件的相关概念,说明不推荐使用内置的mail函数原因,最后给出了使用第三方类库发送邮件的代码示例。

感谢阅读,欢迎评论指正!

参考

  1. http://cn.linux.vbird.org/lin...

  2. http://doc.ewomail.com/ewomai...

  3. http://php.net/manual/en/func...

  4. https://swiftmailer.symfony.com

相关推荐;

怎样选择适合自己php框架

php中传值与传引用的区别

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!