php mail函数_php 发送邮件函数
/**
* 记录数据
*/
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 发送邮件函数相关推荐
- java回调函数_PHP回调函数及匿名函数概念与用法详解
1.回调函数 PHP的回调函数其实和C.Java等语言的回调函数的作用是一模一样的,都是在主线程执行的过程中,突然跳去执行设置的回调函数: 回调函数执行完毕之后,再回到主线程处理接下来的流程 而在ph ...
- mysql_assoc函数_PHP:MySQL函数mysql_fetch_assoc()的用法
mysql_fetch_assoc (PHP 4 >= 4.0.3, PHP 5) mysql_fetch_assoc - 从结果集中取得一行作为关联数组 Warning 本扩展自 PHP 5. ...
- php rename函数_php rename函数怎么用
PHP rename()函数用于重命名文件或目录,语法"rename(文件旧名称,新名称,句柄环境)",使用用户指定的新名称更改文件或目录的旧名称,并且可以根据需要在目录之间移动: ...
- php rename函数_PHP rename函数使用详解(php重命名文件)
PHP中的rename()函数是一个内置函数,用于重命名文件或目录.它尝试用用户指定的新名称更改文件或目录的旧名称,并且在必要时可以在目录之间移动. 如果用户指定的新名称已经存在,rename()函数 ...
- php 危险函数_PHP 危险函数有哪些?
在编译 PHP 时,如无特殊需要,一定禁止编译生成 CLI 命令行模式的 PHP 解析支持.可在编译时使用 –disable-CLI.一旦编译生成 CLI 模式的PHP,则可能会被入侵者利用该程序建立 ...
- mysql addslashes()函数_PHP addslashes 函数
一.函数功能: 数据库查询语句的要求,在单引号(').双引号(").反斜线(\)与 NUL(NULL 字符) 等特殊字符前添加反斜杠.它是stripslashes()函数的反向操作函数. 二 ...
- mysql rollback函数_PHP mysqli_rollback() 函数_程序员人生
实例 关闭自动提交,做一些查询,提交查询,然后回滚当前事务: $con=mysqli_connect("localhost","my_user","m ...
- php内置邮件sendmail发送,PHP发送邮件函数sendmail()
不需要邮件服务器,不使用mail内置函数,一个类就搞定,利用PHPMailer类我写了一个自定义函数 sendmail() ,VERY实用! 以前也在几个PHP论坛上发表过这个发邮件的函数,今天再发, ...
- php 打印mysql错误日志_PHP error_log()函数处理错误日志
在PHP语言中,内置了数量庞大的函数,每个函数的功能不尽相同.灵活的运用这些函数可以为我们带来许多功能的实现.下面我们就介绍一下PHP error_log()函数的相关功能. PHP error_lo ...
最新文章
- NIST发布网络安全劳动力框架
- 学习:erlang开源项目。
- 基于LSTM的电商评论情感分析-TensorFlow2实现(内附源码)【自然语言处理NLP-100例】
- 菜鸟教程之Microsoft Windows Powershell
- 定制AjaxControlToolkit(1):使一个CalendarExtender对应N个TextBox
- SQL Server分页查询方法整理
- 工作315:uni-修改添加时间的逻辑
- LeetCode 275. H指数 II(二分查找)
- C#:winform使用chart控件绘制折线图,时间轴可缩放
- 法证先锋3中的Apps软件
- Hadoop概念学习系列之Hadoop HA进一步深入(二十八)
- 深度学习(tensorflow+keras)性能问题
- TranslateAnimation祥解
- TVS瞬态抑制二极管选型指南
- 一个人内心强大的4个迹象
- laravel mysql 时区_Laravel时区设置
- socket技术详解(看清socket编程)
- 如何高效阅读一本纸质书
- 【2022】58同城前端笔试
- xxl-job调度中心集群部署重复调度问题