基于PHP自带的mail函数实现发送邮件以及带有附件的邮件功能
PHPmail函数简介
bool mail ( string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameters ]] )
其中: $to 必需。规定邮件的接收者
$subject 必需。规定邮件的主题。该参数不能包含任何换行字符。
$message 必需。规定要发送的消息。
$additional_headers 规定额外的报头,比如 From, Cc 以及 Bcc等
$additional_parameters 规定 sendmail 程序的额外参数
参考代码(Linux服务器下测试有效)
<?php
class SendMailApi
{
/**
* @param $to 收件人
* @param $subject 邮件主题
* @param $message 发送的消息
* @param $from 发件人
* @param $content_type 类型
* @param $attache 附件
*/
public function sendMail($to, $subject, $message, $from, $content_type, $attache = array())
{
if (!empty($from)) $head = "From: $from\n";
if (empty($content_type)) $content_type = "text/plain";
if (is_array($attache)) {
$boundary = "===" . md5(uniqid("")) . "===";
$head .= "Mime-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"";
$head .= "$boundary\"\n\nThis is a multi-part message in MIME format.\n\n";
$head .= "--$boundary\n";
$head .= "Content-Type: $content_type\n";
$head .= "\n$message\n\n";
while (list($key, $val) = each($attache)) {
$fd = fopen("$val", "r") or die("unable to open file$val");
$contents = chunk_split(base64_encode(fread($fd, filesize("$val"))));
fclose($fd);
$head .= "--$boundary\n";
$head .= "Content-Type: application/octet-stream; name=\"" . basename($val);
$head .= "\"\nContent-Transfer-Encoding: BASE64\n";
$head .= "Content-Disposition: attachment; filename=\"" . basename($val);
$head .= "\"\n\n" . $contents . "\n\n";
}
$head .= "--" . $boundary . "--\n\n";
} else {
if (!empty($content_type)) {
$head .= "Content-Type: $content_type\n";
$head .= "\n$message\n";
}
}
return mail($to, $subject, "", $head);
}
public function sendMailTest()
{
$to = "xxxxx@xxxx.com"; // 邮件接收者
$subject = "test"; // 邮件标题
$from = "xxx@xxxxx.com"; // 邮件发送者
$subject = "=?UTF-8?B?" . base64_encode($subject) . "?=";
$order_bn = date('Ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);
$memer_id = self::mt_rand(1000000,9999999);
$ship_mobile = '139xxxxxxxx';
//产生随机数据
$res = array(
0 =>
array(
'order_bn' => $order_bn,
'member_id' => $memer_id ,
'ship_mobile' => $ship_mobile,
),
1 =>
array(
'order_bn' => $order_bn,
'member_id' => $memer_id,
'ship_mobile' => $ship_mobile,
),
2 =>
array(
'order_bn' => $order_bn,
'member_id' => $memer_id,
'ship_mobile' => $ship_mobile,
),
3 =>
array(
'order_bn' => $order_bn,
'member_id' => $memer_id,
'ship_mobile' => $ship_mobile,
),
4 =>
array(
'order_bn' => $order_bn,
'member_id' => $memer_id,
'ship_mobile' => $ship_mobile,
),
5 =>
array(
'order_bn' => $order_bn,
'member_id' => $memer_id,
'ship_mobile' => $ship_mobile,
),
6 =>
array(
'order_bn' => $order_bn,
'member_id' => $memer_id,
'ship_mobile' => $ship_mobile,
));
$csv_header = array('订单号', '会员id', '手机号');
$file_name = date("Y-m-d") . ".csv";
$fp = fopen("$file_name", 'a');
// 处理头部标题
$header = implode(',', $csv_header) . PHP_EOL;
// 处理内容
$content = '';
foreach ($res as $k => $v) {
$content .= implode(',', $v) . PHP_EOL;
}
// 拼接
$csv = $header . $content;
// 写入并关闭资源
fwrite($fp, $csv);
fclose($fp);
//添加附件
$attache = array($file_name);
$message = " This is a test"; // 邮件正文
$headers = "From: $from" . "\n";// 头部信息设置
$headers .= "MIME-Version: 1.0" . "\n";
$headers .= "Content-type: text/html; charset=uft-8" . "\r\n";
$headers .= "Content-Transfer-Encoding: 8bit";
if(filter_var($to, FILTER_VALIDATE_EMAIL)&&filter_var($from, FILTER_VALIDATE_EMAIL)){
$rst = $this->sendMail($to, $subject, $message, $from, '', $attache);
}
@unlink($file_name);
var_dump($rst);
}
}
//测试
$mailObj = new SendMailApi();
$rst = $mailObj->sendMailTest();
测试效果
基于PHP自带的mail函数实现发送邮件以及带有附件的邮件功能的更多相关文章
- 在Windows下利用php自带的mail函数发邮件
这几天看<Head First PHP & MySQL>,里面有发邮件的例子是用系统自带的mail函数发送的,自己照书上写的试了一直不成功,后来终于在网上找到解决方案,现在总结下. ...
- linux中mail函数不能发送邮件怎么办
原因分析: 1.检查下本机25端口是否有开放 2.mail是利用linux自带的sendmail服务来发送邮件的,service sendmail status 查看下该服务的状态 发送命令:mail ...
- LNMP笔记:解决mail函数不能发送邮件
用LNMP环境,在探针里测试发送邮件,失败了.已经确定mail()函数是开启的. 问题根源 没有安装或启动 sendmail 组件 解决办法 我是新手,命令不熟,所以写的很详细,老鸟勿喷哦 1.重新安 ...
- linux中mail函数不能发送邮件
没有安装或启动 sendmail 组件 解决办法 我是新手,命令不熟,所以写的很详细,老鸟勿喷哦 1.重新安装 sendmail 组件,我用的是 CentOS ,使用下面的命令安装 代码如下 复制代码 ...
- Java Mail 发送带有附件的邮件
1.小编用的是163邮箱发送邮件,所以要先登录163邮箱开启POP3/SMTP/IMAP服务方法: 2.下载所需的java-mail 包 https://maven.java.net/content/ ...
- JS中setInterval、setTimeout不能传递带参数的函数的解决方案
在JS中无论是setTimeout还是setInterval,在使用函数名作为调用句柄时都不能带参数,而在许多场合必须要带参数,接下来为大家介绍具体的解决方法 在JS中无论是setTimeout还是s ...
- JS中setInterval、setTimeout不能传递带参数的函数的解决办法
在JS中无论是setTimeout还是setInterval,在使用函数名作为调用句柄时都不能带参数,而在许多场合必须要带参数,这就需要想方法解决. 一.采用字符串形式:——(缺陷)参数不能被周期性改 ...
- Linux服务器查看PHP是否支持mail()函数方法
PHP的Mail函数可以用来发送邮件,如查看Linux服务器PHP是否支持Mail函数? PHP查看是否支持Mail函数的方法 Linux系统下的服务器,查看PHP是否支持Mail函数的方法有很多种: ...
- 【Mail】JavaMail发送带附件的邮件(二)
上一篇讲了使用JavaMail发送普通邮件([Mail]JavaMail介绍及发送邮件(一)),本例讲发送复杂的邮件(带有附件的邮件) 生成一封复杂的邮件 新建一个JavaWeb的Maven工程,引入 ...
随机推荐
- 杭电 1009 FatMouse' Trade (贪心)
Problem Description FatMouse prepared M pounds of cat food, ready to trade with the cats guarding th ...
- Web页面测试总结(控件类)
界面测试,最多的就是各种控件的功能测试,只有掌握了其测试要点,了解测试方法,总结各种测试情景,才能熟练测试Web页面. 一.输入框 输入框分为文本输入框,数字输入框.一般使用在填写输入的内容上,比如名 ...
- 测试自动化接口jenkins配置
<br/><font color="red" size"3" face="微软雅黑">本邮件是程序自动下发,请勿回复 ...
- BNUOJ 26228 Juggler
Juggler Time Limit: 3000ms Memory Limit: 32768KB This problem will be judged on HDU. Original ID: 42 ...
- hdu - 1689 Just a Hook (线段树区间更新)
http://acm.hdu.edu.cn/showproblem.php?pid=1698 n个数初始每个数的价值为1,接下来有m个更新,每次x,y,z 把x,y区间的数的价值更新为z(1<= ...
- DOM对象与jquery对象的互相转换
一開始总是对DOM对象和jQuery对象搞不清楚.如今对此做一下总结: DOM 对象:文档对象模型.每一份DOM都能够看作一棵树.像ul,li ol dl p h1 等等都是DOM元素节点.能 ...
- 公用表表达式(CTE)
公用表表达式(CTE,Common table expression)是和派生表很相似的另一种形式的表表达式,而且具有一些重要优势.CTE 是在 SQL Server 2005 中引入的,是ANSI ...
- 调试 Android* x86 应用程序的方法以及要使用的工具
作者:Xiaodong Wang 1.简单介绍 众所周知,Android* 开发者头顶很多称呼:设计员.程序员等,而且一般会不可避免地被称为故障检修工. 代码中的错误无法避免.因此不管您是否一開始就造 ...
- Android清单文件具体解释(四) ---- backupAgent的使用方法
在<application>节点中有一个很重要的属性,那就是backupAgent.这里我们将它单独列出来,从基本含义,使用方法及其相关属性等方面来具体介绍一下. 1.backupAgen ...
- 三元表达式之理解/jquery源代码分析之$.inArray实现
每次看到三元表达式就会惶惶然分不清怎样读,正如语文中的断句一样,jquery源代码中的三元表达式更是不知怎样断句. 附jquery中的inArray实现. 大家熟悉jquery的应该都不陌生inArr ...