PHP_PHP チュートリアルでソケットを使用してメールを送信する
筆者が申請したいくつかのPHPホームページスペースの中で、メール機能を提供できるスペースは多くありません
mail()関数を呼び出すと必ず消えてしまいます。
それ以上は何もありません。しかし、オンライン生活における電子メールの役割はますます大きくなっており、これ以上は話したくありませんが、ホームページ スペースが mail() の送信をサポートしていない場合はどうすればよいでしょうか。ソケット経由でメールを実装することも考えました
送信しますが、残念ながら私は PHP を使用したソケット プログラミングに慣れていません。また、電子メールを送信するには SMTP プロトコルを使用する必要があり、大量の英語を読む必要があるため、
これまで一度も勉強したことがありません。ついにある日、ソケット プログラミングを使用して電子メールを送信することに関する記事を見つけました。宝物のようにコピーさせていただきました
これをダウンロードして、誰でも使用できる PHP で利用できるクラスに変換します。元の記事は単なる簡単な例であり、もう 1 つあります
多くの実験と修正を経て、最終的にソケットを直接使用して指定されたメールボックスにメールを送信するクラス (
など) に変更しました。
前回の MIME 送信の記事と組み合わせると、mail() 関数をサポートしていない Web サイトでもメールを送信できます。髪のせい
メール送信の処理には時間がかかり、mail()の処理機構と全く同じではないため速度は遅くなりますが、メール送信の問題は解決できます
メールを送信する機能は緊急に必要ですが、同時にソケットプログラミングのためのphpの使い方も学ぶことができます。以下にこのクラスの実装原理を紹介します
あわせてSMTPに関する基礎知識も解説します。
ソケットプログラミングの紹介
私は TCP/IP プログラミングの専門家ではないので、ここでは私の理解と経験を共有するだけであることを皆さんに宣言したいと思います。
fsockopen 関数を使用してインターネット接続を開きます。 関数構文形式:
int fsockopen(string ホスト名, int ポート, int [errno], string [errstr], int [タイムアウト]);
パラメータの意味については説明する必要はないと思います。ここでは SMTP プロトコルが使用されているため、ポート番号は 25 です。接続が正常に開かれると、
が返されます。
ファイル ハンドルのように使用できるソケット ハンドル。利用可能な操作は fputs()、fgets()、feof()、fclose() です
待って。
とても簡単な紹介は以上です。
SMTPの基本
TCP/IPに基づくインターネットプロトコルの一般的なコマンド形式はリクエスト/レスポンス方式で実装されており、すべてテキスト情報が使用されるため、
対処が少し楽になります。 SMTP は Simple Mail Transfer Protocol の略称で、クライアントがサーバーに電子メールを送信できるようにします。それで
以下で説明するコマンドは、クライアントがサーバーに要求命令を送信することを指し、応答はサーバーからクライアントに返される情報を指します。
SMTPはコマンドヘッダーとメッセージボディの2つの部分に分かれています。コマンドヘッダーは主にクライアントとサーバー間の接続、検証などを完了します。プロセス全体は複数のライフで構成されています
注文構成。各コマンドがサーバーに送信されると、サーバーは応答情報 (通常は 3 桁の応答コードと応答テキスト) を返します。違う服
サーバーから返される応答コードはプロトコルに準拠していますが、応答本文はプロトコルに準拠していません。各コマンドと応答の最後には復帰文字があるため、
fputs() と fgets() を使用してコマンドと応答を処理します。 SMTP コマンドと応答メッセージは 1 行です。情報システムは弱気なのか
テキストの本文部分では、最後の終了行を別の「.」で終了する必要があります。
クライアントで一般的に使用される SMTP コマンドは次のとおりです:
HELO ホスト名: サーバーに挨拶し、使用されているマシン名をクライアントに伝えます。気軽に入力できます
MAIL FROM: sender_id: サーバーに送信者のアドレスを伝えます
RCPT TO:receiver_id:受信者のアドレスをサーバーに伝えます
データ: 手紙の内容は以下で送信され始め、
だけを含む特別な行で終わる必要があります。
RESET: 前のコマンドをキャンセルして最初からやり直します
VERIFY userid: アカウントが存在するかどうかを確認します (このコマンドはオプションであり、サーバーによってサポートされていない可能性があります)
QUIT: 接続を終了し、終了します
サーバーから返される応答情報は次のとおりです (形式: 応答コード + スペース + 説明):
220 サービス準備完了 (ソケット接続が成功すると、この情報が返されます)
221 処理
250 リクエスト電子メールアクションは正しく完了しています (この情報は、HELO、MAIL FROM、RCPT TO、QUIT コマンドが正常に実行された場合に返されます)
354 はデータの送信を開始し、 で終了します (この情報は DATA コマンドが正常に実行された場合に返され、クライアントは情報を送信する必要があります)
500 構文エラー、コマンドが認識されません
550 コマンドを実行できず、メールが無効です
552 割り込み処理: ユーザーがファイル容量を超えました
以下は単純なコマンド ヘッダー (これはソケットを開いた後に実行されます) であり、stmp.263.net に電子メールを送信したテスト結果です。
250 smtp.263.net
メール送信者: chatme@263.net
250 わかりました
RCPT 宛先: chatme@263.net
250 わかりました
データ
354 データを
で終了します。
宛先: chatme@263.net
送信者: chatme@263.net
件名: テスト
送信者: chatme@263.net
テスト
やめてください
250 OK: C46411C5097E0 としてキューに登録されました
RFC 821 は、電子メールの送受信に関する関連手順を定義しています。
RFC 822 は電子メールのコンテンツの形式を指定します。
RFC 2045-2048 は、マルチメディア電子メール コンテンツの形式を指定します。
RFC 1113、1422-1424 では、電子メールの機密性を向上させる方法について説明しています。
send_mailクラスの実装
それでは、私が作成したメール送信クラスを紹介します。上記の準備知識を踏まえて、以下のように実装していきます。
クラスのメンバー変数
var $lastmessage; // 返された最後の応答メッセージを記録します
var $lalast; //最後のアクション、文字列形式
var $welcome; //ユーザーを歓迎するために HELO の後に使用されます
var $debug; //デバッグ情報を表示するかどうか
var $smtp; //SMTP サーバー
var $port; //SMTP ポート番号
var $fp; //ソケットハンドル
このうち、$lastmessageと$lastactは、最後の応答情報と実行されたコマンドを記録するために使用され、エラーが発生したときにユーザーが使用できます。
彼ら。テストの必要性のために、$debug 変数も定義しました。その値が true の場合、実行中のプロセス中にいくつかの実行情報が表示されます。それ以外の場合は何も表示されません
任意の出力。 $fp は、開いたソケット ハンドルを保存するために使用されます。
-------------------------------------------------- ---------------------------------
関数 send_mail($smtp, $welcome="", $debug=false)
{
if(empty($smtp)) die("SMTP を NULL にすることはできません!");
$this->smtp=$smtp;
if(空($welcome))
{
$this->welcome=gethostbyaddr("localhost");
}
それ以外は
$this->ようこそ=$ようこそ
$this->debug=$デバッグ
$this->lastmessage="";
$this->lastact="";
$this->ポート="25";
}
-------------------------------------------------- ---------------------------------
このコンストラクターは主にいくつかの初期値の決定と設定を完了します。 $welcome は、サーバーにユーザーの名前を伝えるために HELO ディレクティブで使用されます。
HELO 命令にはマシン名が必要ですが、マシン名がなくても使用できます。ユーザーが $welcome を指定しない場合、ローカル マシン名が自動的に検索されます。
デバッグ情報を表示
------------------------------------------------- ---------------------------------
1 関数 show_debug($message, $inout)
2 {
3 if ($this->デバッグ)
5 if($inout=="in") //レスポンス情報
6 {
7 $m=
他9個
10
$m=>>
11 if(!ereg("
$"、$message))
12 $message .= "
";
13 $メッセージ=nl2br($メッセージ);
14 echo "${m}${メッセージ}";
15 }
16 }
-------------------------------------------------- ----------------------------------
http://www.bkjia.com/PHPjc/486554.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/486554.html
技術記事
筆者が申請したいくつかの PHP ホームページ スペースの中で、メール機能を提供できるものは多くありません。 mail() 関数を呼び出した後は、常に何もする必要がありません。しかし、オンライン生活における電子メールの役割...

PHPは、特にWeb開発の分野で、最新のプログラミングで強力で広く使用されているツールのままです。 1)PHPは使いやすく、データベースとシームレスに統合されており、多くの開発者にとって最初の選択肢です。 2)動的コンテンツ生成とオブジェクト指向プログラミングをサポートし、Webサイトを迅速に作成および保守するのに適しています。 3)PHPのパフォーマンスは、データベースクエリをキャッシュおよび最適化することで改善でき、その広範なコミュニティと豊富なエコシステムにより、今日のテクノロジースタックでは依然として重要になります。

PHPでは、弱い参照クラスを通じて弱い参照が実装され、ガベージコレクターがオブジェクトの回収を妨げません。弱い参照は、キャッシュシステムやイベントリスナーなどのシナリオに適しています。オブジェクトの生存を保証することはできず、ごみ収集が遅れる可能性があることに注意する必要があります。

\ _ \ _ Invokeメソッドを使用すると、オブジェクトを関数のように呼び出すことができます。 1。オブジェクトを呼び出すことができるように\ _ \ _呼び出しメソッドを定義します。 2。$ obj(...)構文を使用すると、PHPは\ _ \ _ Invokeメソッドを実行します。 3。ロギングや計算機、コードの柔軟性の向上、読みやすさなどのシナリオに適しています。

繊維はPhp8.1で導入され、同時処理機能が改善されました。 1)繊維は、コルーチンと同様の軽量の並行性モデルです。 2)開発者がタスクの実行フローを手動で制御できるようにし、I/O集約型タスクの処理に適しています。 3)繊維を使用すると、より効率的で応答性の高いコードを書き込むことができます。

PHPコミュニティは、開発者の成長を支援するための豊富なリソースとサポートを提供します。 1)リソースには、公式のドキュメント、チュートリアル、ブログ、LaravelやSymfonyなどのオープンソースプロジェクトが含まれます。 2)StackOverFlow、Reddit、およびSlackチャネルを通じてサポートを取得できます。 3)開発動向は、RFCに従うことで学ぶことができます。 4)コミュニティへの統合は、積極的な参加、コード共有への貢献、および学習共有への貢献を通じて達成できます。

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHPは、シンプルな構文と高い実行効率を備えたWeb開発に適しています。 2。Pythonは、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。

PHPは死にかけていませんが、常に適応して進化しています。 1)PHPは、1994年以来、新しいテクノロジーの傾向に適応するために複数のバージョンの反復を受けています。 2)現在、電子商取引、コンテンツ管理システム、その他の分野で広く使用されています。 3)PHP8は、パフォーマンスと近代化を改善するために、JITコンパイラおよびその他の機能を導入します。 4)Opcacheを使用してPSR-12標準に従って、パフォーマンスとコードの品質を最適化します。

PHPの将来は、新しいテクノロジーの傾向に適応し、革新的な機能を導入することで達成されます。1)クラウドコンピューティング、コンテナ化、マイクロサービスアーキテクチャに適応し、DockerとKubernetesをサポートします。 2)パフォーマンスとデータ処理の効率を改善するために、JITコンパイラと列挙タイプを導入します。 3)パフォーマンスを継続的に最適化し、ベストプラクティスを促進します。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

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

WebStorm Mac版
便利なJavaScript開発ツール

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。
