ホームページ バックエンド開発 PHPチュートリアル PHP は、HTML 形式の電子メールを送信するためのクラスの送信をサポートしています

PHP は、HTML 形式の電子メールを送信するためのクラスの送信をサポートしています

Jul 25, 2016 am 08:43 AM

  1. /**
  2. * メール送信クラス
  3. * プレーンテキストメールと HTML 形式メールの送信をサポート
  4. * @example
  5. * $config = array(
  6. * "from" => "*****",
  7. * "to" = > ; "***",
  8. * "件名" => "テスト",
  9. * "テスト",
  10. * "ユーザー名" => *",
  11. * "パスワード" => "****",
  12. * "isHTML" => true
  13. * );
  14. *
  15. * $mail = new MySendMail();
  16. *
  17. * $mail -> setServer("smtp.126.com");
  18. *
  19. * $mail->setMailInfo($config);
  20. * if(!$mail->sendMail()) {
  21. * echo $mail->error ();
  22. * 1 を返します。 }
  23. */
  24. class MySendMail{
  25. /**
  26. * @var メール転送エージェントのユーザー名
  27. * @access private
  28. */
  29. private $_userName;
  30. /**
  31. * @var メール転送エージェントのパスワード
  32. * @access private
  33. */
  34. プライベート $_password;
  35. /**
  36. * @var メール転送プロキシサーバーのアドレス
  37. * @access protected
  38. */
  39. protected $_sendServer;
  40. /**
  41. * @var メール転送プロキシサーバーのポート
  42. * @access protected
  43. */
  44. protected $_port=25;
  45. /**
  46. * @var 送信者
  47. * @access protected
  48. */
  49. protected $_from;
  50. /**
  51. * @var 受信者
  52. * @access protected
  53. */
  54. protected $_to;
  55. /**
  56. * @var テーマ
  57. * @access 保護されています
  58. */
  59. protected $_subject;
  60. /**
  61. * @var メール本文
  62. * @access protected
  63. */
  64. protected $_body;
  65. /**
  66. * @var HTML形式のメールかどうか
  67. * @access protected
  68. */
  69. protected $_isHTML=true;
  70. /**
  71. * @var ソケットリソース
  72. * @access 保護されています
  73. */
  74. protected $_socket;
  75. /**
  76. * @var エラーメッセージ
  77. * @access 保護されています
  78. */
  79. protected $_errorMessage;
  80. パブリック関数 __construct($from="", $to="", $subject="", $body="", $server="", $username="", $password="",$isHTML ="", $port="") {
  81. if(!empty($from)){
  82. $this->_from = $from;
  83. }
  84. if(!empty($to)){
  85. $this->_to = $to;
  86. }
  87. if(!empty($subject)){
  88. $this->_subject = $subject;
  89. }
  90. if(!empty($body)){
  91. $this->_body = $body;
  92. }
  93. if(!empty($isHTML)){
  94. $this->_isHTML = $isHTML;
  95. }
  96. if(!empty($server)){
  97. $this->_sendServer = $server;
  98. }
  99. if(!empty($port)){
  100. $this->_port = $port;
  101. }
  102. if(!empty($username)){
  103. $this->_userName = $username;
  104. }
  105. if(!empty($password)){
  106. $this->_password = $password;
  107. }
  108. }
  109. /**
  110. * メール転送プロキシを設定します
  111. * @param string $server プロキシ サーバーの IP またはドメイン名
  112. * @param int $port プロキシ サーバーのポート、SMTP デフォルト ポート 25
  113. * @param int $localPortローカルポート
  114. * @return boolean
  115. */
  116. public function setServer($server, $port=25) {
  117. if(!isset($server) || empty($server) || !is_string($ server)) {
  118. $this->_errorMessage = "最初のパラメータは無効なパラメータです";
  119. false を返します。
  120. }
  121. if(!is_numeric($port)){
  122. $this->_errorMessage = "最初の 2 つは無効なパラメーターです";
  123. false を返します。
  124. }
  125. $this->_sendServer = $server;
  126. $this->_port = $port;
  127. true を返します。
  128. }
  129. /**
  130. * 電子メールを設定します
  131. * @access public
  132. * @param array $config 電子メール設定情報
  133. * 電子メールの送信者、受信者、件名、内容、およびメール転送エージェントの検証情報が含まれます
  134. * @return boolean
  135. */
  136. public function setMailInfo($config) {
  137. if(!is_array($config) || count($config) < 6){
  138. $this->_errorMessage = "パラメータは必須です。」
  139. false を返します。 $this->_from = $config['from'];
  140. $this->_to = $config['to'];
  141. $this->_subject = $config['subject'];
  142. $this->_body = $config['body'];
  143. $this->_userName = $config['ユーザー名'];
  144. $this->_password = $config['パスワード'];
  145. if(isset($config['isHTML'])){
  146. $this->_isHTML = $config['isHTML'];
  147. }
  148. true を返します。
  149. }
  150. /**
  151. * メールを送信
  152. * @access public
  153. * @return boolean
  154. */
  155. public function sendMail() {
  156. $command = $this->getCommand();
  157. $this->socket();
  158. foreach ($command as $value) {
  159. if($this->sendCommand($value[0], $value[1])) {
  160. 続行;
  161. }
  162. else{
  163. false を返します。
  164. }
  165. }
  166. $this->close(); //此処も不要关闭,smtp コマンド:QUIT発行之後,サーバー就关闭了接続,本地ソケット资源会自动释放
  167. echo 'Mail OK!';
  168. true を返します。
  169. }
  170. /**
  171. * エラーメッセージを返す
  172. * @return string
  173. */
  174. public function error(){
  175. if(!isset($this->_errorMessage)) {
  176. $this->_errorMessage = "";
  177. }
  178. return $this->_errorMessage;
  179. }
  180. /**
  181. * メール返信コマンド
  182. * @access protected
  183. * @return 配列
  184. */
  185. protected function getCommand() {
  186. if($this->_isHTML) {
  187. $mail = "MIME-Version:1.0rn";
  188. $mail .= "コンテンツタイプ:text/html;charset=utf-8rn";
  189. $mail .= "FROM:test<" 。 $this->_from 。 ">rn";
  190. $mail .= "宛先:<" 。 $this->_to 。 ">rn";
  191. $mail .= "件名:" . $this->_subject ."rnrn";
  192. $mail .= $this->_body . "rn.rn";
  193. }
  194. else{
  195. $mail = "FROM:test<" 。 $this->_from 。 ">rn";
  196. $mail .= "宛先:<" 。 $this->_to 。 ">rn";
  197. $mail .= "件名:" . $this->_subject ."rnrn";
  198. $mail .= $this->_body . "rn.rn";
  199. }
  200. $command = array(
  201. array("HELO sendmailrn", 250),
  202. array("AUTH LOGINrn", 334),
  203. array(base64_encode($this->_userName) . "rn", 334),
  204. array(base64_encode($this->_password) . "rn", 235),
  205. array("MAIL FROM:<" . $this->_from . ">rn", 250),
  206. array( "RCPT TO:<" . ">rn", 250),
  207. array($mail, 250),
  208. array("QUITrn", 221)
  209. );
  210. $command を返します。
  211. }
  212. /**
  213. * @access protected
  214. * @param string $command サーバーに送信された SMTP コマンド
  215. * @param int $code サーバーから返される応答を期待しますか
  216. * @param boolean
  217. */
  218. protected function sendCommand($command, $code) {
  219. echo 'コマンドを送信:' 。 $コマンド 。 '、予期されるコード:' 。 $コード 。 '
    ';
  220. //送信コマンド给服务器
  221. try{
  222. if(socket_write($this->_socket, $command, strlen($command))){
  223. //读取服务器を返す
  224. $data = trim(socket_read($this ->_ソケット、1024));
  225. '応答:' をエコーし​​ます。 $data 。 '

    ';
  226. if($data) {
  227. $pattern = "/^".$code."/";
  228. if(preg_match($pattern, $data)) {
  229. true を返します。
  230. }
  231. else{
  232. $this->_errorMessage = "エラー:" . $data 。 "|**| コマンド:";
  233. false を返します。
  234. }
  235. }
  236. else{
  237. $this->_errorMessage = "エラー:" .ソケット_strerror(socket_last_error());
  238. false を返します。
  239. }
  240. }
  241. else{
  242. $this->_errorMessage = "エラー:" .ソケット_strerror(socket_last_error());
  243. false を返します。
  244. }
  245. }catch(Exception $e) {
  246. $this->_errorMessage = "エラー:" . $e->getMessage();
  247. }
  248. }
  249. /**
  250. * サーバーへのネットワーク接続を確立します
  251. * @access private
  252. * @return boolean
  253. */
  254. プライベート関数ソケット() {
  255. if(!function_exists("socket_create")) {
  256. $this->_errorMessage = "拡張 php-sockets を有効にする必要があります" ;
  257. false を返します。
  258. }
  259. //创建ソケット资源
  260. $this->_socket =ソケット_create(AF_INET, SOCK_STREAM, getprotobyname('tcp'));
  261. if(!$this->_socket) {
  262. $this->_errorMessage =ソケット_strerror(socket_last_error());
  263. false を返します。
  264. }
  265. //接続サービス
  266. if(!socket_connect($this->_socket, $this->_sendServer, $this->_port)) {
  267. $this->_errorMessage =ソケット_strerror(socket_last_error() );
  268. false を返します。
  269. }
  270. socket_read($this->_socket, 1024);
  271. true を返します。
  272. }
  273. /**
  274. * 关闭ソケット
  275. * @access private
  276. * @return boolean
  277. */
  278. プライベート関数 close() {
  279. if(isset($this->_socket) && is_object($this->_socket)) {
  280. $this->_socket ->close();
  281. true を返します。
  282. }
  283. $this->_errorMessage = "リソースを近づけることはできません";
  284. false を返します。
  285. }
  286. }
  287. /**************************** テスト *********************** ************/
  288. $config = array(
  289. "from" => "********@163.com",
  290. "to" => "******@163.com"、
  291. "件名" => "テスト"、
  292. "本文" => "テスト",
  293. "ユーザー名" => "******",
  294. "パスワード" => "パスワード",
  295. );
  296. $mail = 新しい MySendMail();
  297. $mail->setServer("smtp.163.com");
  298. $mail->setMailInfo($config);
  299. if(!$mail->sendMail()){
  300. echo $mail->error();
  301. 1 を返します。
  302. }
复制代

PHP、HTML


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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

11ベストPHP URLショートナースクリプト(無料およびプレミアム) 11ベストPHP URLショートナースクリプト(無料およびプレミアム) Mar 03, 2025 am 10:49 AM

多くの場合、キーワードと追跡パラメーターで散らかった長いURLは、訪問者を阻止できます。 URL短縮スクリプトはソリューションを提供し、ソーシャルメディアやその他のプラットフォームに最適な簡潔なリンクを作成します。 これらのスクリプトは、個々のWebサイトにとって価値があります

Instagram APIの紹介 Instagram APIの紹介 Mar 02, 2025 am 09:32 AM

2012年のFacebookによる有名な買収に続いて、Instagramはサードパーティの使用のために2セットのAPIを採用しました。これらはInstagramグラフAPIとInstagram Basic Display APIです。

Laravelでフラッシュセッションデータを使用します Laravelでフラッシュセッションデータを使用します Mar 12, 2025 pm 05:08 PM

Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

LaravelのバックエンドでReactアプリを構築する:パート2、React LaravelのバックエンドでReactアプリを構築する:パート2、React Mar 04, 2025 am 09:33 AM

これは、LaravelバックエンドとのReactアプリケーションの構築に関するシリーズの2番目と最終部分です。シリーズの最初の部分では、基本的な製品上場アプリケーションのためにLaravelを使用してRESTFUL APIを作成しました。このチュートリアルでは、開発者になります

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

2025 PHP状況調査の発表 2025 PHP状況調査の発表 Mar 03, 2025 pm 04:20 PM

2025 PHP Landscape Surveyは、現在のPHP開発動向を調査しています。 開発者や企業に洞察を提供することを目的とした、フレームワークの使用、展開方法、および課題を調査します。 この調査では、現代のPHP Versioの成長が予想されています

See all articles