从DISCUZ里抽取了邮件程序统的核心以通用之
人从DISCUZ里抽取了邮件程序统的核心,自己写了个邮件程序系统。程序代码(mail.func.php)如下:
< ?php
/**
* 邮件群发应用解决方案
* @name [CHENHUCHENG]
* @copyright WWW.CHENHUCHENG.COM
* @author 陈虎城
* @package 全局变量配置
* @version 1.0 (20071121)
*/
/**
* 邮件系统发送邮件
*
* @param unknown_type $sql
*/
function mail_send($email_to, $email_subject, $email_message, $email_from = ”) {
//读取邮件系统配置
$mail = $GLOBALS['_Mail_Conf'];
//邮件类型:text/html或text/plain
$contenttype = “text/plain”;
//邮件标题前辍
$bbname = “致”;
//默认的管理员邮件地址
$adminemail = “CHINA.SALE@QQ.COM”;
//邮件系统所使用的编码
$charset = $mail['charset'];
//报错设定
if($mail['sendmail_silent']) {
error_reporting(0);
}
//返回值设定
$return = array(”status” => false, “msg” => array(), “result” => array());
$maildelimiter = $mail['maildelimiter'] == 1 ? “\r\n” : ($mail['maildelimiter'] == 2 ? “\r” : “\n”);
$email_subject = ‘=?’.$charset.’?B?’.base64_encode(str_replace(”\r”, ”, str_replace(”\n”, ”, ‘['.$bbname.'] ‘.$email_subject))).’?=’;
$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)))))));
$email_from = $email_from == ” ? ‘=?’.$charset.’?B?’.base64_encode($bbname).”?= < $adminemail>” : (preg_match(’/^(.+?) \< (.+?)\>$/’,$email_from, $from) ? ‘=?’.$charset.’?B?’.base64_encode($from[1]).”?= < $from[2]>” : $email_from);
$headers = “From: $email_from{$maildelimiter}X-Priority: 3{$maildelimiter}X-Mailer: chenhucheng{$maildelimiter}MIME-Version: 1.0{$maildelimiter}Content-type: {$contenttype}; charset=$charset{$maildelimiter}Content-Transfer-Encoding: base64{$maildelimiter}”;
$mail['port'] = $mail['port'] ? $mail['port'] : 25;
if($mail['mailsend'] == 1 && function_exists(’mail’)) {
@mail($email_to, $email_subject, $email_message, $headers);
$return['status'] = 1;
$return['msg'] = “Mail Send OK”;
return $return;
} elseif($mail['mailsend'] == 2) {
if(!$fp = fsockopen($mail['server'], $mail['port'], $errno, $errstr, 30)) {
$return['status'] = 0;
$return['msg'] = “({$mail[server]}:{$mail[port]}) CONNECT - Unable to connect to the SMTP server”;
return $return;
}
stream_set_blocking($fp, true);
$lastmessage = fgets($fp, 512);
if(substr($lastmessage, 0, 3) != ‘220′) {
$return['status'] = 0;
$return['msg'] = “{$mail[server]}:{$mail[port]} CONNECT - {$lastmessage}”;
return $return;
}
fputs($fp, ($mail['auth'] ? ‘EHLO’ : ‘HELO’).” chenhucheng\r\n”);
$lastmessage = fgets($fp, 512);
if(substr($lastmessage, 0, 3) != 220 && substr($lastmessage, 0, 3) != 250) {
$return['status'] = 0;
$return['msg'] = “({$mail[server]}:{$mail[port]}) HELO/EHLO - {$lastmessage}”;
return $return;
}
while(1) {
if(substr($lastmessage, 3, 1) != ‘-’ || empty($lastmessage)) {
break;
}
$lastmessage = fgets($fp, 512);
}
if($mail['auth']) {
fputs($fp, “AUTH LOGIN\r\n”);
$lastmessage = fgets($fp, 512);
if(substr($lastmessage, 0, 3) != 334) {
$return['status'] = 0;
$return['msg'] = “($mail[server]:$mail[port]) AUTH LOGIN - $lastmessage”;
return $return;
}
fputs($fp, base64_encode($mail['auth_username']).”\r\n”);
$lastmessage = fgets($fp, 512);
if(substr($lastmessage, 0, 3) != 334) {
$return['status'] = 0;
$return['msg'] = “($mail[server]:$mail[port]) USERNAME - $lastmessage”;
return $return;
}
fputs($fp, base64_encode($mail['auth_password']).”\r\n”);
$lastmessage = fgets($fp, 512);
if(substr($lastmessage, 0, 3) != 235) {
$return['status'] = 0;
$return['msg'] = “($mail[server]:$mail[port]) PASSWORD - $lastmessage”;
return $return;
}
$email_from = $mail['from'];
}
fputs($fp, “MAIL FROM: < “.preg_replace(”/.*\<(.+?)\>.*/”, “\\1″, $email_from).”>\r\n”);
$lastmessage = fgets($fp, 512);
if(substr($lastmessage, 0, 3) != 250) {
fputs($fp, “MAIL FROM: < “.preg_replace(”/.*\<(.+?)\>.*/”, “\\1″, $email_from).”>\r\n”);
$lastmessage = fgets($fp, 512);
if(substr($lastmessage, 0, 3) != 250) {
$return['status'] = 0;
$return['msg'] = “($mail[server]:$mail[port]) MAIL FROM - $lastmessage”;
return $return;
}
}
$email_tos = array();
foreach(explode(’,', $email_to) as $touser) {
$touser = trim($touser);
if($touser) {
fputs($fp, “RCPT TO: < “.preg_replace(”/.*\<(.+?)\>.*/”, “\\1″, $touser).”>\r\n”);
$lastmessage = fgets($fp, 512);
if(substr($lastmessage, 0, 3) != 250) {
fputs($fp, “RCPT TO: < “.preg_replace(”/.*\<(.+?)\>.*/”, “\\1″, $touser).”>\r\n”);
$lastmessage = fgets($fp, 512);
$return['status'] = 0;
$return['msg'] = “($mail[server]:$mail[port]) RCPT TO - $lastmessage”;
return $return;
}
}
}
fputs($fp, “DATA\r\n”);
$lastmessage = fgets($fp, 512);
if(substr($lastmessage, 0, 3) != 354) {
$return['status'] = 0;
$return['msg'] = “($mail[server]:$mail[port]) DATA - $lastmessage”;
return $return;
}
$headers .= ‘Message-ID: < ‘.gmdate(’YmdHs’).’.’.substr(md5($email_message.microtime()), 0, 6).rand(100000, 999999).’@’.$_SERVER['HTTP_HOST'].”>{$maildelimiter}”;
fputs($fp, “Date: “.gmdate(’r').”\r\n”);
fputs($fp, “To: “.$email_to.”\r\n”);
fputs($fp, “Subject: “.$email_subject.”\r\n”);
fputs($fp, $headers.”\r\n”);
fputs($fp, “\r\n\r\n”);
fputs($fp, “$email_message\r\n.\r\n”);
fputs($fp, “QUIT\r\n”);
$return['status'] = 1;
$return['msg'] = “Smtp Send OK”;
return $return;
}
}
?>
使用方法举例:
if (mail(”web@chenhucheng.com”, “发给你的邮件”, “邮件内容”, “显示我的邮件地址”)) {
echo “OK”;
}
Tags: email system, 邮件程序系统

Comments
还没有评论。
请您留下评论