您的位置:首页 > 编程语言 > PHP开发

一个函数搞定邮件发送(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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: