/**

* 记录数据

*/

function runlog($mode = ‘SMTP‘,$b = ‘‘,$c = ‘‘,$d=‘‘) {

}

/**

* 发送邮件

* @param $toemail 收件人email

* @param $subject 邮件主题

* @param $message 正文

*/

function sendmail($toemail, $subject, $message) {

$config = array (

‘mailsend‘ => 2,

‘maildelimiter‘ => 1,

‘mailusername‘ => 1,

‘server‘ => ‘smtp.qq.com‘,

‘port‘ => 25,

‘mail_type‘ => 1,

‘auth‘ => 1,

‘from‘ => ‘123456@qq.com‘,

‘auth_username‘ => ‘123456@qq.com‘,

‘auth_password‘ => ‘password‘,

);

$charset = ‘utf-8‘;

$mail = $config;

$from = $config[‘from‘];

$mail_type = $config[‘mail_type‘];

//mail 发送模式

if($mail_type==0) {

$headers = ‘MIME-Version: 1.0‘ . "\r\n";

$headers .= ‘Content-type: text/html; charset=‘.$charset.‘‘ . "\r\n";

$headers .= ‘From: ‘ . "\r\n";

mail($toemail, $subject, $message, $headers);

return true;

}

//邮件头的分隔符

$maildelimiter = $mail[‘maildelimiter‘] == 1 ? "\r\n" : ($mail[‘maildelimiter‘] == 2 ? "\r" : "\n");

//收件人地址中包含用户名

$mailusername = isset($mail[‘mailusername‘]) ? $mail[‘mailusername‘] : 1;

//端口

$mail[‘port‘] = $mail[‘port‘] ? $mail[‘port‘] : 25;

$mail[‘mailsend‘] = $mail[‘mailsend‘] ? $mail[‘mailsend‘] : 1;

//发信者

$email_from = $from == ‘‘ ? ‘=?‘.$charset.‘?B?‘."?= " : (preg_match(‘/^(.+?) \$/‘,$from, $mats) ? ‘=?‘.$charset.‘?B?‘.base64_encode($mats[1])."?= " : $from);

$email_to = preg_match(‘/^(.+?) \$/‘,$toemail, $mats) ? ($mailusername ? ‘=?‘.$charset.‘?B?‘.base64_encode($mats[1])."?= " : $mats[2]) : $toemail;;

$email_subject = ‘=?‘.$charset.‘?B?‘.base64_encode(preg_replace("/[\r|\n]/", ‘‘, $subject)).‘?=‘;

$email_message = chunk_split(base64_encode(str_replace("\n", "\r\n", str_replace("\r", "\n", str_replace("\r\n", "\n", str_replace("\n\r", "\r", $message))))));

$headers = "From: $email_from{$maildelimiter}X-Priority: 3{$maildelimiter}X-Mailer: PHPCMS-V9 {$maildelimiter}MIME-Version: 1.0{$maildelimiter}Content-type: text/html; charset=".$charset."{$maildelimiter}Content-Transfer-Encoding: base64{$maildelimiter}";

if(!$fp = fsockopen($mail[‘server‘], $mail[‘port‘], $errno, $errstr, 30)) {

runlog(‘SMTP‘, "($mail[server]:$mail[port]) CONNECT - Unable to connect to the SMTP server", 0);

return false;

}

stream_set_blocking($fp, true);

$lastmessage = fgets($fp, 512);

if(substr($lastmessage, 0, 3) != ‘220‘) {

runlog(‘SMTP‘, "$mail[server]:$mail[port] CONNECT - $lastmessage", 0);

return false;

}

fputs($fp, ($mail[‘auth‘] ? ‘EHLO‘ : ‘HELO‘)." phpcms\r\n");

$lastmessage = fgets($fp, 512);

if(substr($lastmessage, 0, 3) != 220 && substr($lastmessage, 0, 3) != 250) {

runlog(‘SMTP‘, "($mail[server]:$mail[port]) HELO/EHLO - $lastmessage", 0);

return false;

}

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) {

runlog(‘SMTP‘, "($mail[server]:$mail[port]) AUTH LOGIN - $lastmessage", 0);

return false;

}

fputs($fp, base64_encode($mail[‘auth_username‘])."\r\n");

$lastmessage = fgets($fp, 512);

if(substr($lastmessage, 0, 3) != 334) {

runlog(‘SMTP‘, "($mail[server]:$mail[port]) USERNAME - $lastmessage", 0);

return false;

}

fputs($fp, base64_encode($mail[‘auth_password‘])."\r\n");

$lastmessage = fgets($fp, 512);

if(substr($lastmessage, 0, 3) != 235) {

runlog(‘SMTP‘, "($mail[server]:$mail[port]) PASSWORD - $lastmessage", 0);

return false;

}

$email_from = $mail[‘from‘];

}

fputs($fp, "MAIL FROM: .*/", "\\1", $email_from).">\r\n");

$lastmessage = fgets($fp, 512);

if(substr($lastmessage, 0, 3) != 250) {

fputs($fp, "MAIL FROM: .*/", "\\1", $email_from).">\r\n");

$lastmessage = fgets($fp, 512);

if(substr($lastmessage, 0, 3) != 250) {

runlog(‘SMTP‘, "($mail[server]:$mail[port]) MAIL FROM - $lastmessage", 0);

return false;

}

}

fputs($fp, "RCPT TO: .*/", "\\1", $toemail).">\r\n");

$lastmessage = fgets($fp, 512);

if(substr($lastmessage, 0, 3) != 250) {

fputs($fp, "RCPT TO: .*/", "\\1", $toemail).">\r\n");

$lastmessage = fgets($fp, 512);

runlog(‘SMTP‘, "($mail[server]:$mail[port]) RCPT TO - $lastmessage", 0);

return false;

}

fputs($fp, "DATA\r\n");

$lastmessage = fgets($fp, 512);

if(substr($lastmessage, 0, 3) != 354) {

runlog(‘SMTP‘, "($mail[server]:$mail[port]) DATA - $lastmessage", 0);

return false;

}

$headers .= ‘Message-ID: {$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");

$lastmessage = fgets($fp, 512);

if(substr($lastmessage, 0, 3) != 250) {

runlog(‘SMTP‘, "($mail[server]:$mail[port]) END - $lastmessage", 0);

}

fputs($fp, "QUIT\r\n");

return true;

}

?>

php mail函数_php 发送邮件函数相关推荐

  1. java回调函数_PHP回调函数及匿名函数概念与用法详解

    1.回调函数 PHP的回调函数其实和C.Java等语言的回调函数的作用是一模一样的,都是在主线程执行的过程中,突然跳去执行设置的回调函数: 回调函数执行完毕之后,再回到主线程处理接下来的流程 而在ph ...

  2. mysql_assoc函数_PHP:MySQL函数mysql_fetch_assoc()的用法

    mysql_fetch_assoc (PHP 4 >= 4.0.3, PHP 5) mysql_fetch_assoc - 从结果集中取得一行作为关联数组 Warning 本扩展自 PHP 5. ...

  3. php rename函数_php rename函数怎么用

    PHP rename()函数用于重命名文件或目录,语法"rename(文件旧名称,新名称,句柄环境)",使用用户指定的新名称更改文件或目录的旧名称,并且可以根据需要在目录之间移动: ...

  4. php rename函数_PHP rename函数使用详解(php重命名文件)

    PHP中的rename()函数是一个内置函数,用于重命名文件或目录.它尝试用用户指定的新名称更改文件或目录的旧名称,并且在必要时可以在目录之间移动. 如果用户指定的新名称已经存在,rename()函数 ...

  5. php 危险函数_PHP 危险函数有哪些?

    在编译 PHP 时,如无特殊需要,一定禁止编译生成 CLI 命令行模式的 PHP 解析支持.可在编译时使用 –disable-CLI.一旦编译生成 CLI 模式的PHP,则可能会被入侵者利用该程序建立 ...

  6. mysql addslashes()函数_PHP addslashes 函数

    一.函数功能: 数据库查询语句的要求,在单引号(').双引号(").反斜线(\)与 NUL(NULL 字符) 等特殊字符前添加反斜杠.它是stripslashes()函数的反向操作函数. 二 ...

  7. mysql rollback函数_PHP mysqli_rollback() 函数_程序员人生

    实例 关闭自动提交,做一些查询,提交查询,然后回滚当前事务: $con=mysqli_connect("localhost","my_user","m ...

  8. php内置邮件sendmail发送,PHP发送邮件函数sendmail()

    不需要邮件服务器,不使用mail内置函数,一个类就搞定,利用PHPMailer类我写了一个自定义函数 sendmail() ,VERY实用! 以前也在几个PHP论坛上发表过这个发邮件的函数,今天再发, ...

  9. php 打印mysql错误日志_PHP error_log()函数处理错误日志

    在PHP语言中,内置了数量庞大的函数,每个函数的功能不尽相同.灵活的运用这些函数可以为我们带来许多功能的实现.下面我们就介绍一下PHP error_log()函数的相关功能. PHP error_lo ...

最新文章

  1. NIST发布网络安全劳动力框架
  2. 学习:erlang开源项目。
  3. 基于LSTM的电商评论情感分析-TensorFlow2实现(内附源码)【自然语言处理NLP-100例】
  4. 菜鸟教程之Microsoft Windows Powershell
  5. 定制AjaxControlToolkit(1):使一个CalendarExtender对应N个TextBox
  6. SQL Server分页查询方法整理
  7. 工作315:uni-修改添加时间的逻辑
  8. LeetCode 275. H指数 II(二分查找)
  9. C#:winform使用chart控件绘制折线图,时间轴可缩放
  10. 法证先锋3中的Apps软件
  11. Hadoop概念学习系列之Hadoop HA进一步深入(二十八)
  12. 深度学习(tensorflow+keras)性能问题
  13. TranslateAnimation祥解
  14. TVS瞬态抑制二极管选型指南
  15. 一个人内心强大的4个迹象
  16. laravel mysql 时区_Laravel时区设置
  17. socket技术详解(看清socket编程)
  18. 如何高效阅读一本纸质书
  19. 【2022】58同城前端笔试
  20. xxl-job调度中心集群部署重复调度问题

热门文章

  1. Linq 中的Aggregate一些用法
  2. Asp.net MVC Action大全(转)
  3. 我如何进行简历的筛选与人员的选择
  4. 案例精解:BGP路由黑洞
  5. 《网络风险及网络安全》培训总结
  6. git 查看、创建、切换、删除、重命名和推送分支
  7. window.onload与document.ready的区别
  8. 文件传送,如此简单--ESFramework 4.0 快速上手(13)
  9. javascript 将页面上的Table导出保存为Excel (无格式)
  10. solr集成IKAnalyzer中文分词器