ホームページ  >  記事  >  バックエンド開発  >  php_PHP チュートリアルにおける mail() 関数と SMTP の動作原理と実践

php_PHP チュートリアルにおける mail() 関数と SMTP の動作原理と実践

WBOY
WBOYオリジナル
2016-07-13 10:30:03852ブラウズ

電子メールを送信するスクリプトは、おそらく Web サイトで見つけることができる最も一般的なスクリプトの 1 つです。これは単純ですが、プログラマーを非常にイライラさせることがあります。PHP には mail() と呼ばれるスクリプトがあります。この関数では、電子メールを送信するために受信者のアドレスとレターの本文を知る必要があるだけですが、mail() を希望どおりに実行するには、まだいくつかの難しい問題を解決する必要があります。

mail() が機能するには、PHP が接続するための SMTP サーバーが必要です。このサーバーがメール プログラムにとってどれほど重要であっても、ほとんどの人はそれがどのように機能するのかまったく知りません。この記事の他のトピックには、SMTP の秘密と、PHP を使用した電子メール送信に関するいくつかの一般的な問題の解決方法が含まれます。

アドレス リストをループして受信者に電子メールを送信します。

SMTP とは Simple Mail Transfer Protocol (Simple Mail Transfer Protocol) の略で、SMTP サーバーとはこのプロトコルを実行して電子メールを送信するコンピューターのことを指します。このプロトコルを実行するということは、実際には Sendmail や Qmail などのプログラムを実行することを指します。 Windows プラットフォームでは、Windows NT Service Pack の一部であるか、Windows 2000 に組み込まれている SMTP サービス プログラムが一般的なプログラムです。

これらが唯一の SMTP パッケージであるとは言いませんが、これらが最も一般的なものです。Web サイトがインターネット サービス プロバイダーの仮想ホスティング パッケージの一部を使用している場合、SMTP サーバー プログラムはこのコンピューターにすでにインストールされているはずです。あなたが ISP または屋内のコンピュータのシステム管理者である場合は、Web サーバーからのメッセージの送信を処理するために、このコンピュータに何らかの SMTP ソフトウェアがインストールされている可能性があります。

ただし、あなたが個人ユーザーで、パーソナル コンピュータ上で開発用 Web サーバー プログラムのみを実行している場合は、マシン上で SMTP ソフトウェアが実行されていない可能性があります。これは、非常に単純ですが正確な経験則です。 Windows ユーザーで SMTP サーバーという言葉を見たことがない場合は、このプログラムを実行していません。SMTP サーバー プログラムがない場合は、SMTP サーバー プログラムをインストール、構成、保守するという 2 つのオプションがあります (SMTP サーバー プログラムがわからない場合)。その場合は、この方法を使用するか、既存の SMTP サーバーを使用することはお勧めしません。

「現在サーバーが稼働していない場合、どうすればサーバーを使用できますか?」 コンピューターがダイヤルアップ接続 (または DSL またはケーブル) 経由でインターネットに接続されている場合は、ISP の外部サーバーを使用できます。たとえば、開発用コンピュータが Windows 98 システムで、EarthLink 経由でインターネットに接続するために 56kbps モデムを使用している場合は、送信用の SMTP サーバーとして mail.earthlink.net を使用できます。 mail サーバーがどのようなメール クライアント (Eudora、Outlook、NetscapeMail など) を使用していても、SMTP サーバーを使用する PHP コードと同じプロセスになります。その秘訣は、PHP に真実を少しだけ知らせることです。

php.ini 管理構成ファイルには、mail() 関数が適切に実行できるように設定する必要があるエントリがいくつかあります。それらを変更する前に、phpinfo() 関数を使用することができます。システムの現在の構成を表示するファイルを作成します。このファイルには次のものが含まれます。

このファイルを保存し、Web サーバーのファイル ルート ディレクトリに置き、ブラウザからアクセスすると、設定を示す美しい形式のメッセージが表示されます。表示される項目は次のとおりです。

SMTP

sendmail_from

sendmail_path

Windows を使用していない場合、考慮する必要があるのは sendmail_path コマンドだけです。Windows を使用している場合は、最後の 2 つのコマンドを確認する必要があります。

Linux または Unix バリアントを使用している場合、sendmail_path は次のようになります:

sendmail_path = /usr/sbin/sendmail

または Qmail を使用する場合:

sendmail_path = /var/qmail/bin/sendmail

このコマンドでは、以下に示すように、キュー バッファリング オプションを示す構成パラメーターを設定したり、Return-Path ヘッダーを明示的に設定したりすることもできます。

sendmail_path = /usr/sbin/sendmail -t-fyou@yourdomain.com

Windows 以外のユーザーが行う必要があるのはこれだけです。Windows を使用している場合は、SMTP と sendmail_from の値も確認する必要があります。 sendmail_from コマンド名。Windows では Sendmail というプログラムを使用しませんが、怖がらせる必要はありません。

phpinfo() によって表示される結果で、SMTP と sendmail_from のデフォルト値を確認します。これらは空白であるか、ランダムな値が含まれています。

それらを意味のある値に変更する必要があります。

このコンピュータで SMTP サービス プログラムを実行する場合は、php.ini ファイルのエントリは次のようになります。

SMTP = ローカルホスト

ただし、ISP (この場合は EarthLink) の送信メール サーバーを使用する場合、php.ini 内のメールは次のようになります。

SMTP = mail.earthlink.net

コンピューターは 2 つのエントリを区別しないため、ドメイン名の代わりに IP アドレスを使用することもできます。

2 番目の設定ディレクティブは sendmail_from で、From ヘッダーの電子メール アドレスに設定する必要があります。これはスクリプト内で変更できますが、通常はデフォルト値として使用されます。この設定ディレクティブの例は、youraddress@yourdomain.com です。はあなた自身のメールアドレスを指します。

sendmail_from =yuraddress@yourdomain.com

これらの設定変更を行った後、Web サーバーを再起動し、phpinfo() 関数を使用して変更を確認します。これらのタスクが完了したら、PHP を使用して電子メールを送信できます。

mail() 関数は非常に単純です: パラメーターは 5 つだけで、そのうちの 2 つはオプションです:

受取人の住所

テーマ

手紙の内容

その他のファイル情報ヘッダー (オプション)

SMTP サービス プログラムのその他の構成オプション (オプション)

追加のヘッダー パラメーターは、CC、BCC、Reply-To、または SMTP プロトコルに従うその他の機能などの電子メール機能を制御します。この例では、From ヘッダーと Reply-To ヘッダーのみを使用します。

Windows 以外のシステムを使用していて、私にメールを送信したい場合、プログラム コードは次のようになります:

$to= "julie@thickbook.com";

$subject = "ZDNet 開発者記事";

$msg = "SMTP サーバーについて完全に理解しました!";

$headers = "From:me@mycompany.comnReply-To:someoneelse@mycompany.com";

$config = "-fwebmaster@mycompany.com";

mail("$to", "$subject", "$msg", "$headers", "$config");

「終わった!」というエコー;

?>

Windows ベースの SMTP サービスを使用している場合、5 番目のパラメータを使用する必要はなく、追加のヘッダー情報パラメータ (つまり 4 番目のパラメータ) では、それらを個別に記述する必要があります。代わりに rn を使用してください。したがって、Windows ベースの SMTP サービス経由で送信される同じメールは次のようになります:

$to = "julie@thickbook.com";

$subject = "ZDNet 開発者記事";

$msg = "SMTP サーバーについて完全に理解しました!";

$headers = "From:me@mycompany.comrnReply-To:someoneelse@mycompany.com";

mail("$to", "$subject", "$msg", "$headers");

「終わった!」というエコー;

?>

スクリプト内の echo ステートメントにより、スクリプトの完了時に Web ブラウザーにメッセージが表示されます。echo ステートメントを記述しないと、ブラウザーに出力を送信できないため、「空のファイル」ダイアログ ボックスが表示されます。側面

mail() 関数は、指定された SMTP サーバーに接続できる限り true を返しますが、これはメールが受信者に正常に到達したことを意味するものではありません。 SMTP サーバーのエラーコード。

mail() 関数は false 値を返し、「行 x で接続できません」または「行 x で不明なエラーが発生しました」という警告を表示する場合があります。これら 2 つのメッセージのいずれかが表示された場合は、SMTP 値を確認する必要があります。これらのメッセージの原因としては、SMTP サーバーがダウンしているか、PHP が接続できないかの 2 つの可能性があります。 このスクリプトは、これらのパラメーターにハードコードされた値を使用しています。 、、、、、、、、、、、、、、、、、、、Bangke Home の

プログラミングチュートリアル

のコラムに従ってください。

http://www.bkjia.com/PHPjc/767406.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/767406.html

技術記事

電子メールを送信するスクリプトは、おそらく Web サイトで見つけることができる最も一般的なスクリプトの 1 つです。これは単純ですが、PHP には...

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