技术饭
PHPMailer实现PHP的邮件发送,附带附件
phpMailer 是一个非常强大的 ph p发送邮件类,可以设定发送邮件地址、回复地址、邮件主题、html网页,上传附件,并且使用起来非常方便。
phpMailer 的特点:
1、在邮件中包含多个 TO、CC、BCC 和 REPLY-TO。
2、平台应用广泛,支持的 SMTP 服务器包括 Sendmail、qmail、Postfix、Gmail、Imail、Exchange 等等。
3、支持嵌入图像,附件,HTML 邮件。
4、可靠的强大的调试功能。
5、支持 SMTP 认证。
6、自定义邮件头。
7、支持 8bit、base64、binary 和 quoted-printable 编码。
phpmailer 安装或者下载方式:
1、从 github 上下载: https://github.com/PHPMailer/PHPMailer/
2、使用 composer 安装:
composer require phpmailer/phpmailer
发送之前需要拥有自己的邮件服务器,测试的时候其实用自己申请的免费邮箱最方便了,不需要自己再搭建服务器了,可能要配置邮箱的SMTP服务,大部分公共邮箱(163、qq等)为了安全默认是关闭的。
网易邮箱配置如下图:
QQ 邮箱相关配置如下图:
邮箱 POP3服务器(端口995) SMTP服务器(端口465或587)
qq.com pop.qq.com smtp.qq.com
当然除了网易和 QQ 邮箱其他邮箱也是可以的,下面给出 php 代码示例:
/**
* [sendMail 发送邮件函数基于PHPMailer]
* @param [string] $address [接收邮件地址]
* @param [string] $title [发送标题]
* @param [string] $message [发送的内容]
*/
function sendMail($data = array()){
//验证发送数据
if(empty($data)){
return ['code' => 0, 'msg' => '参数异常'];
}
//验证邮件功能是否打开
if(!config('email_open')){
return ['code' => 0, 'msg' => '邮件功能未开启'];
}
//实例化邮件类,true表示开启异常
$mail = new \PHPMailer\PHPMailer\PHPMailer(true);
try {
//服务器设置
$mail->CharSet='UTF-8'; //设置邮件的字符编码,若不指定,则为'UTF-8'
//$mail->SMTPDebug = 2; //启用调试输出
$mail->isSMTP(); //设置使用SMTP
$mail->Host = config('email_smtp_server'); //指定主和备份SMTP服务器
$mail->SMTPAuth = true; //启用SMTP认证
$mail->Username = config('email_account'); //SMTP账号
$mail->Password = config('email_password'); //SMTP密码
$mail->SMTPSecure = config('email_protocol'); //tls与ssl加密类型
$mail->Port = config('email_smtp_port'); //tcp服务器端口号
//接受邮件
$mail->setFrom(config('email_email_address'), config('email_nickname')); //发件人
//收件人,可以多次使用来添加多个收件人
if(isset($data['address']) && !empty($data['address'])){
foreach($data['address'] as $key=>$value){
$mail->addAddress($value['email'], $value['nickname']);
}
}
//设置回复地址
$mail->addReplyTo(config('email_email_address'), config('email_nickname'));
//$mail->addCC('cc@example.com');
//$mail->addBCC('bcc@example.com');
//添加附件
if(isset($data['attachment']) && !empty($data['attachment'])){
foreach($data['attachment'] as $key=>$value){
$mail->addAttachment($value['file'], $value['name']);
}
}
//发送内容
$mail->isHTML(true); //将邮件格式设置为HTML
$mail->Subject = $data['title']; //邮件标题
$mail->Body = $data['content']; //邮件正文
$mail->AltBody = $data['content']; //邮件正文不支持HTML的备用显示
//发送
if($mail->send()){
return ['code' => 1, 'msg' => '邮件发送成功'];
}
} catch (\PHPMailer\PHPMailer\Exception $e) {
return ['code' => 0, 'msg' => '邮件发送失败:'.$mail->ErrorInfo];
}
}
发邮件:
if($data['nature'] == 1){
//1、发送发票邮件
//数据
$data = [
'address' => [
[
'email' => $data['email'],
'nickname' => '',
]
],
'title' => '活多多电子发票',
'content' => '<b>尊敬的活多多用户,您好:</b><br><b>  您申请的电子发票已开具,请查收。</b><br><br>  <a href="'.$this->request->domain().'/uploads/hddimages/20200918/FP20200912164509F02041267-C1.pdf" target="_blank"><b>活多多电子发票链接</b></a>',
'attachment' => [
[
'file' => './uploads/hddimages/20200918/FP20200912164509F02041267-C1.pdf',
'name' => 'FP20200912164509F02041267-C1.pdf'
]
]
];
//发送
$res = sendMail($data);
if($res['code']){
$res4 = 1;
} else {
$res4 = 0;
//返回数据
$return['code'] = 0;
$return['msg'] = $res['msg'];
return json($return);
}
}
发邮件结果:
文明上网理性发言!