php中PHPMailer发送带附件的电子邮件方法

 更新时间:2016年11月25日 17:30  点击:1726
在php开发利用PHPMailer发送邮件是常用的做法了,这种比起php mail用好用多了,下面我们来看看PHPMailer如何发送带有附件的电子邮件吧。

.首先到http://phpmailer.worxware.com/ 下载最新版本的程序包
2.下载完成后,找到class.phpmailer.php 、class.smtp.php两个类放到自己的目录下!
3.然后新建一个php文件这里命名为:phpmail_jiucool.php
4.phpmail_jiucool.php内容如下:


实例

 代码如下 复制代码

function postmail_jiucool_com($to,$subject = "",$body = ""){
    //Author:Jiucool WebSite: http://www.jiucool.com
    //$to 表示收件人地址 $subject 表示邮件标题 $body表示邮件正文
    //error_reporting(E_ALL);
    error_reporting(E_STRICT);
    date_default_timezone_set("Asia/Shanghai");//设定时区东八区
    require_once('class.phpmailer.php');
    include("class.smtp.php");
    $mail             = new PHPMailer(); //new一个PHPMailer对象出来
    $body             = eregi_replace("[]",'',$body); //对邮件内容进行必要的过滤
    $mail->CharSet ="UTF-8";//设定邮件编码,默认ISO-8859-1,如果发中文此项必须设置,否则乱码
    $mail->IsSMTP(); // 设定使用SMTP服务
    $mail->SMTPDebug  = 1;                     // 启用SMTP调试功能
                                           // 1 = errors and messages
                                           // 2 = messages only
    $mail->SMTPAuth   = true;                  // 启用 SMTP 验证功能
    $mail->SMTPSecure = "ssl";                 // 安全协议
    $mail->Host       = "smtp.googlemail.com";      // SMTP 服务器
    $mail->Port       = 465;                   // SMTP服务器的端口号
    $mail->Username   = "SMTP服务器用户名";  // SMTP服务器用户名
    $mail->Password   = "SMTP服务器密码";            // SMTP服务器密码
    $mail->SetFrom('发件人地址,如admin#jiucool.com #换成@', '发件人名称');
    $mail->AddReplyTo("邮件回复地址,如admin#jiucool.com #换成@","邮件回复人的名称");
    $mail->Subject    = $subject;
    $mail->AltBody    = "To view the message, please use an HTML compatible email viewer! - From www.jiucool.com"; // optional, comment out and test
    $mail->MsgHTML($body);
    $address = $to;
    $mail->AddAddress($address, "收件人名称");
    //$mail->AddAttachment("images/phpmailer.gif");      // attachment
    //$mail->AddAttachment("images/phpmailer_mini.gif"); // attachment
    if(!$mail->Send()) {
        echo "Mailer Error: " . $mail->ErrorInfo;
    } else {
        echo "Message sent!恭喜,邮件发送成功!";
        }
    }

注意:

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格式文件的附件类型可以是上面三种中的任意一种

实例

 代码如下 复制代码

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);  //查看发送的错误信息


只要加上这希就可以实例邮箱发送带附件了

$mail -> AddAttachment('include/id.csv','att.csv');//附件的路径和附件名称

php中count 多维数组长度统计实现方法 有需要的朋友可参考一下下。

下面程序运行结果为()

 代码如下 复制代码

?$numb=array(
            array(10,15,30),array(10,15,30),array(10,15,30)
);
 
echo count($numb,1);

A.3
B.12
C.6
D.9

答案:B

count函数中如果mode被设置为 COUNT_RECURSIVE(或 1),则会递归底计算多维数组中的数组的元素个数(也就是你结果的12)。如果不设置mode默认为0 。不检测多维数组(数组中的数组)(结果3)。


首先遍历的是外面的数组array得出有两个元素(”color1″,”color2″,”color3″) 为3
再遍历(”color1″,”color2″,”color3″)数组得出的是9个元素 为9
结果就是3+9=12

参考

 

 代码如下 复制代码

<?php
$fruits = array (
    array (1, 2,null,null, 5, 6),
    array (1, 2,null,null, 5, 6),
);

echo(count($fruits[0]));
?>

你说的可能是用其他方式定义的数组,比如直接用:

 代码如下 复制代码

<?php
$fruits[0][0]=1;
$fruits[0][3]=1;
$fruits[0][4]=1;

echo(count($fruits[0]));
?>

这样那就输出3,因为php中的数组不要求索引必须连续,参考手册上有如下一段:

数组
PHP 中的数组实际上是一个有序图。图是一种把 values 映射到 keys 的类型。此类型在很多方面做了优化,因此你可以把它当成真正的数组来使用,或列表(矢量),散列表(是图的一种实现),字典,集合,栈,队列以及更多可能性。因为可以用另一个 PHP 数组作为值,也可以很容易地模拟树。


实例


获得二维或多维数组的第一维的长度,这是个常用的程序判断,比如你读取的数组是一个二维数组:

 代码如下 复制代码
<?php
$arr=array(
                 0=>array('title' => '新闻1', 'viewnum' => 123, 'content' => 'ZAQXSWedcrfv'),
                 1=>array('title' => '新闻2', 'viewnum' => 99, 'content' => 'QWERTYUIOPZXCVBNM')
                );
?>

如果你想统计数组$arr的长度,也就是说该二维数组只有两条新闻,你想要的数字也是2,但是如果使用count($arr)不同版本的php,统计的结果是不一样的;
后来在php手册中发现,count函数还有第二个参数,解释如下:
count函数有两个参数:
0(或COUNT_NORMAL)为默认,不检测多维数组(数组中的数组);
1(或COUNT_RECURSIVE)为检测多维数组,
所以如果要判断读取的数组$arr是不是有新闻信息,就要这样写了:

 代码如下 复制代码
<?php
if(is_array($arr) && count($arr,COUNT_NORMAL)>0 )
{
  .....
} else {
  .....
}
?>

你可以使用这样的代码来测试该函数:

 代码如下 复制代码
<?php
$arr=array(
                 0=>array('title' => '新闻1', 'viewnum' => 123, 'content' => 'ZAQXSWedcrfv'),
                 1=>array('title' => '新闻2', 'viewnum' => 99, 'content' => 'QWERTYUIOPZXCVBNM')
               );
echo '不统计多维数组:'.count($arr,0);//count($arr,COUNT_NORMAL)
echo "<br/>";
echo '统计多维数组:'.count($arr,1);//count($arr,COUNT_RECURSIVE)
?>

好了,到此位置,已经解决php中获取二维或多维数组的第一维长度的问题

本文章介绍在php中关闭notice错误的一些做法,但是不得不说的是在关掉错误提示时,那么程序代码中大量的notice级别错误是否会造成PHP性能下降

PHP Notice:  Undefined variable
PHP Notice:  Undefined index
看看吧,你有没定义的变量直接使用了。不过编PHP的时候本来就不像C++那么严格,编程的时候经常还会利用这个特点。PHP的默认设置是显示这些提示,这会造成页面无法正常显示出来。

 代码如下 复制代码

//error_reporting(E_ALL);
error_reporting(E_ALL || ~E_NOTICE); //显示除去 E_NOTICE 之外的所有错误信息

第一个是代表显示所有错误,

第二个代表显示所有错误不显示警告,

我们只要把第二行前面加//,把第一行前面的//去掉即可。

附:各个错误报告详解

使用方法:

 代码如下 复制代码

error_reporting(0);//禁用错误报告
error_reporting(E_ALL ^ E_NOTICE);//显示除去 E_NOTICE 之外的所有错误信息
error_reporting(E_ALL^E_WARNING^E_NOTICE);//显示除去E_WARNING E_NOTICE 之外的所有错误信息
error_reporting(E_ERROR | E_WARNING | E_PARSE);//显示运行时错误,与error_reporting(E_ALL ^ E_NOTICE);效果相同。
error_reporting(E_ALL);//显示所有错误


实例

 代码如下 复制代码

if (!$a) {
 error_reporting(0);
 ob_start('ob_gzhandler');
} else {
 error_reporting(E_ALL ^ E_NOTICE);
}


在php.ini中禁止修改方法


1、由空间商在服务器中的php.ini的配置文件修改:

在php.ini文件中改动error_reporting

改为:

 代码如下 复制代码
error_reporting = E_ALL & ~E_NOTICE

如果你是固得美国空间用户,不能操作php.ini文件,你可以用下面的方法来实现

2.在你想禁止notice错误提示的页面中加入下面的代码

 代码如下 复制代码

/* Report all errors except E_NOTICE */
error_reporting(E_ALL ^ E_NOTICE);

注意一点的是


关闭掉PHP错误输出并不会关闭php内核对错误的处理,代码中如果有大量的Notice级别的错误,还是会降低php程序的性能。所以我们在开发的时候还是要将错误级别开至E_ALL,谨慎的处理掉每处不合理的代码

先用正则表达式获取IMG标签,然后把每个IMG标签的SRC抽取出来,并且组合成自己的内容,最后进行替换

我想对 html 的图片进行提取.

 代码如下 复制代码

<img ico src="/noavatar_small.gif" />

<img src="/noavatar_small.gif" />

如上地址. 我想全部提取出来 但是包含'ico' 的地址 忽略. 求正则 , 就是有些图片 提取.有些不提取.

例子:

 代码如下 复制代码
<s*imgs+[^>]*?srcs*=s*('|")(.*?)\1[^>]*?/?s*>

经改进后..

正确解答如下

 代码如下 复制代码

/<img(?:(?!(ico)).)+/>/

实例

 代码如下 复制代码

//要替换的内容   
    $content = '<img alt="" src="js/fckeditor/UserFiles/image/F201005201210502415831196.jpg" width="600" height="366"><br><br><br><br><img alt="" src="js/fckeditor/UserFiles/image/33_avatar_middle.jpg" width="120" height="120">';

    //提取图片路径的src的正则表达式
    preg_match_all("/<img(.*)src="([^"]+)"[^>]+>/isU",$content,$matches);

            $img = "";
            if(!empty($matches)) {
            //注意,上面的正则表达式说明src的值是放在数组的第三个中
                $img = $matches[2];
            }else {
                $img = "";
            }
            if (!empty($img)) {
                $img_url = "http://".$_SERVER['SERVER_NAME'];

                $patterns= array();
                $replacements = array();

                foreach($img as $imgItem){

                $final_imgUrl = $img_url.$imgItem;
                $replacements[] = $final_imgUrl;

                $img_new = "/".preg_replace("///i","/",$imgItem)."/";
                $patterns[] = $img_new;

                }

                //让数组按照key来排序
                ksort($patterns);
                ksort($replacements);

                //替换内容
                $vote_content = preg_replace($patterns, $replacements, $content);

PHP 批量替换相对地址为绝对地址实现代码 有需要的朋友可参考一下。
 代码如下 复制代码

<?php
//需要替换的关键字
$GLOBALS["patterns"] = array(
    "/#BASE_URL#/"
);

//替换后的内容,和上面的匹配规则一一对应
$GLOBALS["replacements"] = array(
   "http://api.map.baidu.com/lbsapi/cloud/"
    //"http://172.22.168.178/lbsapi/"
    //"http://dev.baidu.com/wiki/static/map/cloud/"
);

/**
 * 操纵文件类
 *
 * 例子:
 * FileUtil::copyDir('b','d/e');                    测试复制文件夹 建立一个d/e文件夹,把b文件夹下的内容复制进去
 * FileUtil::copyFile('b/1/2/3.exe','b/b/3.exe'); 测试复制文件        建立一个b/b文件夹,并把b/1/2文件夹中的3.exe文件复制进去
 * FileUtil::createDir('a/1/2/3');                    测试建立文件夹 建一个a/1/2/3文件夹
 * FileUtil::unlinkFile('b/d/3.exe');             测试删除文件        删除b/d/3.exe文件
 */
class FileUtil {
    /**
     * 建立文件夹
     *
     * @param string $aimUrl
     * @return viod
     */
    function createDir($aimUrl) {
        $aimUrl = str_replace('', '/', $aimUrl);
        $aimDir = '';
        $arr = explode('/', $aimUrl);
        foreach ($arr as $str) {
            $aimDir .= $str . '/';
            if (!file_exists($aimDir)) {
                mkdir($aimDir);
            }
        }
    }

    /**
     * 删除文件
     *
     * @param string $aimUrl
     * @return boolean
     */
    function unlinkFile($aimUrl) {
        if (file_exists($aimUrl)) {
            unlink($aimUrl);
            return true;
        } else {
            return false;
        }
    }
   
    /**
     * 复制文件夹
     *
     * @param string $oldDir
     * @param string $aimDir
     * @param boolean $overWrite 该参数控制是否覆盖原文件
     * @return boolean
     */
    function copyDir($oldDir, $aimDir, $overWrite = false) {
        $aimDir = str_replace('', '/', $aimDir);
        $aimDir = substr($aimDir, -1) == '/' ? $aimDir : $aimDir.'/';
        $oldDir = str_replace('', '/', $oldDir);
        $oldDir = substr($oldDir, -1) == '/' ? $oldDir : $oldDir.'/';
        if (!is_dir($oldDir)) {
            return false;
        }
        if (!file_exists($aimDir)) {
            FileUtil::createDir($aimDir);
        }
        $dirHandle = opendir($oldDir);
        while(false !== ($file = readdir($dirHandle))) {
            if ($file == '.' || $file == '..') {
                continue;
            }
            if (!is_dir($oldDir . $file)) {
                FileUtil::copyFile($oldDir . $file, $aimDir . $file, $overWrite);
            } else {
                FileUtil::copyDir($oldDir . $file, $aimDir . $file, $overWrite);
            }
        }
        return closedir($dirHandle);
    }
    /**
     * 复制文件
     *
     * @param string $fileUrl
     * @param string $aimUrl
     * @param boolean $overWrite 该参数控制是否覆盖原文件
     * @return boolean
     */
    function copyFile($fileUrl, $aimUrl, $overWrite = false) {
        if (!file_exists($fileUrl)) {
            return false;
        }
        if (file_exists($aimUrl) && $overWrite == false) {
            return false;
        } elseif (file_exists($aimUrl) && $overWrite == true) {
            FileUtil::unlinkFile($aimUrl);
        }
        $aimDir = dirname($aimUrl);
        FileUtil::createDir($aimDir);
        copy($fileUrl, $aimUrl);
        //替换变量
        $apiFilePointer = fopen($aimUrl, 'r');
        $apiFileContent = fread($apiFilePointer, filesize($aimUrl));
        //只在js、html、css文件进行替换
        if (preg_match('/(.js|.html|.css|.htm)$/', $aimUrl)) {
            $apiFileContent = preg_replace($GLOBALS["patterns"], $GLOBALS["replacements"], $apiFileContent);
        }
        fclose($apiFilePointer);
        echo $aimUrl."rn";
        $apiFilePointer = fopen($aimUrl, 'w+');
        fwrite($apiFilePointer, $apiFileContent);
        fclose($apiFilePointer);
        //替换变量
        return true;
    }
}

FileUtil::copyDir("resource","cloud",true);

?>

[!--infotagslink--]

相关文章

  • phpMailer 发送邮件

    //原创:www.111cn.net 注明:转载说明来处www.111cn.net // 昨天听一网友说用php 里面的mail发邮件发不出去,我想一般都是发不了的,现在大多数据邮件提供商都不准那样了...2016-11-25
  • 解决PHPMailer错误SMTP Error: Could not connect to SMTP host的办法

    PHPMailer发邮件时提示SMTP Error: Could not connect to SMTP host错误是smtp服务器的问题我们一起来看看关于SMTP Error: Could not connect to SMTP host问题的解...2016-11-25
  • 用PHP发送有附件的电子邮件

    我经常听到这样一个问题:"我有一个从网站发来的合同。我如何给通过表单发送的电子邮件增加一个附件呢?" 首先我要说的是要做到这个没有什么简单的办法。你要很好的理解PH...2016-11-25
  • phpmailer发送邮件 SMTP Error: Could not authenticate 错误

    今天在使用phpmailer发送邮件时居然提示SMTP Error: Could not authenticate,这个感觉是smtp设置的问题,下面我在网上找到了几种解决办法。 今天在使用phpmailer发...2016-11-25
  • phpmailer 发送邮件实例代码

    header("Content-type:text/html;charset=utf-8"); include('phpmailer/class.phpmailer.php'); include('phpmailer/class.smtp.php'); $mail = new PHPMailer();...2016-11-25
  • phpmailer邮件发送实例(163邮箱 126邮箱 yahoo邮箱)

    phpmailer是一个非常优秀的php邮箱发送插件了,他可以几乎实现任何邮箱登录发送,下面我介绍163邮箱 126邮箱 yahoo邮箱的发送方法。 准备工作: 我们必须注册一个邮...2016-11-25
  • 利用phpmailer 发送邮件代码[发送html内容]

    我们利用 phpmailer功能实现 邮件发送功能哦,这里还利用了模板呢,就是读取指定文件内容再发送给朋友。 <?php @session_start(); include(dirname(__FILE__).'....2016-11-25
  • .net SMTP发送Email实例(可带附件)

    本文为大家详细介绍下.net SMTP发送Email同时可带附件的具体实现思路及代码,想实现的朋友可以参考下哈,希望对大家有所帮助...2021-09-22
  • IIS7下配置最大上传附件大小需要注意的事项及操作步骤

    IIS6 默认允许的附件最大上传大小为4M,在IIS7之前,当我们需要扩大这个上传限制时可以在web.config中做下配置在使用IIS7后,除了进行以上配置外,还需要注意到一下操作步骤,感兴趣的朋友可以了解下...2016-01-27
  • 使用PHPMailer发送邮件实例代码总结

    PHPMailer发送邮件现在php开发者比较常用的一个邮件发送组件了,利用它我们几乎不需要考虑任何问题,只要简单的把代码放网上把邮箱用户名密码与stmp改一下就可以发邮件了...2016-11-25
  • asp.net使用jQuery Uploadify上传附件示例

    Uploadify是JQuery的一个上传插件,实现的效果非常不错,带进度显示,本文是一个简单的介绍Demo,主要是动态传递参数方法,通过formdata 向处理程序传递额外的表单数据...2021-09-22
  • php写的发送附件的程序(二)

    <?php class html_mime_mail{ var $headers; var $body; var $multipart; var $mime; var $html; var $html_text; v...2016-11-25
  • phpmailer发送邮件实例程序

    在php中发邮件会用到mail函数 ,但是大多数情情况mail函数是不可用的,我们有插件来实例了phpmailer来实现发送邮件。 代码如下 复制代码 requi...2016-11-25
  • php 在线发送电子邮件代码

    <html> <head><title>Mail sender</title></head> <body> <form action=”mail.php” method=”POST”> <b>Email</b><br> <input type...2016-11-25
  • php中使用smtp类轻松的发送电子邮件示例

    smtp发送邮箱个人觉得比php mail函数要实用的多了,mail函数不是随便可以发邮箱的需要进行相关配置哦,下面我们来看一个关于smtp类发送邮箱与问题解决方法。 当你还...2016-11-25
  • php 利用phpmailer 在线发送邮件

    html代码 <form action="lead_mail_send.php" method="Post" enctype="multipart/form-data" name="myfm"> <table width="80%" border="0" align="center" cellspa...2016-11-25
  • thinkphp中怎么使用phpmailer发送邮件

    phpmailer发送邮件是php开发者首选的一个邮件发送插件了,下面我来介绍怎么集成phpmailer到thinkphp框架了,有需要了解的朋友可参考。 phpmailer发送邮件功能很强...2016-11-25
  • phpmailer多邮件发送

    phpmailer多邮件发送 require("class.phpmailer.php"); $mail = new PHPMailer(); $mail->From = "list@mydomain.com"; $mail->FromName = "List manager"; $ma...2016-11-25
  • C#添加、获取、删除PDF附件实例代码

    这篇文章主要介绍了如何在C#添加、获取、删除PDF附件,文中代码非常详细,快来和小编一起学习吧...2020-06-25
  • 用PHP实现用From发送电子邮件

    说明:用PHP实现发送电子邮件是比较简单的!大家可以看看如下完整代码。 1.把下面这段代码复制到你的网页中,可以复制到.HTML文件中。 <form action="mail.php" metho...2016-11-25