PHP之 使用PHPMailer插件实现邮件发送功能

一、下载PHPMailer文件,并把“选取文件”放到你项目的对应目录

下载地址:https://github.com/PHPMailer/PHPMailer/
选取文件:PHPMailer\src\

二、配置文件(服务配置以及发送人、内容相关配置)

/**
 * 文件:dict/dict_email.php
 * 邮件发送服务配置及内容相关配置
 * @Author NangongYi
 * @Time 2019/10/12
 */


/** 服务器参数配置 **/

$config['distribute_mail_config'] = [
    'protocol' => 'smtp',
    'smtp_crypto' => 'ssl',
    'smtp_host' => 'smtp.mxhichina.com',
    'smtp_user' => 'superMan@123456.com',
    'smtp_pass' => '123456',
    'smtp_port' => '465',
    'mailtype' => 'text',
    'validate' => 'true',
    'charset' => 'utf-8',
    'wordwrap' => 'TRUE',
    'smtp_timeout' => '30',
    'newline' => PHP_EOL,
    'crlf' => "\r\n"
];

/** 内容等相关配置 **/

$config['distribute_mail_info'] = [
    'from' => [
        'address' => 'superMan@123456.com',
        'name' => 'Master'
    ],
    'to' => [
        'to1' => 'zhangsan@123456.com'
    ],
    'cc' => [
        'cc1' => 'lisi@123456.com',
        'cc2' => 'wangwu@123456.com',
    ],
    'bcc' => [
        'bcc1' => 'zhaoliu@123456.com'
    ],
    'subject' => [
        'sub1' => '主题1,
        'sub2' => '主题2',
    ],
    'content' => [
        'cont1' => "内容1",
        'cont2' => "内容2",
    ]
];

三、代码部分(调用配置文件内容,实现数据处理、发送邮件操作)

/**
 * 发送邮件
 * @param int $type : 邮件内容类型  1,初次分账,失败发邮件;2,查询分账,失败发邮件
 * @param string $msg : 邮件内容
 * @return object    $msg='', $type
 */
public function SendMail($msg, $type)
{
    // 引入配置文件
    $this->load->config('dict/dict_email');
    // 邮件服务配置
    $mail_config = $this->config->item('distribute_mail_config');
    // 邮件信息相关
    $mail_info = $this->config->item('distribute_mail_info');
    // 发送邮件操作
    return $this->send($mail_config, $mail_info, $type, $msg);
}

/**
 * 发送邮件
 */
private function send($email_config, $email_info, $type, $msg)
{
    // 加载邮件服务类文件
    $this->mail_class_autolod();
    // 实例化邮件类
    $mail = new PHPMailer\PHPMailer\PHPMailer(true);
    // 对邮件服务配置
    $this->mail_config($mail, $email_config);
    // 邮件发送信息配置
    $mail->setFrom($email_config['smtp_user'], 'WB-Master');  //发件人
    // 发送抄送用户处理
    $this->receiver($mail, $email_info);
    // 邮件内容信息配置
    $this->mail_info($mail, $email_info, $type, $msg);
    // 邮件发送操作
    return $mail->send()?'SUCCESS': $mail->ErrorInfo;
}

/**
 * 加载邮件服务类文件
 */
private function mail_class_autolod()
{
    // 加载文件
    include_once(APPPATH.'services/base/PHPMailer/Exception.php');
    include_once(APPPATH.'services/base/PHPMailer/PHPMailer.php');
    include_once(APPPATH.'services/base/PHPMailer/SMTP.php');
}

/**
 * 邮件服务配置
 */
private function mail_config($mail, $email_config)
{
    // 服务器配置
    $mail->CharSet =$email_config['charset'];                     //设定邮件编码
    $mail->SMTPDebug = 0;                        // 调试模式输出
    $mail->isSMTP();                             // 使用SMTP
    $mail->Host = $email_config['smtp_host'];                // SMTP服务器
    $mail->SMTPAuth = true;                      // 允许 SMTP 认证
    $mail->Username = $email_config['smtp_user'];                // SMTP 用户名  即邮箱的用户名
    $mail->Password = $email_config['smtp_pass'];             // SMTP 密码  部分邮箱是授权码(例如163邮箱)
    $mail->SMTPSecure = $email_config['smtp_crypto'];         // 允许 TLS 或者ssl协议
    $mail->Port = $email_config['smtp_port']; // 服务器端口 25 或者465 具体要看邮箱服务器支持
}

/**
 * 发送人处理
 */
private function receiver($mail, $email_info)
{
    if(isset($email_info['to']) && $email_info['to']){
        for($i=1;$i<=count($email_info['to']);$i++){
            $mail->addAddress($email_info['to']['to'.$i], 'to'.$i);  // 收件人
        }
    }
    if(isset($email_info['cc']) && $email_info['cc']){
        for($i=1;$i<=count($email_info['cc']);$i++){
            $mail->addCC($email_info['cc']['cc'.$i]);  // 抄送人
        }
    }
    if(isset($email_info['bcc']) && $email_info['bcc']){
        for($i=1;$i<=count($email_info['bcc']);$i++){
            $mail->addBCC($email_info['bcc']['bcc'.$i]);  // 密送人
        }
    }
}

/**
 * 邮件内容信息配置
 */
private function mail_info($mail, $email_info, $type, $msg)
{
    $mail->isHTML(true);  // 是否以HTML文档格式发送  发送后客户端可直接显示对应HTML内容
    $mail->Subject = $email_info['subject']['sub'.$type]; // 标题
    $mail->Body    = $email_info['content']['cont'.$type].$msg; // 内容
}

四、调取方法,发送邮件

/**
 * 测试 - 发送邮件(NEW)
 */
public function test_send_mail_new()
{
    $this->load->service('account_service');
    echo json_encode($this->account_service->SendMail());
}

写在最后:

关于发邮件,用过其他的插件,但唯独PHPMailer最稳定,也最好用,测试、服务、生产,部署都没出现问题,因此,这里做一下记录,方便以后查看,有需要的小伙伴,也可以看一下!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
这个控件好好用 第一,需要下载PHPMailer文件包phpmailer. http://phpmailer.sourceforge.net/ 第二,确认你的服务器系统已经支持socket ,通过phpinfo();查看是否支持sockets(socket 是属于PHP扩展部分),如果显现为“enabled”,那就是支持了。 第三,把文件解压到你的web服务器目录下,调用类就可以了. 首先包含class.phpmailer.php,然后创建对象,设置参数,调用成员函数。具体请见下面的示例代码: 实例1,做成函数方便调用 <?php require("phpmailer/class.phpmailer.php"); function smtp_mail( $sendto_email, $subject, $body, $extra_hdrs, $user_name){ $mail = new PHPMailer(); $mail->IsSMTP(); // send via SMTP $mail->Host = "200.162.244.66"; // SMTP servers $mail->SMTPAuth = true; // turn on SMTP authentication $mail->Username = "yourmail"; // SMTP username 注意:普通邮件认证不需要加 @域名 $mail->Password = "mailPassword"; // SMTP password $mail->From = "yourmail@yourdomain.com"; // 发件人邮箱 $mail->FromName = "管理员"; // 发件人 $mail->CharSet = "GB2312"; // 这里指定字符集! $mail->Encoding = "base64"; $mail->AddAddress($sendto_email,"username"); // 收件人邮箱和姓名 $mail->AddReplyTo("yourmail@yourdomain.com","yourdomain.com"); //$mail->WordWrap = 50; // set word wrap 换行字数 //$mail->AddAttachment("/var/tmp/file.tar.gz"); // attachment 附件 //$mail->AddAttachment("/tmp/image.jpg", "new.jpg"); $mail->IsHTML(true); // send as HTML // 邮件主题 $mail->Subject = $subject; // 邮件内容 $mail->Body = " <html><head> <meta http-equiv="Content-Language" content="zh-cn"> <meta http-equiv="Content-Type" content="text/html; charset=GB2312"> </head> <body> I love php。 </body> </html> "; $mail->AltBody ="text/html"; if(!$mail->Send()) { echo "邮件发送有误 <p>"; echo "邮件错误信息: " . $mail->ErrorInfo; exit; } else { echo "$user_name 邮件发送成功!<br />"; } } // 参数说明(发送到, 邮件主题, 邮件内容, 附加信息, 用户名) smtp_mail("yourmail@yourdomain.com", "欢迎使用phpmailer!", "NULL", "yourdomain.com", "username"); ?>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值