PHP邮件代发代码API

时间:2014-02-24  发布人:SHX  浏览次数:6914  评论:3

在很多时候,我们需要网站做一些发邮件的工作。比如:邮箱验证、密码找回等。下面就给大家介绍一个利用smtp发送邮件的方式:

<?php
/**
003
 * smtp邮件发送函数
004
 * site www.jbxue.com
005
 使用方法 sendmail('发送地址', '邮件主题', '邮件内容')
006
*/
 
$bfconfig = Array (
 'sitename' => '脚本学堂', //这里填写网站名称
 );
 
$mail = Array (
 'state' => 1,
 'server' => 'smtp.qq.com',
 'port' => 25,
 'auth' => 1,
 'username' => '',//用户名
 'password' => '',//密码
 'charset' => 'gbk',
 'mailfrom' => ''//发件人
 );
 
function sendmail($mail_to, $mail_subject, $mail_message) {
 
 global $mail, $bfconfig;
 
 date_default_timezone_set('PRC');
 
 $mail_subject = '=?'.$mail['charset'].'?B?'.base64_encode($mail_subject).'?=';
 $mail_message = (base64_encode(preg_replace("/(^|(\r\n))(\.)/", "\1.\3", $mail_message)));
 
 $headers .= "";
 $headers .= "MIME-Version:1.0\r\n";
 $headers .= "Content-type:text/html\r\n";
 $headers .= "Content-Transfer-Encoding: base64\r\n";
 $headers .= "From: ".$bfconfig['sitename']."<".$mail['mailfrom'].">\r\n";
 $headers .= "Date: ".date("r")."\r\n";
 list($msec, $sec) = '(" ", microtime())';
 $headers .= "Message-ID: <".date("YmdHis", $sec).".".($msec * 1000000).".".$mail['mailfrom'].">\r\n";
 
 if(!$fp = fsockopen($mail['server'], $mail['port'], $errno, $errstr, 30)) {
  exit("CONNECT - Unable to connect to the SMTP server");
 }
 
 stream_set_blocking($fp, true);
 
 $lastmessage = fgets($fp, 512);
 if(substr($lastmessage, 0, 3) != '220') {
  exit("CONNECT - ".$lastmessage);
 }
 
 fputs($fp, ($mail['auth'] ? 'EHLO' : 'HELO')." befen\r\n");
 $lastmessage = fgets($fp, 512);
 if(substr($lastmessage, 0, 3) != 220 && substr($lastmessage, 0, 3) != 250) {
  exit("HELO/EHLO - ".$lastmessage);
 }
 
 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) {
   exit($lastmessage);
  }
 
  fputs($fp, base64_encode($mail['username'])."\r\n");
  $lastmessage = fgets($fp, 512);
  if(substr($lastmessage, 0, 3) != 334) {
   exit("AUTH LOGIN - ".$lastmessage);
  }
 
  fputs($fp, base64_encode($mail['password'])."\r\n");
  $lastmessage = fgets($fp, 512);
  if(substr($lastmessage, 0, 3) != 235) {
   exit("AUTH LOGIN - ".$lastmessage);
  }
 
  $email_from = $mail['mailfrom'];
 }
 
 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) {
   exit("MAIL FROM - ".$lastmessage);
  }
 }
 
 foreach(explode(',', $mail_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);
    exit("RCPT TO - ".$lastmessage);
   }
  }
 }
 
 fputs($fp, "DATA\r\n");
 $lastmessage = fgets($fp, 512);
 if(substr($lastmessage, 0, 3) != 354) {
  exit("DATA - ".$lastmessage);
 }
 
 fputs($fp, $headers);
 fputs($fp, "To: ".$mail_to."\r\n");
 fputs($fp, "Subject: $mail_subject\r\n");
 fputs($fp, "\r\n\r\n");
 fputs($fp, "$mail_message\r\n.\r\n");
 $lastmessage = fgets($fp, 512);
 if(substr($lastmessage, 0, 3) != 250) {
  exit("END - ".$lastmessage);
 }
 
 fputs($fp, "QUIT\r\n");
}

sendmail('1637838569@qq.com', '邮件主题', '邮件内容')
?>

这里的smtp

'server' => 'smtp.qq.com'

可以是个大邮箱提供商的,比如QQ邮箱、163邮箱等等;

QQ邮箱:smtp.qq.com

163邮箱: smtp.163.com

QQ个人免费企业邮箱:smtp.exmail.qq.com

返回

上一篇:XP系统的结束,继承者windows7下一篇:三国演义告诉我们的人生60条真理

我要评论

    loading
 

关闭

loading

回顶部