php使用smtp发送邮件的实现代码

php中文网
发布: 2016-07-25 08:54:47
原创
1001人浏览过
为大家举一个php使用smtp发送邮件的代码,简单实用,有需要的朋友,可以参考下。 完整代码如下。
<?php
/**
 * smtp邮件发送函数
 * site bbs.it-home.org
 使用方法 sendmail('发送地址', '邮件主题', '邮件内容')
*/

$bfconfig = Array (
 'sitename' => '脚本学堂', //这里填写网站名称
 );

$mail = Array (
 'state' => 1,
 'server' => 'smtp.abc.com',
 'port' => 25,
 'auth' => 1,
 'username' => 'admin@abc.com',
 'password' => '123456',
 'charset' => 'gbk',
 'mailfrom' => 'admin@abc.com'
 );

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 = chunk_split(base64_encode(preg_replace("/(^|(
))(.)/", ".", $mail_message)));

 $headers .= "";
 $headers .= "MIME-Version:1.0
";
 $headers .= "Content-type:text/html
";
 $headers .= "Content-Transfer-Encoding: base64
";
 $headers .= "From: ".$bfconfig['sitename']."<".$mail['mailfrom'].">
";
 $headers .= "Date: ".date("r")."
";
 list($msec, $sec) = explode(" ", microtime());
 $headers .= "Message-ID: <".date("YmdHis", $sec).".".($msec * 1000000).".".$mail['mailfrom'].">
";

 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
");
 $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
");
  $lastmessage = fgets($fp, 512);
  if(substr($lastmessage, 0, 3) != 334) {
   exit($lastmessage);
  }

  fputs($fp, base64_encode($mail['username'])."
");
  $lastmessage = fgets($fp, 512);
  if(substr($lastmessage, 0, 3) != 334) {
   exit("AUTH LOGIN - ".$lastmessage);
  }

  fputs($fp, base64_encode($mail['password'])."
");
  $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).">
");
 $lastmessage = fgets($fp, 512);
 if(substr($lastmessage, 0, 3) != 250) {
  fputs($fp, "MAIL FROM: <".preg_replace("/.*<(.+?)>.*/", "\1", $email_from).">
");
  $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).">
");
   $lastmessage = fgets($fp, 512);
   if(substr($lastmessage, 0, 3) != 250) {
    fputs($fp, "RCPT TO: <".preg_replace("/.*<(.+?)>.*/", "\1", $touser).">
");
    $lastmessage = fgets($fp, 512);
    exit("RCPT TO - ".$lastmessage);
   }
  }
 }

 fputs($fp, "DATA
");
 $lastmessage = fgets($fp, 512);
 if(substr($lastmessage, 0, 3) != 354) {
  exit("DATA - ".$lastmessage);
 }

 fputs($fp, $headers);
 fputs($fp, "To: ".$mail_to."
");
 fputs($fp, "Subject: $mail_subject
");
 fputs($fp, "

");
 fputs($fp, "$mail_message
.
");
 $lastmessage = fgets($fp, 512);
 if(substr($lastmessage, 0, 3) != 250) {
  exit("END - ".$lastmessage);
 }

 fputs($fp, "QUIT
");
}
?>
登录后复制


PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号