当前位置:首页 > PHP教程 > php高级应用 > 列表

php fsockopen邮箱发送实例代码

发布:smiling 来源: PHP粉丝网  添加日期:2014-01-22 21:10:16 浏览: 评论:0 
  1. <?  
  2. //ok的邮箱发送。  
  3. include "smtp.class.php";  
  4. //$smtpserver = "smtp.163.com"; //您的smtp服务器的地址  
  5. $smtpserver="smtp.163.com";  
  6. $port =25; //smtp服务器的端口,一般是 25  
  7. $smtpuser = "你的邮箱@163.com"//您登录smtp服务器的用户名  
  8. $smtppwd = "你邮箱的密码"//您登录smtp服务器的密码  
  9. $mailtype = "txt"//邮件的类型,可选值是 txt 或 html ,txt 表示是纯文本的邮件,html 表示是 html格式的邮件  
  10. $sender = "你的邮箱@163.com";  
  11. //发件人,一般要与您登录smtp服务器的用户名($smtpuser)相同,否则可能会因为smtp服务器的设置导致发送失败  
  12. $smtp = new smtp($smtpserver,$port,true,$smtpuser,$smtppwd,$sender);  
  13. $smtp->debug = true; //是否开启调试,只在测试程序时使用,正式使用时请将此行注释  
  14. $to = "你要发给的那个人的邮箱地址"//收件人  
  15. $subject = "你好";  
  16. $body = "你发送的内容 ";  
  17. $send=$smtp->sendmail($to,$sender,$subject,$body,$mailtype); 
  18. if($send==1){  
  19. echo "邮件发送成功";  
  20. }else{  
  21. echo "邮件发送失败<br/>";  
  22. //echo "原因:".$this->smtp->logs;  
  23. }  
  24. ?> 

邮箱发送类smtp.class.php

  1. <?php  
  2. class smtp  
  3. {  
  4. /* public variables */  
  5. var $smtp_port;  
  6. var $time_out;  
  7. var $host_name;  
  8. var $log_file;  
  9. var $relay_host;  
  10. var $debug;  
  11. var $auth;  
  12. var $user;  
  13. var $pass;  
  14. /* private variables */  
  15. var $sock;  
  16. /* constractor */  
  17. function smtp($relay_host = ""$smtp_port = 25,$auth = false,$user,$pass)  
  18. {  
  19. $this->debug = false;  
  20. $this->smtp_port = $smtp_port;  
  21. $this->relay_host = $relay_host;  
  22. $this->time_out = 30; //is used in fsockopen()  
  23. #  
  24. $this->auth = $auth;//auth  
  25. $this->user = $user;  
  26. $this->pass = $pass;  
  27. #  
  28. $this->host_name = "localhost"//is used in helo command  
  29. $this->log_file = "";  
  30. $this->sock = false;  
  31. }  
  32. /* main function */  
  33. function sendmail($to$from$subject = ""$body = ""$mailtype$cc = ""$bcc = ""$additional_headers = "")  
  34. {  
  35. $mail_from = $this->get_address($this->strip_comment($from));  
  36. $body = ereg_replace("(^|(rn))(.)""1.3"$body);  
  37. $header .= "mime-version:1.0rn";  
  38. if($mailtype=="html"){  
  39. $header .= "content-type:text/htmlrn";  
  40. }  
  41. $header .= "to: ".$to."rn";  
  42. if ($cc != "") {  
  43. $header .= "cc: ".$cc."rn";  
  44. }  
  45. $header .= "from: $from<".$from.">;rn";  
  46. $header .= "subject: ".$subject."rn";  
  47. $header .= $additional_headers;  
  48. $header .= "date: ".date("r")."rn";  
  49. $header .= "x-mailer:by redhat (php/".phpversion().")rn";  
  50. list($msec$sec) = explode(" ", microtime());  
  51. $header .= "message-id: <".date("ymdhis"$sec).".".($msec*1000000).".".$mail_from.">;rn";  
  52. $to = explode(","$this->strip_comment($to));  
  53. if ($cc != "") {  
  54. $to = array_merge($toexplode(","$this->strip_comment($cc)));  
  55. }  
  56. if ($bcc != "") {  
  57. $to = array_merge($toexplode(","$this->strip_comment($bcc)));  
  58. }  
  59. $sent = true;  
  60. foreach ($to as $rcpt_to) {  
  61. $rcpt_to = $this->get_address($rcpt_to);  
  62. if (!$this->smtp_sockopen($rcpt_to)) {  
  63. $this->log_write("error: cannot send email to ".$rcpt_to."n");  
  64. $sent = false;  
  65. continue;  
  66. }  
  67. if ($this->smtp_send($this->host_name, $mail_from$rcpt_to$header$body)) {  
  68. $this->log_write("e-mail has been sent to <".$rcpt_to.">;n");  
  69. else {  
  70. $this->log_write("error: cannot send email to <".$rcpt_to.">;n");  
  71. $sent = false;  
  72. }  
  73. fclose($this->sock);  
  74. $this->log_write("disconnected from remote hostn");  
  75. }  
  76. return $sent;  
  77. }  
  78. /* private functions */  
  79. function smtp_send($helo$from$to$header$body = "")  
  80. {  
  81. if (!$this->smtp_putcmd("helo"$helo)) {  
  82. return $this->smtp_error("sending helo command");  
  83. }  
  84. #auth  
  85. if($this->auth){  
  86. if (!$this->smtp_putcmd("auth login"base64_encode($this->user))) {  
  87. return $this->smtp_error("sending helo command");  
  88. }  
  89. if (!$this->smtp_putcmd(""base64_encode($this->pass))) {  
  90. return $this->smtp_error("sending helo command");  
  91. }  
  92. }  
  93. #  
  94. if (!$this->smtp_putcmd("mail""from:<".$from.">;")) {  
  95. return $this->smtp_error("sending mail from command");  
  96. }  
  97. if (!$this->smtp_putcmd("rcpt""to:<".$to.">;")) {  
  98. return $this->smtp_error("sending rcpt to command");  
  99. }  
  100. if (!$this->smtp_putcmd("data")) {  
  101. return $this->smtp_error("sending data command");  
  102. }  
  103. if (!$this->smtp_message($header$body)) {  
  104. return $this->smtp_error("sending message");  
  105. }  
  106. if (!$this->smtp_eom()) {  
  107. return $this->smtp_error("sending <cr>;<lf>;.<cr>;<lf>; [eom]");  
  108. }  
  109. if (!$this->smtp_putcmd("quit")) {  
  110. return $this->smtp_error("sending quit command");  
  111. }  
  112. return true;  
  113. }  
  114. function smtp_sockopen($address)  
  115. {  
  116. if ($this->relay_host == "") {  
  117. return $this->smtp_sockopen_mx($address);  
  118. else {  
  119. return $this->smtp_sockopen_relay();  
  120. }  
  121. }  
  122. function smtp_sockopen_relay()  
  123. {  
  124. $this->log_write("trying to ".$this->relay_host.":".$this->smtp_port."n");  
  125. $this->sock = @fsockopen($this->relay_host, $this->smtp_port, $errno$errstr$this->time_out);  
  126. if (!($this->sock && $this->smtp_ok())) {  
  127. $this->log_write("error: cannot connenct to relay host ".$this->relay_host."n");  
  128. $this->log_write("error: ".$errstr." (".$errno.")n");  
  129. return false;  
  130. }  
  131. $this->log_write("connected to relay host ".$this->relay_host."n");  
  132. return true;  
  133. }  
  134. function smtp_sockopen_mx($address)  
  135. {  
  136. $domain = ereg_replace("^.+@([^@]+)$""1"$address);  
  137. if (!@getmxrr($domain$mxhosts)) {  
  138. $this->log_write("error: cannot resolve mx "".$domain.""n");  
  139. return false;  
  140. }  
  141. foreach ($mxhosts as $host) {  
  142. $this->log_write("trying to ".$host.":".$this->smtp_port."n");  
  143. $this->sock = @fsockopen($host$this->smtp_port, $errno$errstr$this->time_out);  
  144. if (!($this->sock && $this->smtp_ok())) {  
  145. $this->log_write("warning: cannot connect to mx host ".$host."n");  
  146. $this->log_write("error: ".$errstr." (".$errno.")n");  
  147. continue;  
  148. }  
  149. $this->log_write("connected to mx host ".$host."n");  
  150. return true;  
  151. }  
  152. $this->log_write("error: cannot connect to any mx hosts (".implode(", "$mxhosts).")n");  
  153. return false;  
  154. }  
  155. function smtp_message($header$body)  
  156. {  
  157. fputs($this->sock, $header."rn".$body);  
  158. $this->smtp_debug(">; ".str_replace("rn""n".">; "$header."n>; ".$body."n>; "));  
  159. return true;  
  160. }  
  161. function smtp_eom()  
  162. {  
  163. fputs($this->sock, "rn.rn");  
  164. $this->smtp_debug(". [eom]n");  
  165. return $this->smtp_ok();  
  166. }  
  167. function smtp_ok()  
  168. {  
  169. $response = str_replace("rn"""fgets($this->sock, 512));  
  170. $this->smtp_debug($response."n");  
  171. if (!ereg("^[23]"$response)) {  
  172. fputs($this->sock, "quitrn");  
  173. fgets($this->sock, 512);  
  174. $this->log_write("error: remote host returned "".$response.""n");  
  175. return false;  
  176. }  
  177. return true;  
  178. }  
  179. function smtp_putcmd($cmd$arg = "")  
  180. {  
  181. if ($arg != "") {  
  182. if($cmd==""$cmd = $arg;  
  183. else $cmd = $cmd." ".$arg;  
  184. }  
  185. fputs($this->sock, $cmd."rn");  
  186. $this->smtp_debug(">; ".$cmd."n");  
  187. return $this->smtp_ok();  
  188. }  
  189. function smtp_error($string)  
  190. {  
  191. $this->log_write("error: error occurred while ".$string.".n");  
  192. return false;  
  193. }  
  194. function log_write($message)  
  195. {  
  196. $this->smtp_debug($message);  
  197. if ($this->log_file == "") {  
  198. return true;  
  199. }  
  200. $message = date("m d h:i:s ").get_current_user()."[".getmypid()."]: ".$message;  
  201. if (!@file_exists($this->log_file) || !($fp = @fopen($this->log_file, "a"))) {  
  202. $this->smtp_debug("warning: cannot open log file "".$this->log_file.""n");  
  203. return false;  
  204. }  
  205. flock($fp, lock_ex);  
  206. fputs($fp$message);  
  207. fclose($fp);  
  208. return true;  
  209. }  
  210. function strip_comment($address)  
  211. {  
  212. $comment = "([^()]*)";  
  213. while (ereg($comment$address)) {  
  214. $address = ereg_replace($comment""$address);  
  215. }  
  216. return $address;  
  217. }  
  218. function get_address($address)  
  219. {  
  220. $address = ereg_replace("([ trn])+"""$address);  
  221. $address = ereg_replace("^.*<(.+)>;.*$""1"$address);  
  222. return $address;  
  223. }  
  224. function smtp_debug($message)  
  225. {  
  226. if ($this->debug) {  
  227. echo $message;  
  228. }  
  229. }  
  230. }  
  231. function sendmail($smtpserver,$smtpuser,$smtppass,$smtpemailto,$smtpusermail$mailsubject$mailbody){  
  232. $smtp = new smtp($smtpserver,25,true,$smtpuser,$smtppass);  
  233. //$smtp->debug = true;  
  234. $smtp->sendmail($smtpemailto$smtpusermail$mailsubject$mailbody"html");  
  235. }  
  236. //such as  
  237. //sendmail("smtp.126.com","test@126.com","password","1034555083@qq.com","test@126.com","title","body"); 
  238. ?> 

Tags: fsockopen 邮箱 实例代码

分享到: