Maison  >  Article  >  développement back-end  >  Explication détaillée de la façon d'envoyer des e-mails PHP

Explication détaillée de la façon d'envoyer des e-mails PHP

php中世界最好的语言
php中世界最好的语言original
2018-05-16 11:07:032232parcourir

Cette fois, je vous apporte une explication détaillée de comment utiliser PHP Envoi d'e-mails , et quelles sont les Précautions pour l'envoi d'e-mails PHP Voici un cas pratique, prenons un. regarder.

L'envoi d'e-mails est une fonction courante des sites Web. Des scénarios tels que l'activation d'un utilisateur et la récupération d'un 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 messages texte sont :

Recherchez des fournisseurs, tels que Alibaba Big Fish, des données agrégées, etc.

Enregistrez un compte et obtenez un appid et une clé d'application

 ;

Appliquer le modèle ;

Voir la documentation de l'interface et l'intégrer dans l'application

Appeler 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. Vous pouvez essentiellement le connecter et le tester 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 envoyer des e-mails dans divers 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 cela se limite essentiellement au concept de clients de messagerie, de pages Web et de fournisseurs. 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 : Mail User Agent, 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 nom des utilisateurs. 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, la restitue et la présente à 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 qui récupère localement le courrier de l'utilisateur sur le serveur de messagerie. 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 se transférer du courrier (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 Access 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)

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. Ils font office de MTA/MDA (Mail Delivery Agent, Mail Delivery Agent) dans le système. ci-dessus dans le rôle d'agent de livraison). 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 ancien logiciel de messagerie avec une très grande réputation. Mais Wietse (Wietse Zweitze Venema) n'en était pas satisfait, 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 du réseau externe). Il convient de noter que lorsque inet_interfaces est configuré en tant que localhost, la valeur de inet_protocols doit être ipv4, sinon un message d'erreur similaire à postfix : fatal : paramètre inet_interfaces : aucune interface locale trouvée pour ::1 peut apparaître.

Plusieurs commandes Postfix courantes liées au courrier sont :

mail ou mailx, pour envoyer du courrier. L'utilisateur tlanyan envoie un e-mail à root : mail -s "Greetings" root@localhost -r tlanyan@localhost, puis saisissez A nice day ! dans le terminal, puis appuyez 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 invité à indiquer qu'il y a de nouveaux e-mails dans /var/spool/mail/root. Utilisez tail ou d'autres commandes pour afficher des informations détaillées sur l'e-mail.

postquque, consultez la file d'attente d'envoi des mails. postqueue -p peut remplacer la commande mailq dans sendmail, et postqueue -f actualise la file d'attente (force une tentative d'envoi de courrier dans la file d'attente).

postcat, vérifiez les informations des emails non envoyés. Par exemple, postcat -q xxxx (xxxx est l'ID de file d'attente non envoyée 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.

postsuper, un programme de gestion de courrier qui ne peut être utilisé que par les super utilisateurs. postsuper -d xxxx, supprime le courrier avec l'ID de file d'attente xxxxx ; postsuper -h xxxxx, suspend l'envoi du courrier 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 (la sortie ps aux | grep postfix | grep -v grep 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 les ports utilisés pour la communication entre le client et le serveur de messagerie, et que 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 quasiment impossible d'envoyer des emails avec des noms de domaine pointant vers la machine locale. Sendmail/postfix ne sert à rien 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. La fonction mail 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.

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

Demandez un nom de domaine, définissez les enregistrements MX en résolution DNS et pointez sur la machine locale (hôte non légal) (les e-mails envoyés par FQDN, nom de domaine complet) seront directement rejetés comme spam ;

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

 ;

Configurez les pare-feu, les groupes de sécurité et les ports de version.

Faible efficacité d'envoi, méthode d'appel nonorientée objet, configuration difficile et blocage par les fabricants de serveurs cloud sont les plus grands obstacles à l'utilisation de la fonction de messagerie. Ainsi, depuis que j'ai commencé à travailler en PHP, je n'ai jamais utilisé directement la fonction mail.

PHP发送邮件

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

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

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

首先,在项目中引入Swift Mailer:

composer require "swiftmailer/swiftmailer:^6.0"

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

$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!');

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

$transport = (new Swift_SmtpTransport('smtp.gmail.com', 465, 'ssl'))
  ->setUsername('username')
  ->setPassword('password');

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

$transport = (new Swift_SendmailTransport());

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

$mailer = new Swift_Mailer($transport);
$result = $mailer->send($message);

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

PHP+MySQL实现消息队列步骤详解

ES6使用技巧总结

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!

Déclaration:
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