php一个简单邮箱发送组件介绍

 更新时间:2016年11月25日 17:00  点击:1263
本文章介绍了phpmailer邮件发送组件的使用,有需要的朋友可参考一下本文章。
 代码如下 复制代码

<?php
include ('class/class.phpmailer.php');

$config = array(
        'host'=>'smtp.163.com',
        'port'=>'25',
        'user'=>'***',
        'passwd'=>'****',
        'from'=>'juva_zz@163.com',
        'fromname'=>'郑州',
       
        );
$subject = 'this is a test mail';
$body = '<table style="background:#dfdfdf"><tr><td>测试内容</td></tr><tr><td>这是内容</td></tr></table>';
$address='379018082@qq.com';
$username='本人';

$mail = new PHPMailer();
$mail->CharSet = 'gb2312';
$mail->IsSMTP();
$mail->Host = $config['host'];
$mail->Port = $config['port'];

$mail->From = $config['from'];
$mail->FromName = $config['fromname'];
$mail->SMTPAuth = true;

$mail->Username = $config['user'];
$mail->Password = $config['passwd'];

$mail->Subject=$subject;
$mail->AltBody="text/html";
$mail->MsgHTML($body);


$mail->AddAddress($address,$username);

if(!$mail->Send())
{
    echo "Mail Error :".$mail->ErrorInfo;
}else
{
    echo "恭喜发送成功!";
}

本文章总结了php中不转义中文字符的 json 编码的方法,有需要的朋友可参考一下。

虽说最新的 PHP 5.4 已经良好支持 JSON 中文编码,即通过 JSON_UNESCAPED_UNICODE 参数,例如:

json_encode("中文", JSON_UNESCAPED_UNICODE)对于早前 PHP 版本,处理不转义中文字符的 json 编码


PHP 和 JavaScript 交互其实很方便,PHP 原生也提供了对 JSON 格式的支持。主要包括 JSON 编码和解码两个函数:

json_endoce: http://cn.php.net/json_encode
json_dedoce: http://cn.php.net/json_decodejson_encode

— 对变量进行 JSON 编码,并返回 value 值的 JSON 形式,例如:

 代码如下 复制代码

<?php
$arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);
echo json_encode($arr);
?>

以上代码执行后输出:

 代码如下 复制代码

{"a":1,"b":2,"c":3,"d":4,"e":5}

假如要编码的数据源(一般是一个数组),value 中包含中文,经过 json_encode 处理后输出的是 unicode 编码。

 代码如下 复制代码

<?php
$arr = array ('a'=>'芒果小站');
echo json_encode($arr);
?>

以上代码执行后输出:

 代码如下 复制代码
{"a":"u8292u679Cu5C0Fu7AD9"}

PHP 底层已经做了 unicode 处理,如果嫌它不够直观,可以利用 urlencode 和

urldecode

方法绕过这个转码为 unicode 的过程:

 代码如下 复制代码

$arr = array ('a'=>urlencode('芒果小站'));
echo urldecode(json_encode($arr));以上代码执行后输出:

{"a":"芒果小站"}

,这里分享个更完美的方法:

 /**
  * 不转义中文字符的 json 编码方法
  * @param array $arr 待编码数组
  * @return string
  */
 function encode ($arr) {

  $str = json_encode($arr);
  $search = "#\u([0-9a-f]+)#ie";
  $replace = "iconv('UCS-2', 'UTF-8', pack('H4', '\1'))";

  return preg_replace($search, $replace, $str);

 }

我们介绍一个php插件来实现发送电子邮件并且还可还有附件的实现方法,这个不需要你怎么配置方法相当简单,可登录第三方法邮件实现发送.
 代码如下 复制代码
require_once('include/PHPMailer/class.phpmailer.php'); //导入PHPMAILER类
$mail = new PHPMailer(); //创建实例
$mail -> CharSet='utf-8'; //设置字符集
$mail -> SetLanguage('ch','include/PHPMailer/language/');  //设置语言类型和语言文件所在目录         
$mail -> IsSMTP(); //使用SMTP方式发送
$mail -> SMTPAuth = true; //设置服务器是否需要SMTP身份验证 
$mail -> Host = SMTP_SERVER; //SMTP 主机地址 
$mail -> Port = SMTP_SERVER_PORT; //SMTP 主机端口
$mail -> From = SMTP_USER_MAIL; //发件人EMAIL地址
$mail -> FromName = 'jasonxu'; //发件人在SMTP主机中的用户名 
$mail -> Username = SMTP_USER_NAME; //发件人的姓名 
$mail -> Password = SMTP_USER_PASS; //发件人在SMTP主机中的密码 
$mail -> Subject = '测试邮件的标题'; //邮件主题 
$mail -> AltBody = 'text/html'; //设置在邮件正文不支持HTML时的备用显示
$mail -> Body = '测试邮件的内容';//邮件内容做成
$mail -> IsHTML(true);  //是否是HTML邮件
$mail -> AddAddress('chinajason2008#gmail.com','jasonxu'); //收件人的地址和姓名 
$mail -> AddReplyTo('chinajason2008#gmail.com','jasonxu'); //收件人回复时回复给的地址和姓名
$mail -> AddAttachment('include/id.csv','att.csv');//附件的路径和附件名称
if(!$mail -> Send()) //发送邮件 
var_dump($mail -> ErrorInfo);  //查看发送的错误信息

 
注意:phpmailer如果添加附件的时候,在附件名称里一定要写明附件的后缀,如果不写明附件后缀,默认的附件后缀会是.txt。
比如$mail -> AddAttachment('include/id.csv','att');//附件的路径和附件名称
如果向上面一样添加附件发送,则最终接到的附件可能是att.txt。
AddAttachment可以设置附件编码方式和附件类型,比如上面的附件添加也可以设置为
$mail -> AddAttachment('include/id.csv','att.csv',"binary","text/comma-separated-values");//附件的路径和附件名称、
附件的编码方式大概有这么几种:支持8bit, base64, binary, and quoted-printable 编码
 
而CSV可接受的MIME Type
· application/octet-stream
· text/comma-separated-values(推荐)
· text/csv
所以,csv格式文件的附件类型可以是上面三种中的任意一种


/*PHPMailer是一个用于发送电子邮件的PHP函数包。它提供的功能包括:
  *.在发送邮时指定多个收件人,抄送地址,暗送地址和回复地址
  *.支持多种邮件编码包括:8bit,base64,binary和quoted-printable
  *.支持SMTP验证
  *.支持冗余SMTP服务器
  *.支持带附件的邮件和Html格式的邮件
  *.自定义邮件头
  *.支持在邮件中嵌入图片
  *.调试灵活
  *.经测试兼容的SMTP服务器包括:Sendmail,qmail,Postfix,Imail,Exchange等
  *.可运行在任何平台之上
 
phpMailer是一个非常强大的php发送邮件类,可以设定发送邮件地址、回复地址、邮件主题、富文本内容,上传附件,.....
官方网站:http://phpmailer.worxware.com/
下载地址:http://code.google.com/a/apache-extras.org/p/phpmailer/downloads/list
*/
 

本文章总结了关于在phpmailer发送邮件时出现的中文乱码与标题中文乱码解决方法总结,有需要的朋友可参考本文章。

一个客户的PHP网站需要一个邮件订阅功能,我采用一个在PHP开源程序中被大量使用的程序 PHPmailer(PHPMailer_v2.0.4),在正确填写examples文件夹下的test_mail.php后测试邮件系统,被测试邮箱 可以收到邮件,不过title标题却一直是乱码,故想到这个肯定是PHP的编码问题,经过多次调试终于找到解决办法:核心问题就是加 入$mail->CharSet = "UTF-8";以下是个人测试成功的phpmailer邮件系统

1.对于所有的网易的邮箱(163.com,126.com,yeah.net等),一旦发送中文(标题和正文)都会出现乱码;
2.还有,别的邮箱在发中文时,正文都能正常显示,而标题还出现乱码;

实例:

test.php

 代码如下 复制代码
<html>
<body>
<h3>phpmailer Unit Test</h3>
请你输入<font color="#FF6666">收信</font>的邮箱地址:
<form name="phpmailer" action="send.php" method="post">
<input type="hidden" name="submitted" value="1"/>
邮箱地址: <input type="text" size="50" name="address" />
<br/>
<input type="submit" value="发送"/>
</form>
</body>
</html>

send.php

 代码如下 复制代码

<?php
require("class.phpmailer.php");
$mail = new PHPMailer();
$mail->CharSet = "gb2312"; /
$mail->Encoding = "base64";
$address = $_POST['address'];
$mail->IsSMTP(); // set mailer to use SMTP
$mail->Host = "smtp.126.com"; // specify main and backup server
$mail->SMTPAuth = true; // turn on SMTP authentication
$mail->Username = ""; // SMTP username
$mail->Password = "******"; // SMTP password

$mail->From = "";
$mail->FromName = "rokaye";
$mail->AddAddress("$address", "");
//$mail->AddAddress(""); // name is optional
//$mail->AddReplyTo("", "");

//$mail->WordWrap = 50; // set word wrap to 50 characters
//$mail->AddAttachment("/var/tmp/file.tar.gz"); // add attachments
//$mail->AddAttachment("/tmp/image.jpg", "new.jpg"); // optional name
//$mail->IsHTML(true); // set email format to HTML

$mail->Subject = "PHPMailer测试邮件";
$mail->Body = "Hello,这是rokaye的测试邮件";
$mail->AltBody = "This is the body in plain text for non-HTML mail clients";

if(!$mail->Send())
{
echo "Message could not be sent. <p>";
echo "Mailer Error: " . $mail->ErrorInfo;
exit;
}

echo "Message has been sent";
?>


解决方法一

$mail = new PHPMailer();
$mail->CharSet = "GB2312"; // 设置字符集编码 utf-8
$mail->Encoding = "base64";//设置文本编码方式

如果标题错误可

$mail->Subject = "=?UTF-8?B?" . base64_encode("我的邮件") . "?=";

这两天写了个方法用到php mail()本以为php提供的这个方法非常简单、方便、易用,其实不然!

php mail()函数需要配置才可以发邮件的哦,下面配置方法

如果你没有使用windows,那么sendmail_path指令就是你唯一要担心的东西.如果你正在使用Windows,你就需要看看最后两个指令.

如果你使用的是Linux或是一个Unix变种,sendmail_path看起来应该象这样:

sendmail_path = /usr/sbin/sendmail

或者如果你使用Qmail:

sendmail_path = /var/qmail/bin/sendmail

在PHP mail()函数中的这条指令里,你还可以设置配置参数来指明队列缓冲选项或是显示的设置Return-Path头,如下所示:

sendmail_path = /usr/sbin/sendmail -t -fyou@yourdomain.com

作为一个非Windows用户,这就是你要做的一切了.如果你使用的是Windows,你有更多的事情要做.你还需要看一看SMTP和sendmail_from的值.不要被sendmail_from指令名字中的sendmail弄迷糊了.虽然你没有在Windows上使用名叫Sendmail的程序,但那只是指令的名字.不要被它吓到了.

在你的phpinfo()显示的结果里,看看SMTP和sendmail_from的缺省值--它们要么是空白,要么包含了胡乱的值.你应该把它们改成有意义的值.

如果你决心在这台电脑上运行一个SMTP服务程序,你在php.ini文件中的条目就应该如下:

SMTP = localhost

但是,如果你要使用你ISP(在这个例子中是EarthLink)的外发邮件服务器,那么php.ini中的邮件看起来应该如下:

SMTP = mail.earthlink.net

你也可以使用IP地址而不是域名,因为计算机不区分这两种条目.

第二条配置指令是sendmail_from,它应该被设置成From头中的电子邮件地址.它可以在脚本里被修改但是通常作为缺省值使用.下面就是这个配置指令的示例youraddress@yourdomain.com指的是你自己的邮件地址.

 代码如下 复制代码

sendmail_from = youraddress@yourdomain.com

发送一个简单的电子邮件:

 代码如下 复制代码

$txt = "First line of textnSecond line of text";
// Use wordwrap() if lines are longer than 70 characters
$txt = wordwrap($txt,70);
// Send email
mail("somebody@example.com","My subject",$txt);


刚开始感觉非常不错,网易邮箱、QQ邮箱、GMAIL邮箱常用的邮箱都可以收到,但经测试HOTMAIL、TOM、LIVE等邮箱是收不到此类邮件的!

经查询邮件发送的时候,一般都需要身份验证,而PHP自带的mail()无能为力,很脆弱啊!

[!--infotagslink--]

相关文章

  • NodeJS实现阿里大鱼短信通知发送

    本文给大家介绍的是nodejs实现使用阿里大鱼短信API发送消息的方法和代码,有需要的小伙伴可以参考下。...2016-01-20
  • PHP测试成功的邮件发送案例

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

    Promise是异步编程的一种解决方案,在ES6中Promise被列为了正式规范,统一了用法,原生提供了Promise对象。接下来通过本文给大家介绍Promise的介绍及基本用法,感兴趣的朋友一起看看吧...2021-10-21
  • php邮件发送的两种方式

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

    这篇文章主要介绍了c# 如何实现发送邮件的功能,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-07
  • php邮件发送的两种方式

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

    mail()函数的作用:连接到邮件服务器,利用smtp协议,与该服务器交互并投邮件。注意:1、mail函数不支持esmtp协议,---即,只能直投,不能登陆2、由上条,我们只能直投至最终的收件服务器地址.而该地址,又是在PHP.ini中指定的,所...2015-10-30
  • python实现企业微信定时发送文本消息的实例代码

    这篇文章主要介绍了python实现企业微信定时发送文本消息的实例代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-11-25
  • PHP中print_r、var_export、var_dump用法介绍

    文章详细的介绍了关于PHP中print_r、var_export、var_dump区别比较以及这几个在php不同的应用中的用法,有需要的朋友可以参考一下 可以看出print_r跟var_export都...2016-11-25
  • Framewrok7 视图介绍(views、view)使用介绍

    下面我们来看一篇关于Framewrok7 视图介绍(views、view)使用介绍吧,希望这篇文章能够帮助到各位朋友。 一、Views 与View的介绍 1,Views (<div class="views">) (1)Vi...2016-10-02
  • Monolog PHP日志类库使用详解介绍

    PHP日志类库在低版本中我们都没有看到了但在高版本的php中就有了,下面我们来看一篇关于PHP日志类库使用详解介绍吧. Monolog遵循PSR3的接口规范,可以很轻易的替换...2016-11-25
  • node.js 基于 STMP 协议和 EWS 协议发送邮件

    这篇文章主要介绍了node.js 基于 STMP 协议和 EWS 协议发送邮件的示例,帮助大家更好的理解和使用node.js,感兴趣的朋友可以了解下...2021-02-15
  • 比较正宗的验证邮箱的正则表达式js代码详解

    邮箱正则最正宗的一条正则语句是^[a-z0-9]+([._\\-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$ 下面我们来讲解一下...2021-05-07
  • php获取当前url地址的方法介绍

    这篇文章介绍了php获取当前url地址的方法小结,有兴趣的同学可以参考一下 本文实例讲述了php获取当前url地址的方法。分享给大家供大家参考,具体如下: js 获取: ...2017-01-22
  • 不错的mod_perl编程的简单应用实例介绍

    介绍性指南 mod_perl 是个庞大而复杂的工具,它内建了许多模块帮助你方便地构建动态网站。这篇指南的目的是帮助你构建一个良好的 mod_perl 模块,并从中理解 mod_perl 的实现...2020-06-29
  • PHP-GTK 介绍及其应用

    1. PHP-GTK介绍 1.1 PHP-GTK PHP-GTK是PHP的延伸模组,它可以让程式设计师写出在客户端执行的、且独立的GUI的程式。这个模组不允许在浏览器上显视GTK+的程式,它一开始就...2016-11-25
  • PHP用户注册邮箱验证正则表达式方法

    邮箱验证使用正则是非常的简单了,我们这里整理了两种PHP用户注册邮箱验证正则表达式方法例子,希望此文章能够让各位有帮助. 这里可以使用到2种方法,一种是用preg_matc...2016-11-25
  • PHP 获取文件目录权限函数fileperms介绍

    在php中要获取或目录权限我们可使用fileperms函数来获取,fileperms() 函数返回文件或目录的权限,。若成功,则返回文件的访问权限。若失败,则返回 false。 例子 1 ...2016-11-25
  • php中利用curl smtp发送邮件实例

    本文章来介绍人一下关于与我们不同的发送邮件的方法我们来利用php curl stmp来实现邮件的发送程序。 $ telnet 邮箱SMTP服务地址 25 Trying 邮箱服务IP地址......2016-11-25
  • php设置时区方法介绍

    php默认时区是欧美国家的所以与我们中国时区相差了整整8小时哦,下面我来给各位介绍php设置时区方法,有需要了解的朋友可进入参考。 在 php.ini 中,默认是 date.timez...2016-11-25