>백엔드 개발 >PHP 튜토리얼 >PHP는 HTML 형식 이메일 전송을 위한 전송 클래스를 지원합니다.

PHP는 HTML 형식 이메일 전송을 위한 전송 클래스를 지원합니다.

WBOY
WBOY원래의
2016-07-25 08:43:011006검색
  1. /**
  2. * 郵件發送類別
  3. * 支援發送純文字郵件和HTML格式的郵件
  4. * @example
  5. * $config = array(
  6. * "from" => "**** *",
  7. * "to" => "***",
  8. * "subject" => "test",
  9. * "body" => "test" ,
  10. * "username" => "***",
  11. * "password" => "****",
  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. * return 1;
  23. * }
  24. */
  25. class MySendMail{
  26. /**
  27. * @var 郵件傳輸代理使用者名稱
  28. * @access private
  29. */
  30. private $_userName ;
  31. /**
  32. * @var 郵件傳輸代理程式密碼
  33. * @access private
  34. */
  35. 資產 $_password;
  36. /**
  37. * @var 郵件傳輸代理伺服器位址
  38. * @access protected
  39. */
  40. protected $_sendServer;
  41. /**
  42. * @var 郵件傳輸代理伺服器連接埠
  43. * @access protected
  44. */
  45. protected $_port=25;
  46. /**
  47. * @var 寄件者
  48. * @access protected
  49. */
  50. 受保護的 $_from;
  51. /**
  52. * @var 收件者
  53. * @access protected
  54. */
  55. protected $_to;
  56. /**
  57. * @var 主題
  58. * @access protected
  59. */
  60. 受保護的 $_subject;
  61. /**
  62. * @var 郵件正文
  63. * @access protected
  64. */
  65. protected $_body;
  66. /**
  67. * @var 是否為HTML格式的郵件
  68. * @access protected
  69. */
  70. protected $_isHTML=true;
  71. /**
  72. * @var socket資源
  73. * @access protected
  74. */
  75. protected $_socket;
  76. /**
  77. * @var 錯誤訊息
  78. * @access protected
  79. */
  80. protected $_errorMessage;
  81. 公用函數__construct($from="", $to="", $subject="", $body="", $server="", $username="", $password= " ",$isHTML="", $port="") {
  82. if(!empty($from)){
  83. $this->_from = $from;
  84. }
  85. if(!empty($to)){
  86. $this->_to = $to;
  87. }
  88. if(!empty($subject)){
  89. $this->_subject = $subject;
  90. }
  91. if(!empty($body)){
  92. $this->_body = $body;
  93. }
  94. if(!empty($isHTML)){
  95. $this->_isHTML = $isHTML;
  96. }
  97. if(!empty($server)){
  98. $this->_sendServer = $server;
  99. }
  100. if(!empty($port)){
  101. $this->_port = $port;
  102. }
  103. if(!empty($username)){
  104. $this->_userName = $username;
  105. }
  106. if(!empty($password)){
  107. $this->_password = $password;
  108. }
  109. }
  110. /**
  111. * 設定郵件傳輸代理
  112. * @param string $server 代理伺服器的ip或網域名稱
  113. * @param int $port 代理伺服器的端口,smtp預設25號端口
  114. * @param int $ localPort 本機連接埠
  115. * @return boolean
  116. */
  117. public function setServer($server, $port=25) {
  118. if(!isset($server) | |empty($server) || !is_string($server)) {
  119. $this->_errorMessage = "第一個參數無效";
  120. 回傳 false;
  121. }
  122. if(!is_numeric($port)){
  123. $this->_errorMessage = "前兩個參數無效";
  124. 回傳 false;
  125. }
  126. $this->_sendServer = $server;
  127. $this->_port = $port;
  128. 回傳true;
  129. }
  130. /**
  131. * 이메일 설정
  132. * @access public
  133. * @param array $config 이메일 구성 정보
  134. * 이메일 보낸 사람, 받는 사람, 제목, 내용, 메일 전송 에이전트의 확인 정보가 포함되어 있습니다
  135. * @return 부울
  136. */
  137. 공개 함수 setMailInfo($config) {
  138. if(!is_array($config) || count($config) < 6){
  139. $this->_errorMessage = "매개변수가 필요합니다";
  140. false를 반환합니다.
  141. }
  142. $this->_from = $config['from'];
  143. $this->_to = $config['to'];
  144. $this->_subject = $config['subject'];
  145. $this->_body = $config['body'];
  146. $this->_userName = $config['사용자 이름'];
  147. $this->_password = $config['password'];
  148. if(isset($config['isHTML'])){
  149. $this->_isHTML = $config['isHTML'];
  150. }
  151. true를 반환합니다.
  152. }
  153. /**
  154. * 이메일 보내기
  155. * @access public
  156. * @return boolean
  157. */
  158. 공용 함수 sendMail() {
  159. $command = $this->getCommand();
  160. $this->소켓();
  161. foreach ($command as $value) {
  162. if($this->sendCommand($value[0], $value[1])) {
  163. 계속;
  164. }
  165. else{
  166. false를 반환합니다.
  167. }
  168. }
  169. $this->close(); //其实这里也没必要关闭,smtp命令:QUIT发流后,服务器就关闭了连接,本地的socket资源会自动释放
  170. echo 'Mail OK!';
  171. true를 반환합니다.
  172. }
  173. /**
  174. * 반환 오류 메시지
  175. * @return 문자열
  176. */
  177. 공용 함수 오류(){
  178. if(!isset($this->_errorMessage)) {
  179. $this- >_errorMessage = "";
  180. }
  181. return $this->_errorMessage;
  182. }
  183. /**
  184. * 메일 반환 명령
  185. * @access protected
  186. * @return 배열
  187. */
  188. 보호 함수 getCommand() {
  189. if($this->_isHTML) {
  190. $mail = "MIME-Version :1.0rn";
  191. $mail .= "콘텐츠 유형:텍스트/html;charset=utf-8rn";
  192. $mail .= "FROM:테스트<" . $this->_from . ">rn";
  193. $mail .= "받는 사람:<" . $this->_to . ">rn";
  194. $mail .= "제목:" . $this->_subject ."rnrn";
  195. $mail .= $this->_body . "rn.rn";
  196. }
  197. else{
  198. $mail = "FROM:test<" . $this->_from . ">rn";
  199. $mail .= "받는 사람:<" . $this->_to . ">rn";
  200. $mail .= "제목:" . $this->_subject ."rnrn";
  201. $mail .= $this->_body . "rn.rn";
  202. }
  203. $command = array(
  204. array("HELO sendmailrn", 250),
  205. array("AUTH LOGINrn", 334),
  206. array(base64_encode($this-> _userName) . "rn", 334),
  207. array(base64_encode($this->_password) . "rn", 235),
  208. array("MAIL FROM:<" . $this-> _from . ">rn", 250),
  209. array("RCPT TO:<" . $this->_to . ">rn", 250),
  210. array("DATArn", 354 ),
  211. array($mail, 250),
  212. array("QUITrn", 221)
  213. );
  214. $명령을 반환합니다.
  215. }
  216. /**
  217. * @access protected
  218. * @param string $command 서버로 보낸 smtp 명령
  219. * @param int $code 서버에서 예상되는 응답인지
  220. * @param boolean
  221. */
  222. protected function sendCommand($command, $code) {
  223. echo '명령 보내기:' . $command . . '
    ';
  224. //서버에 명령 보내기
  225. try{
  226. if(socket_write($this->_socket, $command, strlen($command))){
  227. //서버 반환
  228. $data = Trim(socket_read($this->_socket, 1024))
  229. echo 'response:' . br />';
  230. if($data) {
  231. $pattern = "/^".$code."/"
  232. if(preg_match($pattern, $data)) {
  233. true를 반환합니다.
  234. else{
  235. $this->_errorMessage = "오류:" . "|**| 명령:";
  236. }
  237. else{
  238. $this->_errorMessage = "오류:" .socket_strerror(socket_last_error())
  239. return false;
  240. $this->_errorMessage = "오류:" .socket_strerror(socket_last_error())
  241. return false
  242. }
  243. }catch(Exception $e) {
  244. $this-> ;_errorMessage = "오류:" . $e->getMessage();
  245. }
  246. }
  247. /**
  248. * 서버에 대한 네트워크 연결 설정
  249. * @access private
  250. * @return boolean
  251. */
  252. 개인 함수 소켓() {
  253. if(!function_exists("socket_create")) {
  254. $this->_errorMessage = "확장 php-sockets를 활성화해야 합니다";
  255. return false
  256. }
  257. //소켓 리소스 생성
  258. $this->_socket = 소켓_create(AF_INET, SOCK_STREAM, getprotobyname('tcp'))
  259. if(!$this->_socket) {
  260. $this->_errorMessage = 소켓_strerror(socket_last_error());
  261. return false;
  262. }
  263. //서버에 연결
  264. if(!socket_connect($this->_socket, $this-> _sendServer, $this->_port)) {
  265. $this->_errorMessage = 소켓_strerror(socket_last_error())
  266. return false
  267. }
  268. 소켓_read($this->_socket, 1024) ;
  269. return true;
  270. }
  271. /**
  272. * 소켓 닫기
  273. * @access private
  274. * @return 부울
  275. */
  276. private function close() {
  277. if(isset($this-> ;_socket ) && is_object($this->_socket)) {
  278. $this->_socket->close()
  279. return true
  280. }
  281. $this->_errorMessage = " 닫을 수 있는 리소스가 없습니다.";
  282. return false
  283. }
  284. }
  285. /**************************** 시험 *********************** ************/
  286. $config = array(
  287. "from" => "********@163.com",
  288. "to" => "********@163.com",
  289. "제목 " = > "테스트",
  290. "body" => "테스트",
  291. "사용자 이름" => " ** ****",
  292. "password" => "password",
  293. );
  294. $mail = new MySendMail();
  295. $mail-> setServer ("smtp.163.com")
  296. $mail->setMailInfo($config)
  297. if(!$mail->sendMail()){
  298. echo $mail - >error();
  299. return 1
  300. }
  301. 코드 복사
PHP, HTML

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.