PHP はソケットを使用して SMTP を実装し、電子メールを送信します。socketsmtp_PHP チュートリアル
php はソケットを使用して SMTP を実装して電子メールを送信します。socketsmtp
この記事では、ソケットに基づいて SMTP を実装して電子メールを送信する php の例について説明します。参考のためにみんなで共有してください。具体的な分析は次のとおりです:
php はソケットを使用して SMTP 経由で電子メールを送信します。
php の php-sockets 拡張機能を使用すると、プレーン テキストおよび HTML 形式で電子メールを送信できます。コードは次のとおりです:
コードをコピーします コードは次のとおりです:
/**
*メール送信クラス
* プレーンテキストメールと HTML 形式メールの送信をサポートします
* @example
* $config = 配列(
* "from" => "*****",
* "to" => "***",
* 「件名」 => 「テスト」、
* "body" => "テスト",
* "ユーザー名" => "***",
* "パスワード" => "****",
* "isHTML" => true
* );
*
* $mail = 新しい MySendMail();
*
* $mail->setServer("smtp.126.com");
*
* $mail->setMailInfo($config);
* if(!$mail->sendMail()) {
* echo $mail->error();
* 1 を返します;
* }
*/
クラス MySendMail {
/**
* @var メール転送エージェントのユーザー名
* @アクセス非公開
*/
プライベート $_userName;
/**
* @var メール転送エージェントのパスワード
* @アクセス非公開
*/
プライベート $_パスワード;
/**
* @var メール転送プロキシサーバーアドレス
* @access protected
*/
保護された $_sendServer;
/**
* @var メール転送プロキシサーバーのポート
* @access protected
*/
保護された $_port=25;
/**
* @var 送信者
* @access protected
*/
$_from から保護されました;
/**
* @var 受信者
* @access protected
*/
保護された $_to;
/**
* @var テーマ
* @access protected
*/
保護された $_subject;
/**
* @var メール本文
* @access protected
*/
保護された $_body;
/**
* @var HTML形式のメールですか?
* @access protected
*/
protected $_isHTML=false;
/**
* @var ソケットリソース
* @access protected
*/
保護された $_socket;
/**
* @var エラーメッセージ
* @access protected
*/
保護された $_errorMessage;
public function __construct($from="", $to="", $subject="", $body="", $server="", $username="", $password="",$isHTML=" ", $port="") {
if(!empty($from)){
$this->_from = $from;
}
if(!empty($to)){
$this->_to = $to;
}
if(!empty($subject)){
$this->_subject = $subject;
}
if(!empty($body)){
$this->_body = $body;
}
if(!empty($isHTML)){
$this->_isHTML = $isHTML;
}
if(!empty($server)){
$this->_sendServer = $server;
}
if(!empty($port)){
$this->_port = $port;
}
if(!empty($username)){
$this->_userName = $username;
}
if(!empty($password)){
$this->_password = $password;
}
}
/**
* メール転送エージェントを設定します
* @param string $server プロキシ サーバーの IP またはドメイン名
* @param int $port プロキシサーバーのポート、SMTP デフォルトポート 25
* @param int $localPort ローカルポート
* @return boolean
*/
パブリック関数 setServer($server, $port=25) {
if(!isset($server) || empty($server) || !is_string($server)) {
$this->_errorMessage = "最初のパラメータは無効なパラメータです";
false を返します;
}
if(!is_numeric($port)){
$this->_errorMessage = "最初の 2 つは無効なパラメータです";
false を返します;
}
$this->_sendServer = $server;
$this->_port = $port;
true を返します;
}
/**
* メールを設定します
* @アクセス公開
* @param array $config メール設定情報
* メールの送信者、受信者、件名、内容、メール転送エージェントの確認情報が含まれます
* @return boolean
*/
パブリック関数 setMailInfo($config) {
if(!is_array($config) || count($config)
$this->_errorMessage = "パラメータは必須です";
false を返します;
}
$this->_from = $config['from'];
$this->_to = $config['to'];
$this->_subject = $config['subject'];
$this->_body = $config['body'];
$this->_userName = $config['ユーザー名'];
$this->_password = $config['パスワード'];
if(isset($config['isHTML'])){
$this->_isHTML = $config['isHTML'];
}
true を返します;
}
/**
*メールを送信
* @アクセス公開
* @return boolean
*/
パブリック関数 sendMail() {
$command = $this->getCommand();
$this->socket();
foreach ($command を $value) {
if($this->sendCommand($value[0], $value[1])) {
続けます;
}
他{
false を返します;
}
}
$this->close(); //実際には、ここで閉じる必要はありません。smtp コマンド QUIT が発行された後、サーバーは接続を閉じ、ローカル ソケット リソースは自動的に解放されます。
echo 'メール OK!';
true を返します;
}
/**
* エラーメッセージを返す
* @戻り文字列
*/
パブリック関数 error(){
If(!isset($this->_errorMessage)) {
$this->_errorMessage = "";
}
return $this->_errorMessage;
}
/**
* メールコマンドに戻る
* @access protected
* @return 配列
*/
保護された関数 getCommand() {
If($this->_isHTML) {
$mail = "MIME バージョン:1.0rn";
$mail .= "Content-type:text/html;charset=utf-8rn";
$mail .= "FROM:test<" . $this->_from .
$mail .= "TO:>_to";
$mail .= "件名:" . $this->_subject ."rnrn";
$mail .= $this->_body . "rn.rn";
}
その他{
$mail = "FROM:test<" . ">rn";
$mail .= "TO:>_to";
$mail .= "件名:" . $this->_subject ."rnrn";
$mail .= $this->_body . "rn.rn";
}
$command = array(
array("HELO sendmailrn", 250),
array("AUTH LOGINrn", 334),
array(base64_encode($this->_userName) . "rn", 334),
array(base64_encode($this->_password) . "rn", 235),
array("MAIL FROM:_from . ">rn", 250),
array("RCPT TO:_to . ">rn", 250),
配列("DATArn", 354),
配列($mail, 250),
配列("QUITrn", 221)
);
return $command;
}
/**
* @access protected
* @param string $command サーバーに送信された SMTP コマンド
* @param int $code サーバーから返される応答を期待していますか?
* @param ブール値
*/
保護された関数 sendCommand($command, $code) {
echo 'コマンドを送信します:' . $command . '
';
//サーバーにコマンドを送信
試してみてください{
If(socket_write($this->_socket, $command, strlen($command))){
//读取服务器返送
$data = トリム(socket_read($this->_socket, 1024));
エコー '応答:' 。 $data 。 '
';
if($data) {
$pattern = "/^".$code."/";
if(preg_match($pattern, $data)) {
true を返します;
}
他{
$this->_errorMessage = "エラー:" 。 $data 。 "|**| コマンド:";
false を返します;
}
}
他{
$this->_errorMessage = "エラー:" 。 socket_strerror(socket_last_error());
false を返します;
}
}
他{
$this->_errorMessage = "エラー:" 。 socket_strerror(socket_last_error());
false を返します;
}
}catch(例外 $e) {
$this->_errorMessage = "エラー:" 。 $e->getMessage();
}
}
/**
* サーバーへのネットワーク接続を確立します
* @アクセス非公開
* @return boolean
*/
プライベート関数ソケット() {
if(!function_exists("socket_create")) {
$this->_errorMessage = "拡張機能 php-sockets を有効にする必要があります";
false を返します;
}
//创建ソケット资源
$this->_socket =ソケット_create(AF_INET, SOCK_STREAM, getprotobyname('tcp'));
if(!$this->_socket) {
$this->_errorMessage =ソケット_strerror(socket_last_error());
false を返します;
}
//接続服务器
if(!socket_connect($this->_socket, $this->_sendServer, $this->_port)) {
$this->_errorMessage =ソケット_strerror(socket_last_error());
false を返します;
}
socket_read($this->_socket, 1024);
true を返します;
}
/**
* ソケットを閉じる
* @アクセス非公開
* @return boolean
*/
プライベート関数 close() {
if(isset($this->_socket) && is_object($this->_socket)) {
$this->_socket->close();
true を返します;
}
$this->_errorMessage = "リソースを近づけることはできません";
false を返します;
}
}
/**************************** テスト *********************** ************/
$config = 配列(
「から」 => 「XXXXX」、
「へ」 => 「XXXXX」、
"件名" => 「テスト」、
「本体」=> "テスト",
"ユーザー名" => 「XXXXX」、
「パスワード」=> 「******」、
//"isHTML" =>本当
);
$mail = 新しい MySendMail();
$mail->setServer("smtp.126.com");
$mail->setMailInfo($config);
if(!$mail->sendMail()) {
echo $mail->error();
1 を返します;
}
ここで説明されている大家向けの php プログラムの設計が役立つことを希望します。
http://www.bkjia.com/PHPjc/963852.html

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

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

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。
