この記事では、PHP でメールを送信するための関連する知識ポイントと詳細な使用法をまとめています。必要な友人はそこから学ぶことができます。
電子メールの送信は、ユーザーのアクティブ化やパスワードの取得などの Web サイトの一般的な機能です。多くの場合、ユーザーのメールボックスに電子メールを送信する必要があります。この記事では、まず電子メールの送信に関連する概念を確認し、次に PHP を使用して電子メールを送信するためのサンプル コードを示します。
テキスト メッセージを送信する
テキスト メッセージは機能的には電子メールに似ており、通知やセキュリティ検証によく使用されます。テキスト メッセージを送信するには (基本的に) プロバイダーに料金を支払う必要があるため、SMS プロバイダーには、ユーザーがアクセスできる明確なドキュメントと使いやすいインターフェイスを提供するインセンティブがあります。一般的に、テキスト メッセージを送信する人は次のとおりです。
Alibaba Big Fish、Aggregated Data などのサプライヤーを探しています
アカウントを登録し、appid と appkey を取得します
テンプレートを申請します。
関連概念
インターネットに触れる人のほとんどは電子メールの使用経験がありますが、基本的に電子メール クライアント、Web ページ、プロバイダーの概念に限定されています。開発者として、このセクションの次の概念を理解すると、電子メール通信の詳細をよりよく習得できるようになります。 MUA: メール ユーザー エージェント、メール ユーザー エージェント。ユーザーエージェントとは開発においてよく使われる言葉で、主に人間の意図を理解し、ユーザーに代わってリソースを要求するツールを指します。たとえば、ブラウザは最も一般的に使用されるユーザー エージェントであり、HTTP/HTTPS プロトコル形式で Web サーバーに要求を送信し、応答を解析してユーザーに表示します。電子メール ユーザー エージェントは、一般に Foxmail や Outlook などのツールです。ユーザーは電子メールを作成した後、形式に従って電子メールの内容をカプセル化し、メール サーバーと通信します。 MTA: Mail Transfer Agent、ユーザーの電子メールの送受信を支援するプログラム。よく言われるメール サーバーとは、sendmail、postfix、QMail などのオープン ソース プログラムを指します。 MRA: メール取得エージェント (メール収集エージェント) は、ローカルのメール サーバーからユーザーのメールを取得します。メール クライアントは一般的な MRA です。 SMTP: シンプルメール転送プロトコル、シンプルメール転送プロトコル。ユーザー、メール サーバー、およびメール サーバーはすべて、このプロトコルを使用して相互にメールを転送します (デフォルトはプレーン テキストであり、SSLTLS 暗号化を使用できます)。 POP3/IMAP: ポスト オフィス プロトコル バージョン 3/インターネット メッセージ アクセス プロトコル、ポスト オフィス プロトコル バージョン 3 またはネットワーク情報取得プロトコル。クライアントがサーバーからメールを取得するために使用するプロトコル。 ユーザー A (163 メールボックス) がユーザー B (Gmail メールボックス) にレターを送信します。ユーザー B がレターを受け取るプロセスには、上記の概念が含まれます。プロセスと概念的な関係は、次の簡略化された図で表すことができます:用户A --发送邮件--> 用户B M|S M|I U|M R|M A|T A|A |P |P v v MTA(163)--转发(SMTP)->MTA(gmail)注: 上の図は、電子メールを送信する一般的なプロセスを示しています。他の MSA、MDA、ESMTP、SMTPS などがプロセス全体に現れる場合があります。メールの送受信には影響しませんのでご了承ください。以下に記載する略語や概念については別途記載しますので、ご自身でご確認ください。
postfix
Linux上でメールを送信するためのソフトウェアは主にsendmailとpostfixであり、システム内で上記の概念におけるMTA/MDA(Mail Delivery Agent、メール配信エージェント)の役割を果たします。これは、ユーザーがアウトバウンド電子メールを送信したり、ユーザーのメールボックス (デフォルトの場所 /var/spool/mail/username) に配信された電子メールを受信したりするのに役立ちます。 sendmailは非常に評判の高い老舗のメールソフトです。しかし、Wietse (Wietse Zweitze Venema) はこれに満足できず、後置を考え出しました。 postfix コマンドは、sendmail と (ほぼ) 互換性がありますが、より効率的で安全です (サフィックス修正の起源)。現在、ほとんどの Linux ディストリビューションのデフォルトの電子メール送受信ソフトウェアです。sendmail の代わりに postfix を使用することをお勧めします。何年も前にこのブログに sendmail の設定方法に関する記事がありました。当時私は若くて無知だったので、時間をかけてその記事を改訂する予定でした)。 postfix のメイン設定ファイルは /etc/postfix/main.cf です。設定ファイルには非常に詳しくコメントが付けられており、オプションは基本的に一目瞭然です。最も重要な構成は、myhostname、myorigin、inet_interfaces、inet_protocols、および mydestination (外部ネットワークからレターを受信する予定の場合) です。 inet_interfaces が localhost として構成されている場合、inet_protocols の値は ipv4 である必要があることに注意してください。そうでない場合は、「postfix: Fatal:parameter inet_interfaces: no local interface found for ::1」のようなエラー メッセージが表示される場合があります。 メールに関連するいくつかの一般的な後置コマンドは次のとおりです: mail または mailx、メールを送信します。 tlanyan ユーザーは root に電子メールを送信します: mail -s "Greetings" root@localhost -r tlanyan@localhost、ターミナルに「A nice day!」と入力し、Enter キーを押してテキスト編集を終了し、電子メールを送信します。送られた。 root アカウントにログインすると、/var/spool/mail/root に新しい電子メールがあることが示されます。電子メールの詳細を表示するには、tail または他のコマンドを使用します。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"
然后准备好邮件内容(以文本文件为例,不带附件):
$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函数原因,最后给出了使用第三方类库发送邮件的代码示例。
相关推荐:
几种PHP发送HTTP请求的方式分享
PHP は SMS メールやその他多くの実用的な PHP コード共有を送信します
以上がPHPでメール送信する際の知識ポイントを詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

PHPは動的なWebサイトを構築するために使用され、そのコア関数には次のものが含まれます。1。データベースに接続することにより、動的コンテンツを生成し、リアルタイムでWebページを生成します。 2。ユーザーのインタラクションを処理し、提出をフォームし、入力を確認し、操作に応答します。 3.セッションとユーザー認証を管理して、パーソナライズされたエクスペリエンスを提供します。 4.パフォーマンスを最適化し、ベストプラクティスに従って、ウェブサイトの効率とセキュリティを改善します。

PHPはMySQLIおよびPDO拡張機能を使用して、データベース操作とサーバー側のロジック処理で対話し、セッション管理などの関数を介してサーバー側のロジックを処理します。 1)MySQLIまたはPDOを使用してデータベースに接続し、SQLクエリを実行します。 2)セッション管理およびその他の機能を通じて、HTTPリクエストとユーザーステータスを処理します。 3)トランザクションを使用して、データベース操作の原子性を確保します。 4)SQLインジェクションを防ぎ、例外処理とデバッグの閉鎖接続を使用します。 5)インデックスとキャッシュを通じてパフォーマンスを最適化し、読みやすいコードを書き、エラー処理を実行します。

PHPで前処理ステートメントとPDOを使用すると、SQL注入攻撃を効果的に防ぐことができます。 1)PDOを使用してデータベースに接続し、エラーモードを設定します。 2)準備方法を使用して前処理ステートメントを作成し、プレースホルダーを使用してデータを渡し、メソッドを実行します。 3)結果のクエリを処理し、コードのセキュリティとパフォーマンスを確保します。

PHPとPythonには独自の利点と短所があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1.PHPは、大規模なWebアプリケーションの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンスと機械学習の分野を支配しています。

PHPは、電子商取引、コンテンツ管理システム、API開発で広く使用されています。 1)eコマース:ショッピングカート機能と支払い処理に使用。 2)コンテンツ管理システム:動的コンテンツの生成とユーザー管理に使用されます。 3)API開発:RESTFUL API開発とAPIセキュリティに使用されます。パフォーマンスの最適化とベストプラクティスを通じて、PHPアプリケーションの効率と保守性が向上します。

PHPにより、インタラクティブなWebコンテンツを簡単に作成できます。 1)HTMLを埋め込んでコンテンツを動的に生成し、ユーザー入力またはデータベースデータに基づいてリアルタイムで表示します。 2)プロセスフォームの提出と動的出力を生成して、XSSを防ぐためにHTMLSPECIALCHARSを使用していることを確認します。 3)MySQLを使用してユーザー登録システムを作成し、Password_HashおよびPreprocessingステートメントを使用してセキュリティを強化します。これらの手法を習得すると、Web開発の効率が向上します。

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

PHPは依然として動的であり、現代のプログラミングの分野で重要な位置を占めています。 1)PHPのシンプルさと強力なコミュニティサポートにより、Web開発で広く使用されています。 2)その柔軟性と安定性により、Webフォーム、データベース操作、ファイル処理の処理において顕著になります。 3)PHPは、初心者や経験豊富な開発者に適した、常に進化し、最適化しています。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SublimeText3 中国語版
中国語版、とても使いやすい

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、
