PHP Mail函数发送html格式邮件

 更新时间:2016年11月25日 16:46  点击:1427
PHP Mail函数是php中一个系统自带的邮件发送函数,这个函数默认情况下是不可以使用了,如果我们要直接使用PHP Mail函数发送邮件是需要简单的配置一下,稍后我在文章开始会介绍linux与windows下配置邮件功能,让PHP Mail函数可以用。

windows系统下mail函数需要配置

1.从http://glob.com.au/sendmail/下载sendmail.zip
2.解压到C:下,例如C:\php\sendmail,最好短路径,长路径名有可能产生问题。
3.修改php.ini如下
sendmail_path = "C:\wamp\sendmail\sendmail.exe -t"
4.根据你自己的配置环境修改sendmail.ini。
第一次最好启用debug.log_file,error_logfile,以查看sendmail是否生效。

linux系统中配置安装mail函数

yum -y install sendmail

安装成功

/etc/rc.d/init.d/sendmail start

mail -s “abc” 165482921@qq.com < phpinfo.php

提示

-bash: mail: command not found

晕菜了,那这个mail命令要怎么弄过来呢

yum -y install mailx

就安装好了

mail -s “abc” 165482921@qq.com < phpinfo.php

登邮箱一看,有了,呵呵,原来这两个命令可以这样搞啊

先看一段代码示例

 代码如下 复制代码

$to = 'xxxxx@gmail.com';
$from = 'Solagirl <sola@solagirl.net>';
$subject = 'Mail Subject';
$message = 'html content (with html tags)';
//定义边界,边界值尽可能唯一
$semi_rand = md5(time());
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
//多部分消息的header声明与单一格式不同
$headers .= "MIME-Version: 1.0\n" . "Content-Type: multipart/alternative; boundary=\"{$mime_boundary}\"";
$headers .= "From: $from\n";
//多部分消息 - HTML版本
$mailbody = "--{$mime_boundary}\n" . "Content-Type: text/html; charset=\"utf-8\"\n" .
"Content-Transfer-Encoding: 7bit\n\n" . $message . "\n\n";
//多部分消息 - 纯文本版本
$mailbody .= "--{$mime_boundary}\n" . "Content-Type: text/plain; charset=\"utf-8\"\n" .
"Content-Transfer-Encoding: 7bit\n\n" . strip_tags($message) . "\n\n";
//多部分消息结束
$mailbody .= "--{$mime_boundary}--";
mail($to, $subject, $message, $headers);

从上面的例子看出,要使用多部分消息发送电子邮件,header与发送单一格式邮件不同,需要声明发送的内容是multipart并定义边界(boundary)

 

 代码如下 复制代码
Content-Type: multipart/alternative; boundary="{$mime_boundary}"

这就告诉电子邮件客户端,应该在消息中查找额外的Content-type信息,其中包含边界信息。边界把消息分隔为多个部分,它以两个短横线(–)开头,并且位于消息的开头、各部分之间和消息的结尾。这个边界的内容并不重要,关键是尽可能使之唯一,所以它不可能是消息中重复的值,所以可以使用符号、数字和字母的任意组合,许多人选择使用rand()或md5()散列,这并不重要。使用什么方法完全取决于设计人员。[2]

如果使用PHPMailer发送邮件,只需要简单的代码就可以实现多部分消息,看下面代码段[3]

 代码如下 复制代码

$mail->Body    = $body;
//$mail->AltBody存储纯文本版本
$mail->AltBody    = strip_tags($body);
$mail->WordWrap   = 50; // set word wrap
$mail->IsHTML(true);
$mail->MsgHTML($body);
$mail->Send();


如果出现Warning: mail() [function.mail]: SMTP server response: 530 5.7.0 Must issue a STARTTLS command first这个邮件没配置好,我们看文章开头配置方法。

在php中函数自带了一个url转换字符或字符转换在url字符的方法,但是今天我也看到了一个朋友写的一个例子,下面我就把它现官方的函数整理一起

英文:

 代码如下 复制代码

function tourl($str) {
  $str = preg_replace('/[^a-zA-Z0-9]+/', '-', $str);
  $str = trim($str, '-');
  return strtolower($str);
}

包含特殊字符:

 

 代码如下 复制代码
function strtourl($str) {
  $str = htmlentities($str, ENT_QUOTES, "UTF-8");
  $str = preg_replace('/&([a-z]{1,2})(?:acute|lig|grave|ring|tilde|uml|cedil|caron);/i','1',$str);
  $str = html_entity_decode($str, ENT_QUOTES, "UTF-8");
  $str = preg_replace('/[^a-z0-9]+/i', '-', $str);
  return strtolower($str);
}

urlencode函数 此函数可以解决百度 get与google get中文乱码问题哦

 代码如下 复制代码

header('Content-type: text/html; charset=utf-8');  
  
echo '<br />百度关键词URL编码转换示例:<br />'; 

$urlBaidu = 'http://www.baidu.com/s?wd=%D6%D0%CE%C4'; 

$arrParse = parse_url($urlBaidu); 

parse_str($arrParse ['query'],$output); 

echo '乱码:' . $output['wd'] . '<br />';  
//将gb2312编码转换成utf-8编码 

$strUTF8 = mb_convert_encoding($output['wd'], 'utf-8', 'gb2312'); 

echo '可读码:' . $strUTF8 . '<br />';  

echo '<br />谷歌关键词URL编码转换示例:<br />'; 

$urlGoogle = 'http://www.google.cn/search?hl=zh-CN&source=hp&q=%E4%B8%AD%E6%96%87&aq=f&oq='; 
    
$arrParse = parse_url($urlGoogle); 

parse_str($arrParse ['query'],$output); 
//谷歌关键词URL编码是utf-8,不用再作转换 

echo '可读码:' . $output['q'] . '<br />';

总结,个人更喜欢使用php自带urlencode()函数了,上面这个也是解决我们url用中文时百度与gg有时会乱码问题解决方案了。

unlink是用来删除文件的它也可以删除指定文件了,此函数支持相对路径删除与绝对路径删除,但它不能删除目录哦,下面一起来看unlink() 函数的一些用法。

用法

nlink() 函数删除文件。

若成功,则返回 true,失败则返回 false。

语法

unlink(filename,context)

示例:

 代码如下 复制代码

$tmpdata = $this->_agency_mod->find ( intval ( $value ) );
$img = $tmpdata [$value] ['agency_image'];
if(!empty($img)){
 $img = '../data/agency/' . $img;
 if (file_exists ( $img )) {
  unlink ( $img );
 }
}

首先找到该条目,查询条目的内容,包括图片链接地址。有了地址,我们根据这个图片路径,使用unlink函数删除该图片文件。注意:该图片路径的目录要有可读写权限。

php官方示例:

 代码如下 复制代码

<?php
$fh = fopen('test.html', 'a');
fwrite($fh, '<h1>Hello world!</h1>');
fclose($fh);
 
unlink('test.html');
?>

w3school示例:

 代码如下 复制代码

<?php
$file = "test.txt";
if (!unlink($file))
  {
  echo ("Error deleting $file");
  }
else
  {
  echo ("Deleted $file");
  }
?>

删除中文名称的文件失败

Warning: unlink(user_logo/d4d84f383714d5f3.jpg) [function.unlink]: No such file or directory in

文件名是中文命名的;用is_file()检测出是false。但是文件是存在的。不知道怎样才能用unlink把这个文件删除了。用include包含文件时,也无法读取文件(文件不是空的)。

 代码如下 复制代码

if(file_exists($fn)){//存在该文件

 //todo 删除

}

如果是中文可能有点问题

现在要解决的是is_file或unlink对文件名中有中文的文件的识别。只要能识别出来就可以删除了。

应该是文件名编码的问题,你可以试试unlink(iconv('gb2312','utf-8','新建文本文档.txt'));

今天在php直接使用date函数会发现提示date(): It is not safe to rely...错误了,提示是不是一个安全的用法,那么要如何解决此问题呢。


在PHP代码中调用date函数时,在日志里看到如下报错

PHP Warning:  date(): It is not safe to rely on the system's timezone settings.
You are *required* to use the date.timezone setting or the date_default_timezone_set() function.
In case you used any of those methods and you are still getting this warning,
you most likely misspelled the timezone identifier. We selected 'Asia/Chongqing' for 'CST/8.0/no DST' instead

为什么会出现这样的报错?

从 PHP 5.1.0 引用了时区设置(date.timezone),但其默认又是关闭的,所以使用date()等函数时,都会产生E_NOTICE 或者 E_WARNING 信息。

处理方法1

在调用date前加入下代码


在页头加入代码:ate_default_timezone_set("PRC");
在页头加入代码:ini_set('date.timezone','注释:RPC');
在php.ini中启用date.timezone设置并设置其值:date.timezone=PRC,并重启apache;

注释:RPC代表中华人民共和国。

PHP CLI模式开发不需要任何一种Web服务器(包括Apache或MS IIS等),这样,CLI可以运行在各种场合,下面我就来简单的介绍一下php cli命令的用法。

PHP CLI(命令行模式下)接受参数有多种方法:

(1)使用$argv接受参数

<?php
 

 代码如下 复制代码
//变量仅在 register_argc_argv 打开时可用。
print_r($argc); //CLI下获取参数的数目,最小值为1
print_r($argv); //CLI下传递给脚本的参数数组,第一个参数总是当前脚本的文件名,因此 $argv[0] 就是脚本文件名。


 结果:

 

PHP中CLI命令行模式接受参数的方法


PHP CLI下接受参数的几种方法(2)使用getopt()函数获取参数

<?php
 

 代码如下 复制代码
//获取 -a -b -c参数
$args = getopt('a:b:c:');
print_r($args);


执行结果:

PHP中CLI命令行模式接受参数的方法


使用getopt获取cli参数

[!--infotagslink--]

相关文章

  • php正确禁用eval函数与误区介绍

    eval函数在php中是一个函数并不是系统组件函数,我们在php.ini中的disable_functions是无法禁止它的,因这他不是一个php_function哦。 eval()针对php安全来说具有很...2016-11-25
  • php中eval()函数操作数组的方法

    在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
  • Python astype(np.float)函数使用方法解析

    这篇文章主要介绍了Python astype(np.float)函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-08
  • Python中的imread()函数用法说明

    这篇文章主要介绍了Python中的imread()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
  • C# 中如何取绝对值函数

    本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
  • C#学习笔记- 随机函数Random()的用法详解

    下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • 金额阿拉伯数字转换为中文的自定义函数

    CREATE FUNCTION ChangeBigSmall (@ChangeMoney money) RETURNS VarChar(100) AS BEGIN Declare @String1 char(20) Declare @String2 char...2016-11-25
  • Android开发中findViewById()函数用法与简化

    findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20
  • C++中 Sort函数详细解析

    这篇文章主要介绍了C++中Sort函数详细解析,sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变...2022-08-18
  • PHP用strstr()函数阻止垃圾评论(通过判断a标记)

    strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。语法:strstr(string,search)参数string,必需。规定被搜索的字符串。 参数sea...2013-10-04
  • PHP函数分享之curl方式取得数据、模拟登陆、POST数据

    废话不多说直接上代码复制代码 代码如下:/********************** curl 系列 ***********************///直接通过curl方式取得数据(包含POST、HEADER等)/* * $url: 如果非数组,则为http;如是数组,则为https * $header:...2014-06-07
  • php中的foreach函数的2种用法

    Foreach 函数(PHP4/PHP5)foreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。...2013-09-28
  • C语言中free函数的使用详解

    free函数是释放之前某一次malloc函数申请的空间,而且只是释放空间,并不改变指针的值。下面我们就来详细探讨下...2020-04-25
  • NodeJS实现阿里大鱼短信通知发送

    本文给大家介绍的是nodejs实现使用阿里大鱼短信API发送消息的方法和代码,有需要的小伙伴可以参考下。...2016-01-20
  • PHP函数strip_tags的一个bug浅析

    PHP 函数 strip_tags 提供了从字符串中去除 HTML 和 PHP 标记的功能,该函数尝试返回给定的字符串 str 去除空字符、HTML 和 PHP 标记后的结果。由于 strip_tags() 无法实际验证 HTML,不完整或者破损标签将导致更多的数...2014-05-31
  • SQL Server中row_number函数的常见用法示例详解

    这篇文章主要给大家介绍了关于SQL Server中row_number函数的常见用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-12-08
  • PHP测试成功的邮件发送案例

    mail()函数的作用:连接到邮件服务器,利用smtp协议,与该服务器交互并投邮件。注意:1、mail函数不支持esmtp协议,---即,只能直投,不能登陆2、由上条,我们只能直投至最终的收件服务器地址.而该地址,又是在PHP.ini中指定的,所...2015-10-30
  • PHP加密解密函数详解

    分享一个PHP加密解密的函数,此函数实现了对部分变量值的加密的功能。 加密代码如下: /* *功能:对字符串进行加密处理 *参数一:需要加密的内容 *参数二:密钥 */ function passport_encrypt($str,$key){ //加密函数 srand(...2015-10-30
  • php邮件发送的两种方式

    这篇文章研究的主要内容就是使用PHP来发送电子邮件,总结为以下两种方法:一、使用PHP内置的mail()函数<&#63;php $to = "test@163.com"; //收件人 $subject = "Test"; //主题 $message = "This is a test mail!"; //正文...2015-10-30
  • php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法

    最近遇到一个问题,就是在使用php的mail函数发送utf-8编码的中文邮件时标题出现乱码现象,而邮件正文却是正确的。最初以为是页面编码的问题,发现页面编码utf-8没有问题啊,找了半天原因,最后找到了问题所在。 1.使用 PEAR 的...2015-10-21