从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: ,

相关的文章:

如果你喜欢本内容,请回贴 或者 订阅 以更方便地你使用本站服务。

Comments

还没有评论。

请您留下评论

(必填)

(必填)