ホームページ  >  記事  >  バックエンド開発  >  PHPメールの送信方法を詳しく解説

PHPメールの送信方法を詳しく解説

php中世界最好的语言
php中世界最好的语言オリジナル
2018-05-16 11:07:032297ブラウズ

今回は、PHPのメール送信の使い方と、PHPメール送信の注意点について、実際の事例を交えながら詳しく解説していきます。

電子メールの送信は、ユーザーのアクティブ化やパスワードの取得などの Web サイトの一般的な機能です。多くの場合、ユーザーのメールボックスに電子メールを送信する必要があります。この記事では、まず電子メールの送信に関連する概念を確認し、次に PHP を使用して電子メールを送信するためのサンプル コードを示します。

テキスト メッセージを送信する

テキスト メッセージは機能的には電子メールに似ており、通知やセキュリティ検証によく使用されます。テキスト メッセージを送信するには (基本的に) プロバイダーに料金を支払う必要があるため、SMS プロバイダーには、ユーザーがアクセスできる明確なドキュメントと使いやすいインターフェイスを提供するインセンティブがあります。一般的に、テキスト メッセージを送信する人は次のとおりです。

Alibaba Big Fish、Aggregated Data などのサプライヤーを探しています。

アカウントを登録し、appid と appkey を取得します。

インターフェイスを表示します。ドキュメントを作成し、アプリケーションに統合します。

API を呼び出してテキスト メッセージを送信します。

プロセスはシンプルでわかりやすく、アクセスして使用するのも非常に便利です。基本的には1〜2時間以内に接続してテストできます。ユーザーは、通信プロセス中にメッセージのエンコードやアドレス指定などの詳細を考慮する必要がありません。欠点は、料金を支払わなければならないことです。

電子メールは通常無料のサービスですが、関連するサポートが十分に整備されていないことも理解する必要があります。さまざまな

プログラミング言語

で電子メールを送信するためのクラス ライブラリが多数あり、ソースの観点から、ローカル マシンからの送信とサードパーティの電子メール サービス プロバイダーからの送信の 2 つのカテゴリに基本的に分類できます。電子メールの送信プロセスを理解するために、まず関連する概念をいくつか紹介しましょう。

関連概念

インターネットに触れる人のほとんどは電子メールの使用経験がありますが、基本的に電子メール クライアント、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 は電子メールを送信するのではなく受信する役割を果たします。それを理解することは、開発にはあまり役立ちません。完全な電子メール システム (Web ページのサポート、スパム フィルタリング、ウイルス検出、送信暗号化などを含む) を構築したい場合は、国産のオープンソース EwoMail を参照または使用することをお勧めします。

開発中に電子メールを送信する際に postfix を知ることはどの程度役立ちますか?正直に言うと、ほとんど役に立ちません。その理由は、スパムの蔓延を防ぐために、大手クラウドサーバーメーカーがポート25をブロックしているためです(Google Cloudはポート465さえブロックしています)。 Amazon Cloud はアプリケーションを通じてリリースすることができます (ただし、レートと日次割り当て制限があります)。他のベンダーでは、このマシンから直接電子メールを送信するために独自のドメイン名を使用することはほとんど許可されません。業界では、ポート 25 をブロックしてサードパーティの電子メール サービスを使用することがほぼ標準的な方法となっています。

賢い人は、暗号化されたポート 465 (SMTPS、SMTP over SSL プロトコルに基づく) またはポート 587 (SMTP over STARTTLS プロトコル) を使用して電子メールを送信すれば制限を回避できると考えるかもしれません。 Alibaba Cloud/Tencent Cloud およびその他のメーカーは、ポート 465 をブロックしません。このポートを使用して、申請せずにメールを送信できます。ただし、ポート 465 と 587 はクライアントとメール サーバー間の通信に使用されるポートであり、ポート 25 はメール サーバー間の通信に使用されることに注意してください。ポート 465 経由で Gmail メールボックスに接続して電子メールを外部に送信することはできますが、Postfix にポート 465 を使用して電子メールを Hotmail メール サーバーに配信させることはできません。

要約すると、sendmail/postfix は、スパムや詐欺メールが蔓延する前のメール サーバー ソフトウェアとして、業界に多大な貢献をしてきました。クラウド サーバーの普及により、ローカル マシンを指すドメイン名で電子メールを送信することはほとんど不可能になり、Sendmail/postfix はローカル マシン内でリマインダー メールを送信する以外にはほとんど役に立ちません。外部に電子メールを送信するには、独自のコンピューター室を構築するか、サードパーティの電子メール システムを使用する必要があります。

PHP のメール関数

PHP 開発者として、sendmail/postfix を理解することは依然として役立ちます。メール機能は、デフォルトで sendmail/postfix を使用して電子メールを送信します。関連する設定を理解していれば、機能する理由と機能しない理由がわかります。

簡単に言えば、PHP の組み込みメール機能を適切に動作させるには、次のことを行う必要があります:

ドメイン名を申請し、DNS 解決で MX レコードを設定し、ローカル マシン (非合法なホスト) をポイントします。 (FQDN、完全修飾ドメイン名)) 送信されたすべての電子メールはスパムとして直接破棄されます);

sendmail/postfix をインストールし、ソフトウェアを設定して実行します。

ファイアウォール、セキュリティ グループ、およびリリース ポートを設定します。

メール機能利用の最大の障害は、低い送信効率、非オブジェクト指向の呼び出し方法、面倒な設定、クラウドサーバーメーカーによる遮断です。そのため、PHP を使い始めて以来、メール関数を直接使用したことはありません。

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使用技巧总结

以上がPHPメールの送信方法を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。