Heim  >  Artikel  >  Backend-Entwicklung  >  PHP-Rezension: E-Mails versenden

PHP-Rezension: E-Mails versenden

不言
不言Original
2018-04-16 14:42:511545Durchsuche

Dieser Artikel stellt hauptsächlich die PHP-Überprüfung des E-Mail-Versands dar. Jetzt kann ich ihn mit allen teilen, die ihn benötigen.

Bitte geben Sie beim Nachdruck die Quelle des Artikels an :// tlanyan.me/php-review...

Inhaltsverzeichnis der PHP-Rezensionsreihe

  • PHP-Grundlagen

  • Web-Anfrage

  • Cookie

  • Web-Antwort

  • Sitzung

  • Datenbankoperationen

  • Verschlüsselung und Entschlüsselung

  • Composer

  • Erstellen Sie Ihre eigenen Composer-Paket

Das Versenden von E-Mails ist eine häufige Funktion von Websites, die häufig das Versenden von E-Mails an Benutzerpostfächer erfordern. In diesem Artikel werden zunächst die zugehörigen Konzepte zum Senden von E-Mails erläutert und anschließend Beispielcode zum Senden von E-Mails mit PHP bereitgestellt.

Textnachrichten senden

Textnachrichten ähneln funktional E-Mails und werden häufig für Benachrichtigungen und Sicherheitsüberprüfungen verwendet. Für das Versenden von Textnachrichten ist (grundsätzlich) eine Zahlung an den Anbieter erforderlich, sodass SMS-Anbieter einen Anreiz haben, eine klare Dokumentation und benutzerfreundliche Schnittstellen bereitzustellen, auf die Benutzer zugreifen können. Im Allgemeinen sind diejenigen, die Textnachrichten senden:

  1. Suchen Sie nach Lieferanten wie Alibaba Big Fish, aggregierten Daten usw.; Registrieren Sie ein Konto und erhalten Sie Appid und Appkey.

  2. Benutzeroberflächendokument anzeigen und in die Anwendung integrieren

  3. Rufen Sie die API auf, um Textnachrichten zu senden.

  4. Der Vorgang ist einfach und leicht zu verstehen, außerdem ist der Zugriff und die Verwendung sehr bequem. Grundsätzlich kann er innerhalb von ein oder zwei Stunden angeschlossen und getestet werden. Benutzer müssen während des Kommunikationsprozesses keine Rücksicht auf Details wie die Verschlüsselung und Adressierung von Nachrichten nehmen. Der Nachteil besteht darin, dass sie dafür bezahlen müssen.

    E-Mail ist im Allgemeinen ein kostenloser Dienst, der entsprechende Support ist jedoch nicht vorhanden, was selbstverständlich sein sollte. Es gibt viele Klassenbibliotheken zum Senden von E-Mails in verschiedenen Programmiersprachen. Aus Sicht der Quelle können sie grundsätzlich in zwei Kategorien unterteilt werden: Senden vom lokalen Computer und Senden von einem externen E-Mail-Dienstanbieter. Um den Prozess des E-Mail-Versands zu verstehen, stellen wir zunächst einige verwandte Konzepte vor.
  5. Verwandte Konzepte

    Die meisten Menschen, die mit dem Internet zu tun haben, haben Erfahrung im Umgang mit E-Mails, sind jedoch im Wesentlichen auf die Konzepte E-Mail-Client, Webseite und Anbieter beschränkt. Wenn Sie als Entwickler die folgenden Konzepte in diesem Abschnitt verstehen, können Sie die Details der E-Mail-Kommunikation besser beherrschen.

MUA

: Mail-Benutzeragent. Benutzeragent ist ein Wort, das in der Entwicklung häufig vorkommt. Es bezieht sich hauptsächlich auf ein Tool, das

menschliche Absichten versteht und im Namen des Benutzers Ressourcen vom Ressourcenanbieter anfordert

. Beispielsweise ist der Browser der am häufigsten verwendete Benutzeragent. Er sendet eine Anfrage im HTTP/HTTPS-Protokollformat an den Webserver, analysiert die Antwort und stellt sie dem Benutzer zur Verfügung. E-Mail-Benutzeragenten sind üblicherweise Tools wie Foxmail und Outlook. Nachdem Benutzer E-Mails geschrieben haben, kapseln sie den E-Mail-Inhalt entsprechend dem Format und kommunizieren mit dem Mailserver.

MTA

: Mail Transfer Agent, ein Programm, das Benutzern beim Senden und Empfangen von E-Mails hilft. Der häufig erwähnte Mailserver bezieht sich auf die MTA-Open-Source-Programme, darunter Sendmail, Postfix, QMail usw.

MRA: Mail Retrieval Agent, ein Mail-Sammlungsagent, ruft die E-Mails des Benutzers lokal vom Mailserver ab. E-Mail-Clients sind gängige MRAs.

SMTP: Simple Mail Transfer Protocol, Simple Mail Transfer Protocol. Benutzer, Mailserver und Mailserver verwenden alle dieses Protokoll, um E-Mails untereinander zu übertragen (Standard ist Klartext, und SSLTLS-Verschlüsselung kann verwendet werden).

POP3/IMAP: Post Office Protocol Version 3/Internet Message Access Protocol, Post Office Protocol Version 3 oder Network Information Access Protocol, das Protokoll, das der Client verwendet, um E-Mails vom Server abzurufen .

Benutzer A (Postfach 163) sendet einen Brief an Benutzer B (Postfach Gmail). Der Vorgang, bei dem Benutzer B den Brief erhält, umfasst die oben genannten Konzepte. Der Prozess und die konzeptionelle Beziehung können durch das folgende vereinfachte Diagramm dargestellt werden:

Hinweis: Die obige Abbildung zeigt den allgemeinen Prozess des E-Mail-Versands. Andere MSA, MDA, ESMTP, SMTPS usw. können auftreten Der gesamte Vorgang hat jedoch keinen Einfluss auf das Verständnis des Sendens und Empfangens von E-Mails. Die unten genannten Abkürzungen und Konzepte werden beachtet. Bei anderen prüfen Sie bitte selbst.

PostfixDie Software zum Versenden von E-Mails unter Linux besteht hauptsächlich aus Sendmail und Postfix, die wie oben erwähnt die Rolle von MTA/MDA (Mail Delivery Agent, Mail Delivery Agent) im System spielen. Es hilft Benutzern, ausgehende E-Mails zu senden und E-Mails zu empfangen, die an das Postfach des Benutzers gesendet werden (Standardspeicherort /var/spool/mail/Benutzername).

Sendmail ist eine seit langem etablierte E-Mail-Software mit einem sehr hohen Ruf. Aber Wietse (Wietse Zweitze Venema) war damit nicht zufrieden, also hat er sich Postfix ausgedacht. Der Postfix-Befehl ist (fast) kompatibel mit Sendmail, aber effizienter und sicherer (der Ursprung des Suffix-Fixes). Er ist derzeit die Standardsoftware zum Senden und Empfangen von E-Mails für die meisten Linux-Distributionen. Es wird empfohlen, Postfix anstelle von Sendmail zu verwenden. Vor vielen Jahren gab es in diesem Blog einen Artikel über die Konfiguration von sendmail. Ich war damals jung und unwissend, also wollte ich mir die Zeit nehmen, diesen Artikel zu überarbeiten.

Die Hauptkonfigurationsdatei von Postfix ist /etc/postfix/main.cf. Die Konfigurationsdatei ist sehr gut kommentiert und die Optionen sind grundsätzlich selbsterklärend. Die wichtigsten Konfigurationen sind: myhostname, myorigin, inet_interfaces, inet_protocols und mydestination (wenn Sie Briefe von externen Netzwerken erhalten möchten). Es ist zu beachten, dass, wenn inet_interfaces als localhost konfiguriert ist, der Wert von inet_protocols ipv4 sein sollte, andernfalls kann eine Fehlermeldung ähnlich der von postfix: fatal: parameter inet_interfaces: no local interface found for ::1 erscheinen.

Mehrere gängige Postfix-Befehle im Zusammenhang mit E-Mails sind:

  1. mail oder mailx, um E-Mails zu senden. tlanyanDer Benutzer sendet eine E-Mail an root: mail -s "Greetings" root@localhost -r tlanyan@localhost, gibt dann A nice day! in das Terminal ein, drückt dann die Eingabetaste, drückt ctrl+D, um die Textbearbeitung zu beenden, und die E-Mail wurde gesendet. Melden Sie sich beim root-Konto an und Sie werden darüber informiert, dass in /var/spool/mail/root neue E-Mails vorhanden sind. Verwenden Sie tail oder andere Befehle, um detaillierte Informationen zur E-Mail anzuzeigen.

  2. postquque, überprüfen Sie die E-Mail-Versandwarteschlange. postqueue -p kann den Befehl sendmail in mailq ersetzen und postqueue -f aktualisiert die Warteschlange (erzwingt einen Versuch, Nachrichten in der Warteschlange zu senden).

  3. postcat um die Informationen zu nicht gesendeten E-Mails anzuzeigen. Beispielsweise kann postcat -q xxxx (xxxx ist die nicht gesendete Warteschlangen-ID, die von postqueue oder mailq angezeigt wird) die detaillierten Informationen der E-Mail anzeigen, und postcat -b -q xxxxx kann nur den Text der E-Mail anzeigen.

  4. postsuper, ein E-Mail-Verwaltungsprogramm, das nur von Superuser verwendet werden kann. postsuper -d xxxx, löschen Sie die E-Mail mit der Warteschlangen-ID xxxxx postsuper -h xxxxx, unterbrechen Sie den Versand der E-Mail mit der Warteschlangen-ID xxxx usw.

Die obige Einführung reicht im Grunde für den E-Mail-Versand aus. Beachten Sie, dass die vom Mail-Befehl gesendete E-Mail nur zugestellt werden kann, wenn postfix ausgeführt wird (ps aux | grep postfix | grep -v grep-Ausgabe ist nicht leer).

Mit Postfix können Sie nach der Konfiguration E-Mails extern senden und vom externen Netzwerk gesendete E-Mails empfangen, dies ist jedoch auf Befehlszeilenvorgänge beschränkt. Wenn Sie Clients wie Foxmail zum Senden und Empfangen von E-Mails verwenden möchten, müssen Sie dafür sorgen, dass der Server das POP3/IMAP-Protokoll unterstützt. Der Open-Source-Taubenschlag kann diese Funktion erreichen. Dovecot dient eher zum Empfangen als zum Versenden von E-Mails. Das Verständnis ist für die Entwicklung wenig hilfreich. Wenn Sie ein vollständiges E-Mail-System aufbauen möchten (einschließlich Webseitenunterstützung, Spam-Filterung, Virenerkennung, Übertragungsverschlüsselung usw.), wird empfohlen, auf das inländische Open-Source-EwoMail zu verweisen oder es zu verwenden.

Wie hilfreich ist es, Postfix für den E-Mail-Versand während der Entwicklung zu kennen? Ehrlich gesagt, wenig Hilfe. Der Grund dafür ist, dass große Cloud-Server-Hersteller Port 25 blockiert haben, um die Verbreitung von Spam zu verhindern (Google Cloud hat sogar Port 465 blockiert). Es ist möglich, dass Amazon Cloud über eine Anwendung freigegeben wird (es gibt jedoch Raten- und Tageskontingentgrenzen), und andere Anbieter erlauben Ihnen fast nie, Ihren eigenen Domainnamen zu verwenden, um E-Mails direkt von diesem Computer aus zu senden. In der Branche ist es nahezu gängige Praxis, Port 25 zu blockieren und einen E-Mail-Dienst eines Drittanbieters zu nutzen.

Kluge Leute denken vielleicht, dass die Verwendung von verschlüsseltem Port 465 (basierend auf SMTPS, SMTP über SSL-Protokoll) oder Port 587 (SMTP über STARTTLS-Protokoll) zum Senden von E-Mails Einschränkungen umgehen kann? Alibaba Cloud/Tencent Cloud und andere Hersteller blockieren den Port 465 nicht. Sie können diesen Port zum Versenden von E-Mails ohne Antrag verwenden. Beachten Sie jedoch, dass 465- und 587-Ports für die Kommunikation zwischen dem Client und dem Mailserver und 25-Port für die Kommunikation zwischen Mailservern verwendet werden. Sie können über Port 465 eine Verbindung zum Gmail-Postfach herstellen, um E-Mails extern zu senden. Sie können jedoch nicht zulassen, dass Postfix Port 465 verwendet, um E-Mails an den Hotmail-Mailserver zuzustellen.

Zusammenfassend lässt sich sagen, dass sendmail/postfix als Mailserver-Software vor der Verbreitung von Spam und betrügerischen E-Mails einen großen Beitrag für die Branche geleistet hat. Aufgrund der Beliebtheit von Cloud-Servern ist es fast nicht möglich, E-Mails mit Domänennamen zu versenden, die auf den lokalen Computer verweisen. Sendmail/Postfix ist außer für den Versand von Erinnerungs-E-Mails innerhalb des lokalen Computers von geringem Nutzen. Um E-Mails extern zu versenden, müssen Sie entweder einen eigenen Computerraum einrichten oder ein E-Mail-System eines Drittanbieters verwenden. PHPs Mail-Funktion

Als PHP-Entwickler ist es immer noch nützlich, sendmail/postfix zu verstehen.

Die Funktion verwendet standardmäßig sendmail/postfix zum Versenden von E-Mails. Wenn Sie die entsprechende Konfiguration verstehen, wissen Sie, warum sie funktionieren kann/warum sie nicht funktionieren kann.

mail

PHP-Rezension: E-Mails versendenUm es einfach auszudrücken: Damit PHPs eigene Mail-Funktion ordnungsgemäß funktioniert, müssen Sie Folgendes tun:

    Beantragen Sie einen Domänennamen, legen Sie MX-Einträge in der DNS-Auflösung fest und senden Sie E-Mails an diesen Computer (E-Mails, die an nicht legale Hosts (FQDN, vollständig qualifizierter Domänenname) gesendet werden, werden direkt als Spam verworfen). >
  1. Sendmail/Postfix installieren, die Software konfigurieren und ausführen
  2. Firewall, Sicherheitsgruppe und Freigabeports konfigurieren.

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

PHP发送邮件

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

PHP发送邮件也可以很简单,推荐方式就是使用Swift MailerPHPMailer等类库。引入这些类库后,注册第三方邮箱(比如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);

老板再也不用担心发送邮件收不到了,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中传值与传引用的区别

Das obige ist der detaillierte Inhalt vonPHP-Rezension: E-Mails versenden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn