php下如何简单快捷的实现邮件发送
citgpt 2024-09-26 11:29 6 浏览 0 评论
对于程序员来说,项目中邮件发送是常用的一个功能, 我在这不讲源码,只讲如何能快速地实现.
phpMailer 是一个非常强大的 php发送邮件类,可以设定发送邮件地址、回复地址、邮件主题、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 安装或者下载方式:
从 github 上下载: https://github.com/PHPMailer/PHPMailer/
大家实在下载不来的可以直接找我要,没关系的
php开启socket和openssl扩展,这种错误到时候解决就行
到这一步,我们就可以把这个压缩包解压到我们的项目中了,对于php来讲,如果我们用了框架,比如think PHP, 那我们把他放到extend目录下,如下图:
调用时用如下:
如果没用框架,那就放到公共的三方引用目录里面或直接就放到你当前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;
}
到这一步,大家可以自己进行测试了,有问题可以留言,一般常见的问题我都可以为大家解答,或发我邮箱lnmp171@163.com
- 上一篇:PHP代码优化简谈
- 下一篇:PHP面试都会问的经典问题,你也一定都听过
相关推荐
- js中arguments详解
-
一、简介了解arguments这个对象之前先来认识一下javascript的一些功能:其实Javascript并没有重载函数的功能,但是Arguments对象能够模拟重载。Javascrip中每个函数...
- firewall-cmd 常用命令
-
目录firewalldzone说明firewallzone内容说明firewall-cmd常用参数firewall-cmd常用命令常用命令 回到顶部firewalldzone...
- epel-release 是什么
-
EPEL-release(ExtraPackagesforEnterpriseLinux)是一个软件仓库,它为企业级Linux发行版(如CentOS、RHEL等)提供额外的软件包。以下是关于E...
- FullGC详解 什么是 JVM 的 GC
-
前言:背景:一、什么是JVM的GC?JVM(JavaVirtualMachine)。JVM是Java程序的虚拟机,是一种实现Java语言的解...
-
2024-10-26 08:50 citgpt
- 跨域(CrossOrigin)
-
1.介绍 1)跨域问题:跨域问题是在网络中,当一个网络的运行脚本(通常时JavaScript)试图访问另一个网络的资源时,如果这两个网络的端口、协议和域名不一致时就会出现跨域问题。 通俗讲...
- 微服务架构和分布式架构的区别
-
1、含义不同微服务架构:微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制(通常用HTTP资源API)。这些服务围绕业务能力构建并...
- 深入理解与应用CSS clip-path 属性
-
clip-pathclip-path是什么clip-path 是一个CSS属性,允许开发者创建一个剪切区域,从而决定元素的哪些部分可见,哪些部分会被隐...
-
2024-10-25 11:51 citgpt
- Request.ServerVariables 大全
-
Request.ServerVariables("Url")返回服务器地址Request.ServerVariables("Path_Info")客户端提供的路...
- python操作Kafka
-
目录一、python操作kafka1.python使用kafka生产者2.python使用kafka消费者3.使用docker中的kafka二、python操作kafka细...
- Runtime.getRuntime().exec详解
-
Runtime.getRuntime().exec详解概述Runtime.getRuntime().exec用于调用外部可执行程序或系统命令,并重定向外部程序的标准输入、标准输出和标准错误到缓冲池。...
- promise.all详解 promise.all是干什么的
-
promise.all详解promise.all中所有的请求成功了,走.then(),在.then()中能得到一个数组,数组中是每个请求resolve抛出的结果...
-
2024-10-24 16:21 citgpt
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracleclient (56)
- springbatch (59)
- oracle恢复数据 (56)
- 简单工厂模式 (68)
- 函数指针 (72)
- fill_parent (135)
- java配置环境变量 (140)
- linux文件系统 (56)
- 计算机操作系统教程 (60)
- 静态ip (63)
- notifyicon (55)
- 线程同步 (58)
- xcode 4 5 (60)
- 调试器 (60)
- c0000005 (63)
- html代码大全 (61)
- header utf 8 (61)
- 多线程多进程 (65)
- require_once (60)
- 百度网盘下载速度慢破解方法 (72)
- 谷歌浏览器免费入口 (72)
- npm list (64)
- 网站打开速度检测 (59)
- 网站建设流程图 (58)
- this关键字 (67)