对于程序员来说,项目中邮件发送是常用的一个功能, 我在这不讲源码,只讲如何能快速地实现。
phpMailer 是一个非常强大的 php发送邮件类,可以设定发送邮件地址、回复地址、邮件主题、html网页,上传附件,并且使用起来非常方便。
在邮件中包含多个 TO、CC、BCC 和 REPLY-TO。
平台应用广泛,支持的 SMTP 服务器包括 Sendmail、qmail、Postfix、Gmail、Imail、Exchange 等等。
支持嵌入图像,附件,HTML 邮件。
可靠的强大的调试功能。
支持 SMTP 认证。
自定义邮件头。
支持 8bit、base64、binary 和 quoted-printable 编码。
从 github 上下载: https://github.com/PHPMailer/PHPMailer/
就这三个文件。
php开启socket和openssl扩展,这种错误到时候解决就行
到这一步,我们就可以把这个压缩包解压到我们的项目中了,对于php来讲,如果我们用了框架,比如think PHP, 那我们把他放到extend目录下,如下图:
think PHP
调用时用如下:
如果没用框架,那就放到公共的三方引用目录里面或直接就放到你当前php文件的同级目录下,没什么关系,引用路径写对就行,如下图:
调用时如下
到这一步相信大家都没什么问题,下面重点谈谈代码层面的问题:
发送之前需要拥有自己的邮件服务器,测试的时候其实用自己申请的免费邮箱最方便了,不需要自己再搭建服务器了,可能要配置邮箱的SMTP服务,大部分公共邮箱(163、qq等)为了安全默认是关闭的。
网易邮箱配置如下图:
QQ 邮箱相关配置如下图:
我们调试的时候一般都是用免费的邮件服务器,QQ或163, 用QQ 邮箱时,大家容易忽略一个问题,那就是QQ邮箱走465端口,ssl协议,所以我们如下配置:
注意一点, 密码为单独的授权码,不是你的邮箱密码,有人卡在这了,哈哈
如果用别的邮箱,可以走25端口,但这有一点特别坑,就是阿里云默认25端口是关的,所以没办法,要么不用25端口,要么就是向阿里云申请25端口,要么就是换服务器供应商,如IDC等等,
用25端口就不用ssl协议了,
具体代码就是这一条写不写的区别。
还有就是同时发送多人和多张附件的问题:
发送多人,处理参数,循环
发送附件,处理参数,循环
实在是没什么好说的,就是附件路径要直接指向你的二进制文件,相对路径和绝对路径都行,但不是网图链接或三方图片服务器链接,比如七牛云和阿里云oss,这种只能先下载到本地或服务器才行,注意个别下载授权问题,你懂的
到这一步差不多了,直接放代码:
/** * 发送邮件(重构/支持附件) */ //参数有接收邮箱,可单人,可多人, 字符串和数组都行,看你 //主题,这不用多说 //内容, 可html,自动识别 //附件,上面已经说过注意事项 //三方包里面不用做任何修改 public static function send_email($sendTo, $titleName, $content, $file_list = []) { $email = array( 'charset' => 'UTF-8', //字符编码 'host' => 'smtp.leju.com', //企业邮局域名 'port' => 25, //端口 'username' => '', //邮件发送人 'password' => '', //密码 ); require_once 'Phpmailer/phpmailer.php'; $mail = new PHPMailer(); //实例化 //附件 if (!empty($file_list)) { foreach ($file_list as $key => $value) { $mail->AddAttachment($value); // 添加附件 } } $titleName = $titleName; // 使用SMTP方式发送 $mail->IsSMTP(); // 设置邮件的字符编码 $mail->CharSet = $email['charset']; // 企业邮局域名 $mail->Host = $email['host']; $mail->Port = $email['port']; // 启用SMTP验证功能 $mail->SMTPAuth = true; //邮件发送人的用户名(请填写完整的email地址) $mail->Username = $email['username']; // 邮件发送人的 密码 (授权码) $mail->Password = $email['password']; //修改为自己的授权码 //邮件发送者email地址 $mail->From = $email['username']; //发送邮件人的标题 $mail->FromName = ''; //做一下处理, 可以多个收件人,也可以一个 //收件人地址,可以替换成任何想要接收邮件的email信箱,格式是AddAddress("收件人email","收件人姓名") if (!empty($sendTo)) { $sendTo = explode(",", $sendTo); foreach ($sendTo as $k => $v) { $mail->AddAddress($v, substr($v, 0, strpos($v, '@'))); } } //回复的地址 $mail->AddReplyTo($email['username'], ""); //set email format to HTML //是否使用HTML格式 $mail->IsHTML(true); //邮件标题 $mail->Subject = $titleName; //邮件内容 $mail->Body = $content; //附加信息,可以省略 $mail->AltBody = ''; if (!$mail->Send()) { $mail_return_arr['code'] = false; $str = "邮件发送失败. "; $str .= "错误原因: " . $mail->ErrorInfo; $mail_return_arr['info'] = $str; } else { $mail_return_arr['code'] = true; $str = "邮件发送成功"; $mail_return_arr['info'] = $str; } return $mail_return_arr; }
到这一步,大家可以自己进行测试了。
扫码二维码 获取免费视频学习资料
- 本文固定链接: http://phpxs.com/post/7385/
- 转载请注明:转载必须在正文中标注并保留原文链接
- 扫码: 扫上方二维码获取免费视频资料