一个函数搞定邮件发送(SMTP)
2011-05-26 18:30
323 查看
不知道什么原因。csdn的编辑器把所有的\r\n变成了/r/n。导致服务器无响应并发送失败。请把所有的/r/n替换为\r\n即可。
方法:
调用:
方法:
function send_mail($config) { $config = array_merge(array('charset'=>'UTF-8','port'=>25,'ssl'=>false),$config); $maildelimiter = "/r/n"; $config['subject'] = '=?'.$config['charset'].'?B?'.base64_encode(str_replace(array("/r","/n"),NULL,$config['subject'])).'?='; $config['content'] = 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", $config['content']))))))); $email_from = preg_match('/^(.+?) /<(.+?)/>$/',$config['from'], $from) ? '=?'.$config['charset'].'?B?'.base64_encode($from['1'])."?= <".$from['2'].">" : $config['from']; $headers = "From: $email_from{$maildelimiter}X-Priority: 3{$maildelimiter}X-Mailer: blog.csdn.net/yafeikf{$maildelimiter}MIME-Version: 1.0{$maildelimiter}Content-type: text/html;charset={$config['charset']}{$maildelimiter}Content-Transfer-Encoding: base64{$maildelimiter}"; // connect mail server if(!$fp=@fsockopen(($config['ssl']?'ssl://':'').$config['host'],$config['port'],$errno,$error,30)) return 'connect error'; stream_set_blocking($fp,1); // login mail server $lm = fread($fp,512); if(substr($lm,0,3) != '220') return $lm; fwrite($fp,"EHLO cevin/r/n"); $lm = fread($fp,512); if(!in_array(substr($lm,0,3),array('220','250'))) return $lm; fwrite($fp,"AUTH LOGIN/r/n"); $lm = fread($fp,512); if(substr($lm,0,3)!='334') return $lm; fwrite($fp,base64_encode($config['user'])."/r/n"); $lm = fread($fp,512); if(substr($lm,0,3)!='334') return $lm; fwrite($fp,base64_encode($config['pass'])."/r/n"); $lm = fread($fp,512); if(substr($lm,0,3)!='235') return $lm; // send mail header fwrite($fp,"MAIL FROM:<{$config['user']}>/r/n"); $lm = fread($fp,512); if(substr($lm,0,3)!='250') return $lm; fwrite($fp,"RCPT TO:<{$config['to']}>/r/n"); $lm = fread($fp,512); if(substr($lm,0,3)!='250') return $lm; // send mail body with header fwrite($fp,"DATA/r/n"); $lm = fread($fp,512); if(substr($lm,0,3)!='354') return $lm; mt_srand(); $headers .= 'Message-ID: <'.md5($config['content'].microtime().mt_rand(100000,999999)).".>/r/n"; fwrite($fp,'Date: '.gmdate('r')."/r/n"); fwrite($fp,"To: {$config['to']}/r/n"); fwrite($fp,"Subject: {$config['subject']}/r/n"); fwrite($fp,$headers."/r/n/r/n/r/n"); fwrite($fp,$config['content']."/r/n./r/n"); $lm = fread($fp,512); if(substr($lm,0,3)!=250) return $lm; // logout mail server fwrite($fp,"QUIT/r/n"); return true; }
调用:
$config = array(); $config['to'] = 'conall@163.com'; $config['subject'] = '哈哈'; $config['content'] = '<a href="http://www.thinkbuy.net/" mce_href="http://www.thinkbuy.net/">TGB</a>'; $config['from'] = '百度客户中心(你懂的) <user@baidu.com>'; $config['host'] = 'smtp.qq.com'; $config['user'] = 'xxxx@qq.com'; $config['pass'] = '***********'; $msr = send_mail($config); echo $msr === true ? 'send succeed.':'send error:'.$msr;
相关文章推荐
- XAMPP 下配置SMTP mail服务,使PHP的mail() 函数可以发送邮件
- VB.NET的一个邮件发送函数
- python(通过flask实现一个http接口)调用这个接口实现第三方smtp发送邮件
- C#真他妈神奇,一个函数都不用写就能实现一个简单的邮件发送工具
- fsockopen pfsockopen函数被禁用,SMTP发送邮件不正常的解决方法
- 一个验证smtp方式发送邮件的php脚本
- fsockopen pfsockopen函数被禁用,SMTP发送邮件不正常的解决方法
- Oracle 11g 环境,使用utl_smtp创建一个存储过程来发送邮件
- 用python 发送一个smtp邮件
- C#中邮件发送的函数(使用SMTP)
- 使用smtp发送邮件所有的一个类.
- 一个通过smtp发送邮件的shell,带用户名密码
- javax.mail 发送邮件, 一个类搞定。。 转载!!!
- .net 1.1 下不使用 system.web.mail.smtpmail 发送邮件的其它选择_asp.net技巧
- 利用System.Net.Mail 的SmtpClient发送邮件
- 如何在ASP.NET中使用SmtpMail发送邮件
- Sendmail 设置为本地SMTP服务器给客户端发送邮件
- Linux下配置mail使用外部SMTP发送邮件
- delphi indy smtp 发送邮件
- python模块学习 ---- smtplib 邮件发送