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

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

WBOY
リリース: 2016-07-25 08:43:01
オリジナル
1017 人が閲覧しました
  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


ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート