page contents

php简单快捷的实现邮件发送

以下内容希望帮助到大家!

attachments-2020-06-a2fBAB4d5ed5a5989efde.png

对于程序员来说,项目中邮件发送是常用的一个功能, 我在这不讲源码,只讲如何能快速地实现。

phpMailer 是一个非常强大的 php发送邮件类,可以设定发送邮件地址、回复地址、邮件主题、html网页,上传附件,并且使用起来非常方便。


phpMailer 的特点:

在邮件中包含多个 TO、CC、BCC 和 REPLY-TO。

平台应用广泛,支持的 SMTP 服务器包括 Sendmail、qmail、Postfix、Gmail、Imail、Exchange 等等。

支持嵌入图像,附件,HTML 邮件。

可靠的强大的调试功能。

支持 SMTP 认证。

自定义邮件头。

支持 8bit、base64、binary 和 quoted-printable 编码。


phpmailer 安装或者下载方式:

从 github 上下载: https://github.com/PHPMailer/PHPMailer/

v2-8561ed66fc85072e4abefbc79fa3e523_720w.jpg

就这三个文件。


php开启socket和openssl扩展,这种错误到时候解决就行

到这一步,我们就可以把这个压缩包解压到我们的项目中了,对于php来讲,如果我们用了框架,比如think PHP, 那我们把他放到extend目录下,如下图:

v2-0badfe5ff61bbd17394d01e69bc47899_720w.jpg


think PHP

调用时用如下:

v2-1e9d95b8e45e1d620a5fbf758b94c0ac_720w.jpg


如果没用框架,那就放到公共的三方引用目录里面或直接就放到你当前php文件的同级目录下,没什么关系,引用路径写对就行,如下图:

v2-0e44f86ac9fa44841c0581af35bdfbd3_720w.jpg


调用时如下

v2-9ef1c2d08939a987a5039323c56b6a54_720w.jpg


到这一步相信大家都没什么问题,下面重点谈谈代码层面的问题:

发送之前需要拥有自己的邮件服务器,测试的时候其实用自己申请的免费邮箱最方便了,不需要自己再搭建服务器了,可能要配置邮箱的SMTP服务,大部分公共邮箱(163、qq等)为了安全默认是关闭的。


网易邮箱配置如下图:

v2-1ba124fdb26bf84f35bbec731ba5e77d_720w.jpg


QQ 邮箱相关配置如下图:

v2-e7ab75c40cf3085a419401dcda8f7217_720w.jpg


我们调试的时候一般都是用免费的邮件服务器,QQ或163, 用QQ 邮箱时,大家容易忽略一个问题,那就是QQ邮箱走465端口,ssl协议,所以我们如下配置:

v2-0c5995f2ea179229ea4d026039d25eed_720w.jpg

注意一点, 密码为单独的授权码,不是你的邮箱密码,有人卡在这了,哈哈


如果用别的邮箱,可以走25端口,但这有一点特别坑,就是阿里云默认25端口是关的,所以没办法,要么不用25端口,要么就是向阿里云申请25端口,要么就是换服务器供应商,如IDC等等,

v2-ceea0ecd5b4f9e657d26ffb9d4a6e3ce_720w.jpg


用25端口就不用ssl协议了,

v2-1cfb39aadf5f0fe6b10b916098afdf61_720w.jpg

具体代码就是这一条写不写的区别。


还有就是同时发送多人和多张附件的问题:

v2-1e9cc972256d0f36355a4da7e40caf57_720w.jpg


发送多人,处理参数,循环

v2-15d3a023acac71af54da6c8c47e571fd_720w.jpg

发送附件,处理参数,循环


实在是没什么好说的,就是附件路径要直接指向你的二进制文件,相对路径和绝对路径都行,但不是网图链接或三方图片服务器链接,比如七牛云和阿里云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;

}

到这一步,大家可以自己进行测试了。


attachments-2020-06-f0nTNNi65ed5a589d59a8.jpg

  • 发表于 2020-06-02 09:04
  • 阅读 ( 394 )
  • 分类:PHP开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
Pack
Pack

1135 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1316 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章