Explication détaillée des points de connaissances pour l'envoi d'e-mails avec PHP

不言
Libérer: 2023-03-25 12:56:02
original
1747 Les gens l'ont consulté

Cet article résume les points de connaissances pertinents et les codes d'utilisation détaillés pour l'envoi d'e-mails en PHP. Les amis dans le besoin peuvent en tirer des leçons.

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 appkey ;

Demander un modèle ;

Voir le document d'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 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 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 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 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)
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. 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 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 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,查看邮件发送队列。postqueue -p可取代sendmail中的mailq命令,postqueue -f刷新队列(强制尝试发送队列中的邮件)。

postcat,查看未发送邮件的信息。例如postcat -q xxxx(xxxx是postqueue或者mailq显示的未发送队列ID)可查看邮件的详细信息,postcat -b -q xxxxx只查看邮件正文。

postsuper,超级用户才可使用的邮件管理程序。postsuper -d xxxx,删除队列ID为xxxxx的邮件;postsuper -h xxxxx,暂停队列ID为xxxx的邮件发送,等。

以上介绍对于发送邮件基本已足够。注意,mail命令发送的邮件能投递的前提是postfix正在运行(ps aux | grep postfix | grep -v grep输出不为空)。

有了postfix,配置好后可以对外发送邮件,也能收取外网发送过来的邮件,但限于命令行操作。想用foxmail等客户端收发邮件,需要让服务器支持POP3/IMAP协议。开源的dovecot可以实现这个功能。dovecot服务于收邮件而非发送,了解其对开发中的帮助不大。如果想搭建一套完整的邮件系统(包括网页端支持、垃圾邮件过滤、病毒查杀、传输加密等),建议参考或使用国产开源的 EwoMail。

了解postfix对开发中发送邮件帮助有多大?说实话,几乎没有帮助。原因是为了防止垃圾邮件泛滥,各大云服务器厂商屏蔽了25端口(Google Cloud连465都干掉了)。亚马逊云通过申请还有放行的可能(但有速率和每日额度限制),其他厂商几乎不会让你使用自己的域名从本机直接发送邮件。封禁25端口,必须使用第三方的邮件服务,几乎是业界的标准做法。

聪明的人可能想到,使用465加密端口(基于SMTPS,SMTP over SSL协议)或587端口(SMTP over STARTTLS协议)发送邮件,是不是就能绕开限制了?阿里云/腾讯云等厂商并不封禁465端口,发送邮件可以使用该端口而无需申请。但注意465和587端口是客户端和邮件服务器通讯使用的端口,邮件服务器之间通讯使用25端口。你可以通过465端口连接到Gmail邮箱对外发送邮件,但无法让postfix使用465端口投递邮件到hotmail邮件服务器。

总结来说,sendmail/postfix作为垃圾和欺诈邮件泛滥前的邮件服务器软件,对业界贡献很大。随着云服务器的盛行,几乎无法以指向本机的域名向外发送邮件,sendmail/postfix除了在本机内发送提醒邮件,用处已然不大。要对外发送邮件,要么自建机房,要么使用第三方邮件系统。

PHP的mail函数

作为PHP开发中,了解sendmail/postfix还是有点用处。mail函数默认使用sendmail/postfix发送邮件,了解相关配置,就能知道为啥能工作/为啥不能工作。

简单来说,要让PHP自带的mail函数正常工作,需要做以下事情:

申请域名,在DNS解析中设置MX记录,指向本机(非合法主机(FQDN, Fully Qualified Domain Name)发送的邮件都会被当做垃圾邮件直接丢弃);

安装sendmail/postfix,配置软件并运行;

配置防火墙、安全组,放行端口。

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

PHP发送邮件

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

PHP发送邮件也可以很简单,推荐方式就是使用Swift Mailer或PHPMailer等类库。引入这些类库后,注册第三方邮箱(比如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函数原因,最后给出了使用第三方类库发送邮件的代码示例。

相关推荐:
几种PHP发送HTTP请求的方式分享

PHP envoie des emails SMS et bien d'autres partages de code PHP pratiques



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!