php发送邮件 支持多种方式

 

  
  
  
  
  1.  <?php 
  2. //发送电子邮件 
  3. /** 
  4. $email_to = '[email protected],[email protected]';//email地址,多个地址用,分隔开 
  5. $email_subject = '邮件标题';//email标题 
  6. $email_message = '邮件内容';//邮件内容 
  7. $charset = 'UTF-8';//邮件编码 
  8. $mailconf = array( 
  9. 'mailsend'=>'2', 
  10. 'mailserver'=>'smtp.126.com', 
  11. 'mailport'=>'25', 
  12. 'mailauth'=>'1', 
  13. 'mailfrom'=>'sjf122 <[email protected]>', 
  14. 'mailauth_username'=>'[email protected]', 
  15. 'mailauth_password'=>'******', 
  16. 'maildelimiter'=>'0', 
  17. 'mailsilent'=>'0', 
  18. ); 
  19. sharpng_sendmail($email_to, $email_subject, $email_message, $charset, $mailconf); 
  20. */ 
  21. function sharpng_sendmail($email_to$email_subject$email_message$charset$mailconf){ 
  22. /** 
  23. * 必须参数 
  24. * ++++++++++++++++++++ 
  25. * 收信人地址 
  26. * $email_to 例如[email protected] 
  27. * 邮件标题 
  28. * $email_subject 例如 祝贺您称为sharpng的客户 
  29. * 邮件内容 
  30. * $email_message 例如 sharpng是最好的wap建站程序之一,在您的帮助下,sharpng将会更好的成长 
  31. * 发送方式(三选一) 
  32. * $mailsend=1 通过 PHP 函数的 sendmail 发送(推荐此方式) 
  33. * $mailsend=2 通过 SOCKET 连接 SMTP 服务器发送(支持 ESMTP 验证) 
  34. * $mailsend=3 通过 PHP 函数 SMTP 发送 Email(仅 Windows 主机下有效, 不支持 ESMTP 验证) 
  35. * 邮件头的分隔符,请根据您邮件服务器的设置调整此参数(三选一) 
  36. * $maildelimiter=0 使用 LF 作为分隔符(通常为 Unix/Linux 主机) 
  37. * $maildelimiter=1 使用 CRLF 作为分隔符(通常为 Windows 主机) 
  38. * $maildelimiter=2 使用 CR 作为分隔符(通常为 Mac 主机) 
  39. * 屏蔽邮件发送中的全部错误提示(二选一) 
  40. * $mailsilent=1 是 
  41. * $mailsilent=0否 
  42. * ++++++++++++++++++++ 
  43. * 下面的 参数根据$mailsend参数的值选择性输入 
  44. * ---------- 
  45. * 假如$mailsend=2/3 
  46. * $mailserver SMTP 服务器,例如smtp.126.com 
  47. * $mailport SMTP 端口 默认为 25,例如25 
  48. * ---------- 
  49. * 假如$mailsend=2 
  50. * $mailauth=1 是/$mailauth=0 否 - 要求身份验证,如果 SMTP 服务器要求身份验证才可以发信,请选择“是”(二选一) 
  51. * $mailfrom 发信人邮件地址 如果需要验证, 必须为本服务器的邮件地址。邮件地址中如果要包含用户名,格式为“username <[email protected]>”,也可以只填地址,例如 [email protected] 
  52. * $mailauth_username SMTP 身份验证用户名,如126邮箱的是[email protected] 
  53. * $mailauth_password SMTP 身份验证密码 
  54. * ---------- 
  55. */ 
  56. while(list($k,$v) = each($mailconf)) {                 
  57. ($k == 'mailsend') ? $mailsend = $v : ''
  58. ($k == 'mailserver') ? $mailserver = $v : ''
  59. ($k == 'mailport') ? $mailport = $v : ''
  60. ($k == 'mailauth') ? $mailauth = $v : ''
  61. ($k == 'mailfrom') ? $mailfrom = $v : ''
  62. ($k == 'mailauth_username') ? $mailauth_username = $v : ''
  63. ($k == 'mailauth_password') ? $mailauth_password = $v : ''
  64. ($k == 'maildelimiter') ? $maildelimiter = $v : ''
  65. ($k == 'mailsilent') ? $sendmail_silent = $v : ''
  66. if($sendmail_silent) { 
  67. error_reporting(0); 
  68. //分隔符 
  69. $maildelimiter = !emptyempty($maildelimiter) ? "\r\n" : "\n"
  70.  
  71. $email_subject = '=?'.$charset.'?B?'.base64_encode(str_replace("\r"''str_replace("\n"''$email_subject))).'?='
  72. $mailsite = strstr($email_to,'@'); 
  73.  
  74. if (in_array($mailsite,array('@gmail.com',))) { 
  75. $email_message = 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"$email_message))))); 
  76. else { 
  77. $email_message = 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"$email_message)))))));     
  78.  
  79. foreach(explode(','$email_toas $touser) { 
  80. $tousers[] = $touser
  81. $email_to = implode(','$tousers); 
  82.  
  83. $headers = "From: $mailfrom{$maildelimiter}MIME-Version: 1.0{$maildelimiter}Content-type: text/plain; charset=$charset{$maildelimiter}Content-Transfer-Encoding: base64{$maildelimiter}"
  84.  
  85. if($mailsend == 1 && function_exists('mail')) { 
  86.  
  87. @mail($email_to$email_subject$email_message$headers); 
  88.  
  89. elseif($mailsend == 2) { 
  90.  
  91. if(!$fp = fsockopen($mailserver$mailport$errno$errstr, 30)) { 
  92. die ("SMTP($mailserver:$mailport CONNECT - Unable to connect to the SMTP server"); 
  93. stream_set_blocking($fp, true); 
  94.  
  95. $lastmessage = fgets($fp, 512); 
  96. if(substr($lastmessage, 0, 3) != '220') { 
  97. die ("SMTP($mailserver:$mailport CONNECT - $lastmessage"); 
  98.  
  99. fputs($fp, ($mailcfg['auth'] ? 'EHLO' : 'HELO')." SupeSite\r\n"); 
  100. $lastmessage = fgets($fp, 512); 
  101. if(substr($lastmessage, 0, 3) != 220 && substr($lastmessage, 0, 3) != 250) { 
  102. die ("SMTP($mailserver:$mailport HELO/EHLO - $lastmessage"); 
  103.  
  104. while(1) { 
  105. if(substr($lastmessage, 3, 1) != '-' || emptyempty($lastmessage)) { 
  106. break
  107. $lastmessage = fgets($fp, 512); 
  108.  
  109. if($mailauth) { 
  110. fputs($fp"AUTH LOGIN\r\n"); 
  111. $lastmessage = fgets($fp, 512); 
  112. if(substr($lastmessage, 0, 3) != 334) { 
  113. die ("SMTP($mailserver:$mailport AUTH LOGIN - $lastmessage"); 
  114.  
  115. fputs($fpbase64_encode($mailauth_username)."\r\n"); 
  116. $lastmessage = fgets($fp, 512); 
  117. if(substr($lastmessage, 0, 3) != 334) { 
  118. die ("SMTP($mailserver:$mailport USERNAME - $lastmessage"); 
  119.  
  120. fputs($fpbase64_encode($mailauth_password)."\r\n"); 
  121. $lastmessage = fgets($fp, 512); 
  122. if(substr($lastmessage, 0, 3) != 235) { 
  123. die ("SMTP($mailserver:$mailport PASSWORD - $lastmessage"); 
  124.  
  125. $mailfrom = $mailfrom
  126. fputs($fp"MAIL FROM: <".preg_replace("/.*\<(.+?)\>.*/""\\1"$mailfrom).">\r\n"); 
  127. $lastmessage = fgets($fp, 512); 
  128. if(substr($lastmessage, 0, 3) != 250) { 
  129. fputs($fp"MAIL FROM: <".preg_replace("/.*\<(.+?)\>.*/""\\1"$mailfrom).">\r\n"); 
  130. $lastmessage = fgets($fp, 512); 
  131. if(substr($lastmessage, 0, 3) != 250) { 
  132. die ("SMTP($mailserver:$mailport  MAIL FROM - $lastmessage"); 
  133.  
  134. foreach(explode(','$email_toas $touser) { 
  135. $touser = trim($touser); 
  136. if($touser) { 
  137. fputs($fp"RCPT TO: <".preg_replace("/.*\<(.+?)\>.*/""\\1"$touser).">\r\n"); 
  138. $lastmessage = fgets($fp, 512); 
  139. if(substr($lastmessage, 0, 3) != 250) { 
  140. fputs($fp"RCPT TO: <".preg_replace("/.*\<(.+?)\>.*/""\\1"$touser).">\r\n"); 
  141. $lastmessage = fgets($fp, 512); 
  142. die ("SMTP($mailserver:$mailport  RCPT TO - $lastmessage"); 
  143.  
  144. fputs($fp"DATA\r\n"); 
  145. $lastmessage = fgets($fp, 512); 
  146. if(substr($lastmessage, 0, 3) != 354) { 
  147. die ("SMTP($mailserver:$mailport DATA - $lastmessage"); 
  148.  
  149. $headers .= 'Message-ID: <'.gmdate('YmdHs').'.'.substr(md5($email_message.microtime()), 0, 6).rand(100000, 999999).'@'.$_SERVER['HTTP_HOST'].">{$maildelimiter}X-Priority: 3{$maildelimiter}X-Mailer: Discuz! Mailer{$maildelimiter}"
  150.  
  151. fputs($fp"Date: ".gmdate('r')."\r\n"); 
  152. fputs($fp"To: ".$email_to."\r\n"); 
  153. fputs($fp"Subject: ".$email_subject."\r\n"); 
  154. fputs($fp$headers."\r\n"); 
  155. fputs($fp"\r\n\r\n"); 
  156. fputs($fp"$email_message\r\n.\r\n"); 
  157. fputs($fp"QUIT\r\n"); 
  158.  
  159. elseif($mailsend == 3) { 
  160.  
  161. ini_set('SMTP'$mailserver); 
  162. ini_set('smtp_port'$mailport); 
  163. ini_set('sendmail_from'$mailfrom); 
  164.  
  165. @mail($email_to$email_subject$email_message$headers); 
  166.  

你可能感兴趣的:(PHP,发送邮件,sendmail)