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函数实现发送邮件以及带有附件的邮件功能的更多相关文章

  1. 在Windows下利用php自带的mail函数发邮件

    这几天看<Head First PHP & MySQL>,里面有发邮件的例子是用系统自带的mail函数发送的,自己照书上写的试了一直不成功,后来终于在网上找到解决方案,现在总结下. ...

  2. linux中mail函数不能发送邮件怎么办

    原因分析: 1.检查下本机25端口是否有开放 2.mail是利用linux自带的sendmail服务来发送邮件的,service sendmail status 查看下该服务的状态 发送命令:mail ...

  3. LNMP笔记:解决mail函数不能发送邮件

    用LNMP环境,在探针里测试发送邮件,失败了.已经确定mail()函数是开启的. 问题根源 没有安装或启动 sendmail 组件 解决办法 我是新手,命令不熟,所以写的很详细,老鸟勿喷哦 1.重新安 ...

  4. linux中mail函数不能发送邮件

    没有安装或启动 sendmail 组件 解决办法 我是新手,命令不熟,所以写的很详细,老鸟勿喷哦 1.重新安装 sendmail 组件,我用的是 CentOS ,使用下面的命令安装 代码如下 复制代码 ...

  5. Java Mail 发送带有附件的邮件

    1.小编用的是163邮箱发送邮件,所以要先登录163邮箱开启POP3/SMTP/IMAP服务方法: 2.下载所需的java-mail 包 https://maven.java.net/content/ ...

  6. JS中setInterval、setTimeout不能传递带参数的函数的解决方案

    在JS中无论是setTimeout还是setInterval,在使用函数名作为调用句柄时都不能带参数,而在许多场合必须要带参数,接下来为大家介绍具体的解决方法 在JS中无论是setTimeout还是s ...

  7. JS中setInterval、setTimeout不能传递带参数的函数的解决办法

    在JS中无论是setTimeout还是setInterval,在使用函数名作为调用句柄时都不能带参数,而在许多场合必须要带参数,这就需要想方法解决. 一.采用字符串形式:——(缺陷)参数不能被周期性改 ...

  8. Linux服务器查看PHP是否支持mail()函数方法

    PHP的Mail函数可以用来发送邮件,如查看Linux服务器PHP是否支持Mail函数? PHP查看是否支持Mail函数的方法 Linux系统下的服务器,查看PHP是否支持Mail函数的方法有很多种: ...

  9. 【Mail】JavaMail发送带附件的邮件(二)

    上一篇讲了使用JavaMail发送普通邮件([Mail]JavaMail介绍及发送邮件(一)),本例讲发送复杂的邮件(带有附件的邮件) 生成一封复杂的邮件 新建一个JavaWeb的Maven工程,引入 ...

随机推荐

  1. LeetCode 122. Best Time to Buy and Sell Stock II (stock problem)

    Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...

  2. echarts的简单应用之(一)柱形图

    前段时间做项目需要绘制一些图表来展示信息,从网上资料来看用的比较多的是百度开源的echarts.echarts的官网上有API以及demo.上面的图形都是非常炫的,不过都是静态 数据,我们做项目时不可 ...

  3. HDU 4478 Where is King

    题目大意: 一个王可以向周围8个方格走,如果都不通留在原地,t秒后,他可能存在的位置数 这题数据量过大,我们需要通过奇偶性判断,如果t = 0可以到达,说明 t=2,4,6....都可以到达 所以我这 ...

  4. Codeforces870F. Paths

    n<=10000000的图,满足:如果(i,j)>1就连一条边权1的无相变,问所有d(u,v) (u<=v)--u到v的最短路之和. 首先1和>n/2的质数都是孤立的点.然后两 ...

  5. Linux下汇编语言学习笔记52 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...

  6. 使用XML定义组件样式

    <TextView android:layout_width="match_parent" android:layout_height="wrap_content& ...

  7. 交互设计:隐藏或显示大段文本的UI组件有哪些?

    应用场景: 在手机上要给列表中的每一项添加一个大段的介绍,应该用什么UI组件 A: 这里可以用,模态对话框,弹出提示,工具提示这类组件.模态对话框的好处,就是用关闭的按钮,用户操作方便:而弹出提示和工 ...

  8. [bzoj4520][Cqoi2016]K远点对_KD-Tree_堆

    K远点对 bzoj-4520 Cqoi-2016 题目大意:已知平面内 N 个点的坐标,求欧氏距离下的第 K 远点对. 注释:$1\le n\le 10^5$,$1\le k\le 100$,$k\l ...

  9. Cookie对象的特点

    1.存储少量不重要的数据2.存储在客户端的文本文件中(必须设置有效期,否则不被存储)3.安全性差4.存储的数据类型--字符串5.浏览器窗口无关,但与访问的站点相关6.具体特定的过期时间和日期7.在客户 ...

  10. 初探FFT在数字图像处理中的应用(fft2函数的用法)

    初探FFT在数字图像处理中的应用 一般FFT在通信等领域都做的一维变换就能够了.可是在图像处理方面,须要做二维变换,这个时候就须要用到FFT2. 在利用Octave(或者matlab)里面的fft2( ...