PageRenderTime 50ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/Upload/DoYouHaoBaby/LibPHP/App/Package/Util/Mail.class.php

http://dyhb-frame.googlecode.com/
PHP | 335 lines | 293 code | 40 blank | 2 comment | 27 complexity | ff31a723f24d43e553934dc5dad01b6a MD5 | raw file
  1. <?php
  2. /* [DoYouHaoBaby!] (C)Dianniu From 2010.
  3. Mail ?????($) */
  4. !defined('DYHB_PATH') && exit;
  5. class Mail{
  6. protected $_sServer='';
  7. protected $_nPort=25;
  8. protected $_bAuth=TRUE;
  9. protected $_sAuthUsername='';
  10. protected $_sAuthPassword='';
  11. protected $_sEmailFrom='';
  12. protected $_sEmailTo='';
  13. protected $_nEmailLimiter=1;
  14. protected $_sEmailSubject='';
  15. protected $_sEmailMessage='';
  16. protected $_bEmailUsername=TRUE;
  17. protected $_sCharset='UTF-8';
  18. protected $_sSiteName='DoYouHaoBaby Mail';
  19. protected $_bIsHtml=TRUE;
  20. protected $_sContentType='text/plain';
  21. protected $_sErrorMessage;
  22. protected $_bIsError;
  23. CONST PHP_MAIL='mail';
  24. CONST SOCKET_SMTP ='socket_smtp';
  25. CONST PHP_SMTP='php_smtp';
  26. protected $_sEmailSendType=self::SOCKET_SMTP;
  27. public function __construct($sServer='',$sAuthUsername='',$sAuthPassword='',$nPort=25,$sEmailSendType=self::SOCKET_SMTP){
  28. $this->_sServer=$sServer;
  29. $this->_sAuthUsername=$sAuthUsername;
  30. $this->_sAuthPassword=$sAuthPassword;
  31. $this->_nPort=$nPort;
  32. $this->_sEmailSendType=$sEmailSendType;
  33. }
  34. public function send(){
  35. $sEmailLimiter=$this->_nEmailLimiter==1?"\r\n":($this->_nEmailLimiter==2?"\r":"\n");// ???????
  36. $bEmailUsername=isset($this->_bEmailUsername)?$this->_bEmailUsername:TRUE;// ??SMTP ???
  37. $sEmailSubject='=?'.$this->_sCharset.'?B?'.base64_encode(str_replace("\r",'',str_replace("\n",'','['.$this->_sSiteName.'] '.$this->_sEmailSubject))).'?=';// ????
  38. $sEmailMessage=chunk_split(base64_encode(str_replace("\r\n."," \r\n..",str_replace("\n","\r\n",str_replace("\r","\n",str_replace("\r\n","\n",str_replace("\n\r","\r",$this->_sEmailMessage)))))));// ????
  39. $arrFrom=array();// ?????
  40. $sEmailFrom=(preg_match('/^(.+?) \<(.+?)\>$/',$this->_sEmailFrom,$arrFrom)?'=?'.$this->_sCharset.'?B?'.base64_encode($arrFrom[1])."?= <$arrFrom[2]>":$this->_sEmailFrom);
  41. $arrEmailTo=explode(',',$this->_sEmailTo);// ?????
  42. $arrToUsers=array();
  43. foreach($arrEmailTo as $sToUser){
  44. $arrTo=array();
  45. $arrToUsers[]=preg_match('/^(.+?) \<(.+?)\>$/',$sToUser,$sTo)?($this->_bEmailUsername?'=?'.$this->_sCharset.'?B?'.base64_encode($arrTo[1])."?= <$arrTo[2]>":$arrTo[2]):$sToUser;
  46. }
  47. $sEmailTo=implode(',',$arrToUsers);
  48. if($this->_bIsHtml===TRUE) $this->_sContentType='text/html';// ????HTML ??
  49. $sHeaders="From:{$sEmailFrom}{$sEmailLimiter}X-Priority: 3{$sEmailLimiter}X-Mailer: DoYouHaoBaby!{$sEmailLimiter}MIME-Version: 1.0{$sEmailLimiter}Content-type: $this->_sContentType; charset={$this->_sCharset}{$sEmailLimiter}Content-Transfer-Encoding: base64{$sEmailLimiter}";// ????
  50. $this->_nPort=$this->_nPort?$this->_nPort:25;// ??
  51. if(strtolower($this->_sEmailSendType)==self::PHP_MAIL && function_exists('mail')){
  52. @mail($sEmailTo,$sEmailSubject,$sEmailMessage,$sHeaders);
  53. }
  54. else if(strtolower($this->_sEmailSendType)==self::PHP_SMTP){
  55. ini_set('SMTP',$this->_sServer);
  56. ini_set('smtp_port',$this->_nPort);
  57. ini_set('sendmail_from',$sEmailFrom);
  58. @mail($sEmailTo,$sEmailSubject,$sEmailMessage,$sHeaders);
  59. }
  60. else if(strtolower($this->_sEmailSendType)==self::SOCKET_SMTP){
  61. $nErrNo=0;// ??
  62. $nErrStr='';
  63. if(!$hFp=fsockopen($this->_sServer,$this->_nPort,$nErrNo,$nErrStr,30)){
  64. $this->setErrorMessage(sprintf("%s:%d CONNECT - can not connect to the SMTP server",$this->_sServer,$this->_nPort));
  65. return false;
  66. }
  67. stream_set_blocking($hFp,true);
  68. $sLastMessage=fgets($hFp,512);
  69. if(substr($sLastMessage,0,3)!='220'){
  70. $this->setErrorMessage(sprintf("%s:%d CONNECT - %s",$this->_sServer,$this->_nPort,$sLastMessage));
  71. return false;
  72. }
  73. fputs($hFp,($this->_bAuth?'EHLO':'HELO')." DoYouHaoBaby\r\n");
  74. $sLastMessage=fgets($hFp,512);
  75. if(substr($sLastMessage,0,3)!=220 && substr($sLastMessage,0,3)!=250){
  76. $this->setErrorMessage(sprintf("%s:%d HELO/EHLO - %s",$this->_sServer,$this->_nPort,$sLastMessage));
  77. return false;
  78. }
  79. while(1){
  80. if(substr($sLastMessage,3,1)!='-' || empty($sLastMessage)){
  81. break;
  82. }
  83. $sLastMessage=fgets($hFp,512);
  84. }
  85. if($this->_bAuth){
  86. fputs($hFp,"AUTH LOGIN\r\n");
  87. $sLastMessage=fgets($hFp,512);
  88. if(substr($sLastMessage,0,3)!=334){
  89. $this->setErrorMessage(sprintf("%s:%d AUTH LOGIN - %s",$this->_sServer,$this->_nPort,$sLastMessage));
  90. return false;
  91. }
  92. fputs($hFp,base64_encode($this->_sAuthUsername)."\r\n");
  93. $sLastMessage=fgets($hFp,512);
  94. if(substr($sLastMessage,0,3)!=334){
  95. $this->setErrorMessage(sprintf("%s:%d USERNAME - %s",$this->_sServer,$this->_nPort,$sLastMessage));
  96. return false;
  97. }
  98. fputs($hFp,base64_encode($this->_sAuthPassword)."\r\n");
  99. $sLastMessage=fgets($hFp,512);
  100. if(substr($sLastMessage,0,3)!=235){
  101. $this->setErrorMessage(sprintf("%s:%d PASSWORD - %s",$this->_sServer,$this->_nPort,$sLastMessage));
  102. return false;
  103. }
  104. }
  105. fputs($hFp,"MAIL FROM: <".preg_replace("/.*\<(.+?)\>.*/","\\1",$this->_sEmailFrom).">\r\n");
  106. $sLastMessage=fgets($hFp,512);
  107. if(substr($sLastMessage,0,3)!=250){
  108. fputs($hFp,"MAIL FROM: <".preg_replace("/.*\<(.+?)\>.*/","\\1",$this->_sEmailFrom).">\r\n");
  109. $sLastMessage=fgets($hFp,512);
  110. if(substr($sLastMessage,0,3)!=250){
  111. $this->setErrorMessage(sprintf("%s:%d MAIL FROM - %s",$this->_sServer,$this->_nPort,$sLastMessage));
  112. return false;
  113. }
  114. }
  115. $arrEmailTo=explode(',',$sEmailTo);
  116. foreach($arrEmailTo as $sToUser){
  117. $sToUser=trim($sToUser);
  118. if($sToUser){
  119. fputs($hFp,"RCPT TO: <".preg_replace("/.*\<(.+?)\>.*/","\\1",$sToUser).">\r\n");
  120. $sLastMessage=fgets($hFp,512);
  121. if(substr($sLastMessage,0,3)!=250){
  122. fputs($hFp,"RCPT TO: <".preg_replace("/.*\<(.+?)\>.*/","\\1",$sToUser).">\r\n");
  123. $sLastMessage=fgets($hFp,512);
  124. $this->setErrorMessage(sprintf("%s:%d RCPT TO - %s",$this->_sServer,$this->_nPort,$sLastMessage));
  125. return false;
  126. }
  127. }
  128. }
  129. fputs($hFp,"DATA\r\n");
  130. $sLastMessage=fgets($hFp,512);
  131. if(substr($sLastMessage,0,3)!=354){
  132. $this->setErrorMessage(sprintf("%s:%d DATA - %s",$this->_sServer,$this->_nPort,$sLastMessage));
  133. return false;
  134. }
  135. $sHeaders.='Message-ID: <'.gmdate('YmdHs').'.'.substr(md5($sEmailMessage.microtime()),0,6).rand(100000,999999).'@'.$_SERVER['HTTP_HOST'].">{$sEmailLimiter}";
  136. fputs($hFp,"Date: ".gmdate('r')."\r\n");
  137. fputs($hFp,"To:{$sEmailTo}\r\n");
  138. fputs($hFp,"Subject:{$sEmailSubject}\r\n");
  139. fputs($hFp,$sHeaders."\r\n");
  140. fputs($hFp,"\r\n\r\n");
  141. fputs($hFp,"{$sEmailMessage}\r\n.\r\n");
  142. $sLastMessage=fgets($hFp,512);
  143. if(substr($sLastMessage,0,3)!=250){
  144. $this->setErrorMessage(sprintf("%s:%d DATA - %s",$this->_sServer,$this->_nPort,$sLastMessage));
  145. return false;
  146. }
  147. fputs($hFp,"QUIT\r\n");
  148. }
  149. else{
  150. $this->setErrorMessage("The wrong way to send e-mail");
  151. return false;
  152. }
  153. return true;
  154. }
  155. public function setServer($sServer=''){
  156. if(empty($sServer)) return;
  157. $sOldValue=$this->_sServer;
  158. $this->_sServer=$sServer;
  159. return $sOldValue;
  160. }
  161. public function setPort($nPort=25){
  162. if(empty($nPort)) return;
  163. $nOldValue=$this->_nPort;
  164. $this->_nPort=$nPort;
  165. return $nOldValue;
  166. }
  167. public function setAuth($bAuth=TRUE){
  168. $bOldValue=$this->_bAuth;
  169. $this->_bAuth=$bAuth;
  170. return $bOldValue;
  171. }
  172. public function setAuthUsername($sAuthUsername=''){
  173. $sOldValue=$this->_sAuthUsername;
  174. $this->_sAuthUsername=$sAuthUsername;
  175. return $sOldValue;
  176. }
  177. public function setAuthPassword($sAuthPassword=''){
  178. $sOldValue=$this->_sAuthPassword;
  179. $this->_sAuthPassword=$sAuthPassword;
  180. return $sOldValue;
  181. }
  182. public function setEmailFrom($sEmailFrom=''){
  183. $sOldValue=$this->_sEmailFrom;
  184. $this->_sEmailFrom=$sEmailFrom;
  185. return $sOldValue;
  186. }
  187. public function setEmailTo($sEmailTo=''){
  188. $sOldValue=$this->_sEmailTo;
  189. $this->_sEmailTo=$sEmailTo;
  190. return $sOldValue;
  191. }
  192. public function setEmailLimiter($nEmailLimiter=1){
  193. if(!in_array($nEmailLimiter,array(1,2,3))) return;
  194. $nOldValue=$this->_nEmailLimiter;
  195. $this->_nEmailLimiter=$nEmailLimiter;
  196. return $nOldValue;
  197. }
  198. public function setEmailSubject($sEmailSubject=''){
  199. $sOldValue=$this->_sEmailSubject;
  200. $this->_sEmailSubject=$sEmailSubject;
  201. return $sOldValue;
  202. }
  203. public function setEmailMessage($sEmailMessage=''){
  204. $sOldValue=$this->_sEmailMessage;
  205. $this->_sEmailMessage=$sEmailMessage;
  206. return $sOldValue;
  207. }
  208. public function setEmailUsername($bEmailUsername=TRUE){
  209. $bOldValue=$this->_bEmailUsername;
  210. $this->_bEmailUsername=$bEmailUsername;
  211. return $bOldValue;
  212. }
  213. public function setCharset($sCharset='UTF-8'){
  214. $sOldValue=$this->_sCharset;
  215. $this->_sCharset=$sCharset;
  216. return $sOldValue;
  217. }
  218. public function setSiteName($sSiteName=''){
  219. $sOldValue=$this->_sSiteName;
  220. $this->_sSiteName=$sSiteName;
  221. return $sOldValue;
  222. }
  223. public function setIsHtml($bIsHtml=TRUE){
  224. $bOldValue=$this->_bIsHtml;
  225. $this->_bIsHtml=$bIsHtml;
  226. return $bOldValue;
  227. }
  228. public function setContentType($sContentType='text/plain'){
  229. $sOldValue=$this->_sContentType;
  230. $this->_sContentType=$sContentType;
  231. return $sOldValue;
  232. }
  233. public function getServer(){
  234. return $this->_sServer;
  235. }
  236. public function getPort(){
  237. return $this->_nPort;
  238. }
  239. public function getAuth(){
  240. return $this->_bAuth;
  241. }
  242. public function getAuthUsername(){
  243. return $this->_sAuthUsername;
  244. }
  245. public function getAuthPassword(){
  246. return $this->_sAuthPassword;
  247. }
  248. public function getEmailFrom(){
  249. return $this->_sEmailFrom;
  250. }
  251. public function getEmailTo(){
  252. return $this->_sEmailTo;
  253. }
  254. public function getEmailLimiter(){
  255. return $this->_nEmailLimiter;
  256. }
  257. public function getEmailSubject(){
  258. return $this->_sEmailSubject;
  259. }
  260. public function getEmailMessage(){
  261. return $this->_sEmailMessage;
  262. }
  263. public function getEmailUsername(){
  264. return $this->_bEmailUsername;
  265. }
  266. public function getCharset(){
  267. return $this->_sCharset;
  268. }
  269. public function getSiteName(){
  270. return $this->_sSiteName;
  271. }
  272. public function getIsHtml(){
  273. return $this->_bIsHtml;
  274. }
  275. public function getContentType(){
  276. return $this->_sContentType;
  277. }
  278. protected function setIsError($bIsError=false){
  279. $bOldValue=$this->_bIsError;
  280. $this->_bIsError=$bIsError;
  281. return $bOldValue;
  282. }
  283. protected function setErrorMessage($sErrorMessage=''){
  284. $this->setIsError(true);
  285. $sOldValue=$this->_sErrorMessage;
  286. $this->_sErrorMessage=$sErrorMessage;
  287. return $sOldValue;
  288. }
  289. public function isError(){
  290. return $this->_bIsError;
  291. }
  292. public function getErrorMessage(){
  293. return $this->_sErrorMessage;
  294. }
  295. }