关于 PHPMailer 邮件发送类的使用心得(含多文件上传)

Is this important for send mail

  • PHPMailer 核心文件

    • class.phpmailer.php
    • class.phpmaileroauth.php
    • class.phpmaileroauthgoogle.php
    • class.pop3.php
    • class.smtp.php
    • get_oauth_token.php
    • PHPMailerAutoload.php
  • 在使用PHPMailer之前,首先查看PHP环境扩展中是否开启了socketopenssl扩展,如若没有开启,请在php.ini配置文件中开启两者扩展支持
  • 大多数主流邮箱都支持SMTP协议,除去QQ邮箱,在作为三方代发邮箱时,需要开启SMTP服务支持,并需要授权码登录使用邮箱。对于其他像163、sina等邮箱直接使用代发邮箱账号和密码即可。
    • code of demo
    • <?php
      // 引入PHPMailer核心类文件(SMTP协议方式)
      require_once(‘class.phpmailer.php‘);
      require_once(‘class.smtp.php‘);
      
      $mail = new PHPMailer();
      
      // 是否开启debug调试模式,默认为false,非开发环境建议关闭
      $mail->SMTPDebug = 0;
      
      // 使用SMTP鉴权方式发送邮件(通用必写方法)
      $mail->isSMTP();
      
      // 一旦使用SMTP鉴权方式,必须为True(通用必写方法)
      $mail->SMTPAuth = true;
      
      /**
       * 以下开始分为QQ邮箱和非QQ邮箱方式,以sina邮箱为例
       * QQ邮箱方式需要使用ssl方式加密登录,登录密码使用所
       * 给授权码,在邮箱设置中的账号中,开启IMAP/SMTP服务
       * 并验证密保成功,会给出授权码
       */
      // 连接的SMTP服务器主机地址(QQ)
      $mail->HOST = ‘smtp.qq.com‘;
      // 设置使用ssl加密方式登录鉴权(QQ),其他邮箱请注释或者令属性值为空
      $mail->SMTPSecure = ‘ssl‘;
      // 设置ssl连接SMTP服务器远程连接端口号(QQ)
      $mali->Port = ‘465‘;
      // 设置发送邮件编码
      $mail->CharSet = ‘UTF-8‘;
      // 设置发送人昵称
      $mail->FromName = ‘发件人昵称‘;
      // 设置发件人邮箱账户
      $mail->Usename = ‘[email protected]‘;
      // QQ邮箱使用获取到的授权码作为账户的登录密码,其他邮箱使用邮箱密码登录即可
      $mail->Password = ‘***********‘;
      //发件人邮箱地址,同发件人邮箱
      $mail->From = ‘[email protected]‘;
      // 设置邮件正文是否为HTML编码
      $mail->isHTML(true);
      // 添加收件人邮箱地址,如若需要群发多人,可多次调用此方法即可
      $mail->addAddress(‘[email protected]‘);
      //$mail->addAddress(‘[email protected]‘);
      // 设置邮件主题
      $mail->Subject = ‘邮件主题‘;
      // 设置邮件正文(可使用定界符来定义大量正文内容)
      $mail->Body = <<< EOR
      <h1>Test mail</h1>
      EOR;
      /* 设置邮件附件,此方法两个参数,分别是附件的位置路径(绝对或者相对路径)以及附件的命名,可  多次调用此方法,添加多个附件 */
      $mail->addAttachment($path,$name);
      //$mail->addAttachment($path,$name);
      // 发送邮件并返回 bool
      $status = $mail->send();
      // 根据返回 bool 值进行判断操作
      if($status){
          #code ...
          $mail->smtpClose();
      }else{
          echo ‘Send Mail Error! Error Message is ‘.$mail->ErrorInfo;
      }
    • 常见的(SMTP、POP3)邮箱服务器以及端口

      <?php
      /**
       * 此处列举的各大主流或者常见的邮箱服务器如果在连接时出现错误,请注册相应邮箱,在其邮箱
       * 设置中查看相应邮箱服务器的主机地址以及端口
       */
      sina.com
      POP3服务器地址:pop3.sina.com.cn(端口:110)
      SMTP服务器地址:smtp.sina.com.cn(端口:25) 
      
      sina.cn
      POP3服务器地址:pop3.sina.com(端口:110)      ------- > pop.sina.com
      SMTP服务器地址:smtp.sina.com(端口:25)
      
      sinaVIP
      POP3服务器:pop3.vip.sina.com (端口:110)
      SMTP服务器:smtp.vip.sina.com (端口:25)
      
      sohu.com
      POP3服务器地址:pop3.sohu.com(端口:110)
      SMTP服务器地址:smtp.sohu.com(端口:25)
      
       126邮箱
        POP3服务器地址:pop.126.com(端口:110)
        SMTP服务器地址:smtp.126.com(端口:25)
      
        139邮箱
        POP3服务器地址:POP.139.com(端口:110)
        SMTP服务器地址:SMTP.139.com(端口:25)
      
        163.com
        POP3服务器地址:pop.163.com(端口:110)
        SMTP服务器地址:smtp.163.com(端口:25)
      
        QQ邮箱
        POP3服务器地址:pop.qq.com(端口:110)
        SMTP服务器地址:smtp.qq.com(端口:ssl/465|Tls/587)
      
        QQ企业邮箱
        POP3服务器地址:pop.exmail.qq.com (SSL启用 端口:995)
        SMTP服务器地址:smtp.exmail.qq.com(SSL启用 端口:ssl/465|Tls/587)
      
        yahoo.com
        POP3服务器地址:pop.mail.yahoo.com
        SMTP服务器地址:smtp.mail.yahoo.com
      
        yahoo.com.cn
        POP3服务器地址:pop.mail.yahoo.com.cn(端口:995)
        SMTP服务器地址:smtp.mail.yahoo.com.cn(端口:587
      
        HotMail
        POP3服务器地址:pop3.live.com(端口:995)
        SMTP服务器地址:smtp.live.com(端口:587)
      
        gmail(google.com)
        POP3服务器地址:pop.gmail.com(SSL启用端口:995)
        SMTP服务器地址:smtp.gmail.com(SSL启用 端口:587)
      
        263.net
        POP3服务器地址:pop3.263.net(端口:110)
        SMTP服务器地址:smtp.263.net(端口:25)
      
        263.net.cn
        POP3服务器地址:pop.263.net.cn(端口:110)
        SMTP服务器地址:smtp.263.net.cn(端口:25)
      
        x263.net
        POP3服务器地址:pop.x263.net(端口:110)
        SMTP服务器地址:smtp.x263.net(端口:25)
      
        21cn.com
        POP3服务器地址:pop.21cn.com(端口:110)
        SMTP服务器地址:smtp.21cn.com(端口:25)
      
        Foxmail
        POP3服务器地址:POP.foxmail.com(端口:110)
        SMTP服务器地址:SMTP.foxmail.com(端口:25)
      
        china.com
        POP3服务器地址:pop.china.com(端口:110)
        SMTP服务器地址:smtp.china.com(端口:25)
      
        tom.com
        POP3服务器地址:pop.tom.com(端口:110)
        SMTP服务器地址:smtp.tom.com(端口:25)
      
        etang.com
        POP3服务器地址:pop.etang.com(端口:110)
        SMTP服务器地址:smtp.etang.com(端口:25)    
    • 关于表单多文件上传并发送邮箱 demo
    • <html>
          <head>
              <title></title>
          </head>
          <body>
              <form method="POST" enctype="multipart/form-data" action="form_test.php">
                  <input type="file" name="upload[]" multiple="multiple" />
                  <button type="submit">提交</button>
              </form>
          </body>
      </html>
    • 多文件选择上传,表单提交 $_FILES 数据形式打印,如图
    • form_test.php
    • <?php
      header("content-type:text/html;charset=utf-8");
      if($_FILES[‘upload‘][‘error‘][0] == 4){
          echo("<script type=‘text/javascript‘> alert(‘请上传文件‘); window.history.back();</script>");
          exit;
      }else{
          // 设置文件保存目录
          $uploaddir = "../upload/file/";
          require_once ‘upload_img.php‘;
          $FJ = array();
          for($i=0; $i<count($_FILES[‘upload‘][‘name‘]); $i++) {
      
              if(file_exists($_FILES[‘upload‘][‘tmp_name‘][$i]) && is_uploaded_file($_FILES[‘upload‘][‘tmp_name‘][$i]))
              {
                  //判断文件类型
                  if(!in_array(strtolower(fileext($_FILES[‘upload‘][‘name‘][$i])),$type))
                  {
                      $text=implode(",",$type);
                      $page_result=$text;
                      echo("<script type=‘text/javascript‘> alert(‘请上传格式为 ".$page_result." 的图片‘); window.history.back();</script>");
                      exit;
                  }else{
                      //生成目标文件的文件名
                      $filename=explode(".",$_FILES[‘upload‘][‘name‘][$i]);
                      do
                      {
                          $filename[0]=random(10);
                          $name=implode(".",$filename);
                          $uploadfile=$uploaddir.$name;
                      }
                      while(file_exists($uploadfile));
                      if (move_uploaded_file($_FILES[‘upload‘][‘tmp_name‘][$i],$uploadfile))
                      {   
      
                          $FJ[] = $uploadfile;
                      }
                  }
              }else{
                  echo("<script type=‘text/javascript‘> alert(‘上传失败,请重试‘); window.history.back();</script>");
                  exit;
              }
          }
      }
      
      // 发送邮件(QQ)
      require_once("class.phpmailer.php");
      require_once("class.smtp.php");
      
      $mail = new PHPMailer();
      $mail->SMTPDebug = 0;
      $mail->isSMTP();
      $mail->SMTPAuth = true;
      $mail->SMTPSecure = ‘ssl‘;
      $mail->Host = ‘smtp.qq.com‘;
      $mail->Port = ‘465‘;
      $mail->CharSet = ‘UTF-8‘;
      $mail->FromName = ‘Form Data‘;
      $mail->Username = ‘发送人邮箱账户‘;
      $mail->Password = ‘发件人账户授权码‘;
      $mail->From = ‘发件人邮箱账户‘;
      $mail->isHTML(true);
      $mail->addAddress(‘收件人邮箱‘);
      $mail->Subject = ‘mail title‘;
      $mail->Body = ‘<h1>Form Data<h1>‘;
      
      // 根据当前脚本文件位置获取所需目录绝对地址
      $Active_path = dirname(dirname(__FILE__));
      
      // 循环拼接附件绝对路径并调用附件添加方法加入邮件附件中
      for ($i=0; $i < count($FJ) ; $i++) {
          if(file_exists($FJ[$i])){
              $FJ[$i] = $Active_path.‘/‘.str_replace(‘../‘, ‘‘, $FJ[$i]);
              $mail->addAttachment($FJ[$i]);
          }else{
              continue;
          }
      }
      
      $status = $mail->send();
      if($status){
          // 发送成功,根据需要是否将上传附件文件删除,上传失败亦然
          for ($i=0; $i < count($FJ) ; $i++) {
              if(file_exists($FJ[$i])){
                  unlink($FJ[$i]);
              }
          }
          echo("<script type=‘text/javascript‘> alert(‘send mail success!‘); window.history.back();</script>");
          exit;
      }else{
          for ($i=0; $i < count($FJ) ; $i++) {
              if(file_exists($FJ[$i])){
                  unlink($FJ[$i]);
              }
          }
           echo("<script type=‘text/javascript‘> alert(‘send mail fail,please try again!Error message: ‘".$mail->ErrorInfo."‘); window.history.back();</script>");
          exit;
      }
    • upload_img.php
    • <?php
      //设置允许上传文件的类型
      $type=array("jpg","gif","bmp","jpeg","png"); 
      
      //获取文件后缀名函数
      function fileext($filename)
      {
          return substr(strrchr($filename, ‘.‘), 1);
      } 
      
      //生成随机文件名函数
      function random($length)
      {
          $hash = ‘SC-‘;
          $chars = ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz‘;
          $max = strlen($chars) - 1;
          mt_srand((double)microtime() * 1000000);
          for($i = 0; $i < $length; $i++)
          {
              $hash .= $chars[mt_rand(0, $max)];
          }
          return $hash;
      } 
      
      // 获取不同比例的缩略图
      function ResizeImage($uploadfile,$maxwidth,$maxheight,$name)
      {
          //取得当前图片大小
          $width = imagesx($uploadfile);
          $height = imagesy($uploadfile);
          $i=0.5;
          //生成缩略图的大小
          if(($width > $maxwidth) || ($height > $maxheight))
          {
              /*
              $widthratio = $maxwidth/$width;
              $heightratio = $maxheight/$height;
      
              if($widthratio < $heightratio)
              {
                  $ratio = $widthratio;
              }
              else
              {
                   $ratio = $heightratio;
              }
      
              $newwidth = $width * $ratio;
              $newheight = $height * $ratio;
              */
              $newwidth = $width * $i;
              $newheight = $height * $i;
              if(function_exists("imagecopyresampled"))
              {
                  $uploaddir_resize = imagecreatetruecolor($newwidth, $newheight);
                  imagecopyresampled($uploaddir_resize, $uploadfile, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
              }
              else
              {
                  $uploaddir_resize = imagecreate($newwidth, $newheight);
                  imagecopyresized($uploaddir_resize, $uploadfile, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
              }
      
              ImageJpeg ($uploaddir_resize,$name);
              ImageDestroy ($uploaddir_resize);
          }
          else
          {
              ImageJpeg ($uploadfile,$name);
          }
      }
      
      // 此处注释内容为图片文件的比例缩放
      // if($_FILES["filename"][‘size‘])
      // {
      //     if($file_type == "image/pjpeg"||$file_type == "image/jpg"|$file_type == "image/jpeg")
      //     {
      //         //$im = imagecreatefromjpeg($_FILES[$upload_input_name][‘tmp_name‘]);
      //         $im = imagecreatefromjpeg($uploadfile);
      //     }
      //     elseif($file_type == "image/x-png")
      //     {
      //         //$im = imagecreatefrompng($_FILES[$upload_input_name][‘tmp_name‘]);
      //         $im = imagecreatefromjpeg($uploadfile);
      //     }
      //     elseif($file_type == "image/gif")
      //     {
      //         //$im = imagecreatefromgif($_FILES[$upload_input_name][‘tmp_name‘]);
      //         $im = imagecreatefromjpeg($uploadfile);
      //     }
      //     else//默认jpg
      //     {
      //         $im = imagecreatefromjpeg($uploadfile);
      //     }
      //     if($im)
      //     {
      //         ResizeImage($im,$pic_width_max,$pic_height_max,$uploadfile_resize);
      
      //         ImageDestroy ($im);
      //     }
      // } 

原文地址:https://www.cnblogs.com/liwei-17/p/8988232.html

时间: 2024-10-10 21:25:55

关于 PHPMailer 邮件发送类的使用心得(含多文件上传)的相关文章

Android 开发工具类 32_通过 HTTP 协议实现文件上传

完成像带有文件的用户数据表单的上传,而且可以上传多个文件,这在用户注册并拍照时尤其有用. 1 import java.io.BufferedReader; 2 import java.io.ByteArrayOutputStream; 3 import java.io.DataOutputStream; 4 import java.io.InputStream; 5 import java.io.InputStreamReader; 6 import java.io.OutputStream;

文件上传帮助类

using System; using System.Collections.Generic; using System.Text; using System.Web.UI.WebControls; using System.IO; namespace AIMSCommon { /// <summary> /// 文件上传帮助类 /// </summary> public class UploadHelper { /// <summary> /// 文件上传 /// &

新版本Java邮件发送类

之前曾经做过几个邮件发送类,有兴趣可以查阅前面的帖子. 使用过程中,发现一些不便之处,并作出了改进,将改进后的版本发布如下: 基类及其附属类共三个:(下载地址:http://pan.baidu.com/s/1bn1VkUN) import java.io.File; import java.util.Date; import java.util.List; import java.util.Properties; import javax.activation.DataHandler; impo

phpmailer邮件发送 错误 :SMTP Error: Could not authenticate.

phpmailer邮件发送  错误 :SMTP Error: Could not authenticate. 需要开启SMTP 解决方法:

.NET开发邮件发送功能的全面教程(含邮件组件源码)

ref: http://www.cnblogs.com/heyuquan/p/net-batch-mail-send-async.html 今天,给大家分享的是如何在.NET平台中开发"邮件发送"功能.在网上搜的到的各种资料一般都介绍的比较简单,那今天我想比较细的整理介绍下: 1)         邮件基础理论知识 2)         邮件发送相关.NET类库 3)         介绍我开发的一个发送邮件的小组件(MailHelper) 4)         MailHelper组

文件上传与邮件发送

# 文件上传与邮件发送 ### 原生实现 - 模板文件 ```html <form method="post" enctype="multipart/form-data"> <input type="file" name="photo" /><br /> <input type="submit" value="上传" /> </for

JavaWeb之文件上传与下载&amp;邮件技术(十八)

文件上传 简介 最近发现这几篇很少写简介,说自己没时间写,可能是说服自己吧.总之能多写就多写.还有个一直存在的问题,每天写的博客质量不是很好.再次说服自己,现在处于学习阶段,写博客为了巩固知识点,以便后期作复习使用.其实我每次写博客之前笔记老早都在nopad++上写好了,所以大部分在wlw上直接粘贴的,请见谅 1. 文件上传必要前提 1. form表单:属性enctype必须取值为multipart/form-data enctype的默认值是:application/x-www-form-ur

Uploader 文件上传器类

概述 客户端完全基于JavaScript的 浏览器文件上传器,不需要任何浏览器插件,但需要和jQuery框架协同工作,支持超大文件上传,其算法是将一个超大文件切片成N个数据块依次提交给服务 端处理,由服务端存储断点信息实现断点续传的功能:支持文件拖拽上传,直接将文件拖拽到页面元素上方即可自动上传(默认元素是body):服务端采用asp.net 4.0程序开发,包含有处理程序,提供程序和视图控件,当然也可以用java或者php实现服务端程序. 浏览器兼容:IE10+.火狐.谷歌.Opera.win

WebApi发送HTML表单数据:文件上传与多部分MIME

5.3 Sending HTML Form Data5.3 发送HTML表单数据(2) 本文引自:http://www.cnblogs.com/r01cn/archive/2012/12/20/2826230.html By Mike Wasson|June 21, 2012作者:Mike Wasson | 日期:2012-6-21 Part 2: File Upload and Multipart MIME第2部分:文件上传与多部分MIME This tutorial shows how to