手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆

PHP sendmail

首页 > PHP >

最近很多人问我如何发邮件,为什么mail函数无法发出去。我当时感慨了一下下。。。
mail函数是linux下面默认的发邮件函数,而且需要安装mail服务,同时要在PHP.ini里面配置好才能发送。 也有人嫌phpmailer太大,正好手头有一个discuz发邮件的类改的函数。贴上来。。。抛抛砖引引玉,不要砸人就行。
毛主席说:要温柔。。。

PHP代码
  1. <?php  
  2.   
  3. $mail = array(  
  4.     'server' => 'smtp.163.com',  
  5.     'port' => 25,  
  6.     'auth' => 1,  
  7.     'from' => '膘叔 <xxxxxx%163.com>' ,   //一定要是这种格式,否则可能发不出去  
  8.     'auth_username' => '膘叔',//发信人帐号,登录邮箱用的,一般不用加域,如果发不出去就尝试加上域看看  
  9.     'auth_password' => '发信人密码'//发信人密码  
  10.     'maildelimiter' => 0,   //断行符是用还是\r还是\n,1为,2为\r其它为\n  
  11.     'mailusername' => 1,    //是否显示发信人名字  
  12.     'sendmail_silent' => 1,  
  13.     'charset'=>'utf-8',     //这就要看你的设定了,utf-8还是gbk(如果这里改成了gbk,那么,本文件一定要另存为ansi格式,否则就是乱码)  
  14.     'adminname' => '小苟',    //显示在邮箱的发件人  
  15.     'adminemail'=>'admin%admin.com',//如果没有$email_from邮箱,就用这个默认的  
  16. );  
  17. $actName = '操作名称' ; //网站名称,会自动放在主题里,或者你也可以试着修改这个来让别人知道你的标题,比如“系统回复”,“签收”,等  
  18.   
  19. sendmail('小苟 <ttttt%vip.qq.com >,gouki <10000%qq.com>' , 'hahahaha' , '内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容');  
  20. echo'over' );  
  21.   
  22. function sendmail ($email_to$email_subject$email_message$email_from = ''){  
  23.     global $mail , $actName;  
  24.     function errorlog ($type='',$info=''){  
  25.         $data = '['.$type.']'.$info . "\n";  
  26.         file_put_contents'mail_log.txt'$data , FILE_APPEND  );  
  27.     }  
  28.     $maildelimiter = $mail['maildelimiter'] == 1 ? "" : ($mail['maildelimiter'] == 2 ? "\r" : "\n");  
  29.     $mailusername = isset($mail['mailusername']) ? $mail['mailusername'] : 1;  
  30.   
  31.     $email_subject = '=?'.$mail['charset'].'?B?'.base64_encode(str_replace("\r"''str_replace("\n"'''['.$actName.'] '.$email_subject))).'?=';  
  32.     $email_message = chunk_split(base64_encode(str_replace("."" .."str_replace("\n"""str_replace("\r""\n"str_replace("""\n"str_replace("\n\r""\r"$email_message)))))));  
  33.   
  34.     $email_from = $email_from == '' ? '=?'.$mail['charset'].'?B?'.base64_encode($mail['adminname'])."?= <$mail[adminemail]>" : (preg_match('/^(.+?) \<(.+?)\>$/',$email_from$from) ? '=?'.$mail['charset'].'?B?'.base64_encode($from[1])."?= <$from[2]>" : $email_from);  
  35.   
  36.     foreach(explode(','$email_toas $touser) {  
  37.         $tousers[] = preg_match('/^(.+?) \<(.+?)\>$/',$touser$to) ? ($mailusername ? '=?'.$mail['charset'].'?B?'.base64_encode($to[1])."?= <$to[2]>" : $to[2]) : $touser;  
  38.     }  
  39.     $email_to = implode(','$tousers);  
  40.   
  41.     $headers = "From: $email_from{$maildelimiter}X-Priority: 3{$maildelimiter}X-Mailer: Gouki! {$maildelimiter}MIME-Version: 1.0{$maildelimiter}Content-type: text/plain; charset={$mail[charset]}{$maildelimiter}Content-Transfer-Encoding: base64{$maildelimiter}";  
  42.   
  43.     $mail['port'] = $mail['port'] ? $mail['port'] : 25;  
  44.   
  45.     if(!$fp = fsockopen($mail['server'], $mail['port'], $errno$errstr, 30)) {  
  46.         errorlog('SMTP'"($mail[server]:$mail[port]) CONNECT - Unable to connect to the SMTP server", 0);  
  47.     }  
  48.     stream_set_blocking($fp, true);  
  49.   
  50.     $lastmessage = fgets($fp, 512);  
  51.     if(substr($lastmessage, 0, 3) != '220') {  
  52.         errorlog('SMTP'"$mail[server]:$mail[port] CONNECT - $lastmessage", 0);  
  53.     }  
  54.   
  55.     fputs($fp, ($mail['auth'] ? 'EHLO' : 'HELO')." gouki ");  
  56.     $lastmessage = fgets($fp, 512);  
  57.     if(substr($lastmessage, 0, 3) != 220 && substr($lastmessage, 0, 3) != 250) {  
  58.         errorlog('SMTP'"($mail[server]:$mail[port]) HELO/EHLO - $lastmessage", 0);  
  59.     }  
  60.   
  61.     while(1) {  
  62.         if(substr($lastmessage, 3, 1) != '-' || emptyempty($lastmessage)) {  
  63.             break;  
  64.         }  
  65.         $lastmessage = fgets($fp, 512);  
  66.     }  
  67.   
  68.     if($mail['auth']) {  
  69.         fputs($fp"AUTH LOGIN");  
  70.         $lastmessage = fgets($fp, 512);  
  71.         if(substr($lastmessage, 0, 3) != 334) {  
  72.             errorlog('SMTP'"($mail[server]:$mail[port]) AUTH LOGIN - $lastmessage", 0);  
  73.         }  
  74.   
  75.         fputs($fpbase64_encode($mail['auth_username'])."");  
  76.         $lastmessage = fgets($fp, 512);  
  77.         if(substr($lastmessage, 0, 3) != 334) {  
  78.             errorlog('SMTP'"($mail[server]:$mail[port]) USERNAME - $lastmessage", 0);  
  79.         }  
  80.   
  81.         fputs($fpbase64_encode($mail['auth_password'])."");  
  82.         $lastmessage = fgets($fp, 512);  
  83.         if(substr($lastmessage, 0, 3) != 235) {  
  84.             errorlog('SMTP'"($mail[server]:$mail[port]) PASSWORD - $lastmessage", 0);  
  85.         }  
  86.   
  87.         $email_from = $mail['from'];  
  88.     }  
  89.   
  90.     fputs($fp"MAIL FROM: <".preg_replace("/.*\<(.+?)\>.*/""\\1"$email_from).">");  
  91.     $lastmessage = fgets($fp, 512);  
  92.     if(substr($lastmessage, 0, 3) != 250) {  
  93.         fputs($fp"MAIL FROM: <".preg_replace("/.*\<(.+?)\>.*/""\\1"$email_from).">");  
  94.         $lastmessage = fgets($fp, 512);  
  95.         if(substr($lastmessage, 0, 3) != 250) {  
  96.             errorlog('SMTP'"($mail[server]:$mail[port]) MAIL FROM - $lastmessage", 0);  
  97.         }  
  98.     }  
  99.   
  100.     $email_tos = array();  
  101.     foreach(explode(','$email_toas $touser) {  
  102.         $touser = trim($touser);  
  103.         if($touser) {  
  104.             fputs($fp"RCPT TO: <".preg_replace("/.*\<(.+?)\>.*/""\\1"$touser).">");  
  105.             $lastmessage = fgets($fp, 512);  
  106.             if(substr($lastmessage, 0, 3) != 250) {  
  107.                 fputs($fp"RCPT TO: <".preg_replace("/.*\<(.+?)\>.*/""\\1"$touser).">");  
  108.                 $lastmessage = fgets($fp, 512);  
  109.                 errorlog('SMTP'"($mail[server]:$mail[port]) RCPT TO - $lastmessage", 0);  
  110.             }  
  111.         }  
  112.     }  
  113.   
  114.     fputs($fp"DATA");  
  115.     $lastmessage = fgets($fp, 512);  
  116.     if(substr($lastmessage, 0, 3) != 354) {  
  117.         errorlog('SMTP'"($mail[server]:$mail[port]) DATA - $lastmessage", 0);  
  118.     }  
  119.   
  120.     $headers .= 'Message-ID: <'.gmdate('YmdHs').'.'.substr(md5($email_message.microtime()), 0, 6).rand(100000, 999999).'@'.$_SERVER['HTTP_HOST'].">{$maildelimiter}";  
  121.   
  122.     fputs($fp"Date: ".gmdate('r')."");  
  123.     fputs($fp"To: ".$email_to."");  
  124.     fputs($fp"Subject: ".$email_subject."");  
  125.     fputs($fp$headers."");  
  126.     fputs($fp"");  
  127.     fputs($fp"$email_message.");  
  128.     fputs($fp"QUIT");  
  129. }  
  130. ?>  

 已经写的够详细了,请不要提问,我也不会解答的,谢谢




本站采用创作共享版权协议, 要求署名、非商业和保持一致. 本站欢迎任何非商业应用的转载, 但须注明出自"易栈网-膘叔", 保留原始链接, 此外还必须标注原文标题和链接.

Tags: discuz, sendmail, php

« 上一篇 | 下一篇 »

只显示10条记录相关文章

使用PHP得到所有的HTTP请求头 (浏览: 62673, 评论: 3)
我为什么会选用phpstorm (浏览: 52515, 评论: 5)
快速生成目录树 (浏览: 46706, 评论: 7)
通过file_get_contents来Post数据的实例 (浏览: 46281, 评论: 5)
PHP导入导出Excel方法 (浏览: 45076, 评论: 3)
PHP的XSS攻击过滤函数 (浏览: 42613, 评论: 2)
PHP中Eval的作用 (浏览: 41545, 评论: 4)
超详细:在Mac OS X中配置Apache + PHP + MySQL (浏览: 40225, 评论: 1)
PHP常见错误(二) (浏览: 39689, 评论: 1)
几个ZendStudio使用教程 (浏览: 36361, 评论: 0)

7条记录访客评论

六年了啊

Post by 毅 on 2014, June 6, 5:21 PM 引用此文发表评论 #1

农历07? ^_^

Post by 小茗 on 2008, December 22, 11:24 AM 引用此文发表评论 #2

引用 小茗 说过的话:
'adminname' => '小苟'
sendmail('小苟 <ttttt%vip.qq.com >
这代码07年写的吧 丫的....
这明明就是今年1月份左右的时候写的。忘了?NND。。。。
你不是要群发邮件嘛。。

Post by gouki on 2008, December 18, 6:26 PM 引用此文发表评论 #3

'adminname' => '小苟'

sendmail('小苟 <ttttt%vip.qq.com >

这代码07年写的吧 丫的....

Post by 小茗 on 2008, December 18, 1:38 PM 引用此文发表评论 #4

果然崩溃了

Post by gouki on 2008, August 15, 4:11 PM 引用此文发表评论 #5

看不懂……
崩溃吧?

Post by ke on 2008, August 15, 11:18 AM 引用此文发表评论 #6

HOHO,伟大的彪素


嘿嘿

Post by 汗神 on 2008, July 17, 3:51 PM 引用此文发表评论 #7


发表评论

评论内容 (必填):