当然可以使用第三方发送邮件服务,本文主要介绍使用语言自身功能(socket) 结合 smtp协议 实现的方法。

比较好用的封装好的发送邮件的类库 就是 PHPMailer 了!

PHPMailer 项目地址: https://github.com/PHPMailer/PHPMailer/releases

PHPMailer的介绍:

1. 发送时可指定多个收件人

2. 支持带附件的邮件

3. 支持注定一邮件头信息,支持将邮件制作成HTML内容,那么就可以在邮件正文中插入图

4. 兼容的SMTP服务器 包括 : Sendmail, qmail, Postfix, Imail, Exchange 等。

步骤一: 我们使用自己的qq邮箱账号,作为程序的发送方。默认情况qq不让你使用第三方工具发送邮件的,所以需要设置下:

打开网页版qq邮箱---》邮箱设置----》 账户-----》找到如下图位置,开启相应授权

步骤二: PHPMailer 需要php的socket支持,和openssl扩展支持,查看下确保扩展功能开启

步骤三:编写发送邮件代码

<?php
require_once("./src/PHPMailer.php");
require_once("./src/SMTP.php");use PHPMailer\PHPMailer;/*发送邮件方法*@param $to:接收者 $title:标题 $content:邮件内容*@return bool true:发送成功 false:发送失败*/function sendMail($to,$title,$content){//实例化PHPMailer核心类$mail = new PHPMailer\PHPMailer();//是否启用smtp的debug进行调试 开发环境建议开启 生产环境注释掉即可 默认关闭debug调试模式$mail->SMTPDebug = 1;//使用smtp鉴权方式发送邮件$mail->isSMTP();//smtp需要鉴权 这个必须是true$mail->SMTPAuth=true;//链接qq域名邮箱的服务器地址$mail->Host = 'smtp.qq.com';//设置使用ssl加密方式登录鉴权$mail->SMTPSecure = 'ssl';//设置ssl连接smtp服务器的远程服务器端口号,以前的默认是25,但是现在新的好像已经不可用了 可选465或587$mail->Port = 465;//设置smtp的helo消息头 这个可有可无 内容任意// $mail->Helo = 'Hello smtp.qq.com Server';//设置发件人的主机域 可有可无 默认为localhost 内容任意,建议使用你的域名$mail->Hostname = 'http://zhaozhXXXxg.cn';//设置发送的邮件的编码 可选GB2312  据说utf8在某些客户端收信下会乱码$mail->CharSet = 'UTF-8';//设置发件人姓名(昵称) 任意内容,显示在收件人邮件的发件人邮箱地址前的发件人姓名$mail->FromName = 'Liang';//smtp登录的账号 这里填入字符串格式的qq号即可$mail->Username ='390382xxx@qq.com';//smtp登录的密码 使用生成的授权码$mail->Password = 'pgwhjrzdupexxxx';//设置发件人邮箱地址 这里填入上述提到的“发件人邮箱”$mail->From = '390382xxx@qq.com';//邮件正文是否为html编码 注意此处是一个方法 不再是属性 true或false$mail->isHTML(true); //设置收件人邮箱地址 该方法有两个参数 第一个参数为收件人邮箱地址 第二参数为给该地址设置的昵称 不同的邮箱系统会自动进行处理变动 这里第二个参数的意义不大$mail->addAddress($to,'标题啦');//添加多个收件人 则多次调用方法即可// $mail->addAddress('xxx@163.com','l通知');//添加该邮件的主题$mail->Subject = $title;//添加邮件正文 上方将isHTML设置成了true,则可以是完整的html字符串 如:使用file_get_contents函数读取本地的html文件$mail->Body = $content;//为该邮件添加附件 该方法也有两个参数 第一个参数为附件存放的目录(相对目录、或绝对目录均可) 第二参数为在邮件附件中该附件的名称// $mail->addAttachment('./55.jpg','head.jpg');//同样该方法可以多次调用 上传多个附件// $mail->addAttachment('./Juery-1.1.0.js','jquery.js');$status = $mail->send();//简单的判断与提示信息if($status) {return true;}else{return false;}
}$flag = sendMail('114362xxx@qq.com','标题呀','这是内容哦');
if($flag){echo "成功!";
}else{echo "发送失败!";
}

运行就可以发送成功了,可能还觉得封装的类库特别的神奇!不知道干了什么,可以用telnet走一遍邮件协议的发送流程,这样更加清晰看到发送邮件的协议内容 和过程,如下图:

telnet smtp.qq.com 587

注意 用户名 base64_encode(是不带@qq.com)  ,密码是 base64_encode(授权码); 发送结果如下图:

PHP怎么发送邮件?相关推荐

  1. Lumen / Laravel 使用网易邮箱 SMTP 发送邮件

    Laravel 是目前最流行的PHP框架,而Lumen 是 Laravel 的精简版,主要用于接口开发. Laravel 邮件发送服务基于 Symfony 组件 Swift Mailer. 本文记录了 ...

  2. iphone smtp服务器没有响应,电子邮件卡在iPhone或iPad上的发件箱?如何修复iOS中的未发送邮件 | MOS86...

    您曾经在iOS中发送电子邮件,只能将信息卡在iPhone,iPad或iPod touch的邮件应用发件箱中?你知道这是什么时候发生的,因为在iOS的Mail应用程序的底部,状态栏在iOS中显示1个未发 ...

  3. php引入PHPMailer发送邮件

    昨天做了一个发送邮件的功能,如果直接用mail()函数,需要拥有自己的邮件服务器,所有引入PHPMailer类方便快捷,简单写一下开发步骤: 一.拥有自己的邮箱账号(作为发件人邮箱) 分两种情况: 1 ...

  4. php sendmail方法,PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法

    本文实例讲述了PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法.分享给大家供大家参考,具体如下: 1.php mail()函数在windows不能用,需要安装sen ...

  5. python拆分excel的sheet为单文件_python拆分Excel表格并发送邮件

    工作中经常会出现需要将数据按一定的条件拆分并分发给不同的收件人的情况,今天就来给大家分享一下如何使用python拆分Excel表格并分发邮件. 以下表(2019年下半年销量数据表)数据为例: 首先我们 ...

  6. oracle发送邮件附件,oracle发送邮件存储过程:

    oracle发送邮件存储过程: create or replace procedure bsd_sendemail( p_receiver varchar2, p_sub varchar2, p_tx ...

  7. 【实用主义】如何用nodejs自动定时发送邮件提醒?

    需要先安装插件 npm install Nodemailer --save index.js global.SG = {nodemailer: require("nodemailer&quo ...

  8. PHPMailer类 发送邮件

    /*** [sendMail 邮件发送类]* @param [string] $address [收件人的邮件地址]* @param [string] $nickname [收件人的昵称]* @par ...

  9. 在vs2005中使用Jmail发送邮件问题

    jmail.Message Jmail = new jmail.Message(); DateTime t = DateTime.Now;             String Subject = & ...

  10. C#使用CDO发送邮件

    可以引用的COM组件列表,发现里面有一个名为Microsoft CDO For Exchange 2000 Library的COM组件,就是这个,我们可以用它来连接SMTP Server,使用用户名/ ...

最新文章

  1. javascript中变量
  2. 网络协议档案之ICMP、Ping、Traceroute
  3. springboot实现简单的文件上传与回显
  4. CDH HUE集成MySQL
  5. boost::with_lock_guard相关的测试程序
  6. 【转】Spring Bean单例与线程安全
  7. 微软 Excel 365 里如何设置下拉菜单和自动高亮成指定颜色
  8. 写一个易于维护使用方便性能可靠的Hybrid框架(一)—— 思路构建
  9. pythonpip使用方法_Python: pip常见的使用方法
  10. ARMLINUX学习笔记(4)---ARM 体系结构
  11. c#里面的combobox在代码中怎么根据它的text获取它的index?
  12. 操作系统银行家算法(课程设计报告)JAVA实现
  13. 高等数学学习笔记——第十讲——子数列与聚点原理(1. 数列收敛的归并性)
  14. 网易云爬虫系列 - 批量下载专辑图片
  15. matlab时频工具箱简介,matlab时频分析工具箱下载_matlab时频分析工具箱官方下载-太平洋下载中心...
  16. 计算机硬盘容量减少修复,硬盘坏了数据可以恢复吗?教你硬盘数据恢复技巧
  17. 自行车小组问卷调查报告
  18. serialize()方法
  19. 2021-06-15记录端午假期学习微信小程序 计算器
  20. C#销毁资源,释放内存,GC垃圾回收

热门文章

  1. 超图导入ArcGIS数据文件
  2. SQLserver服务器修复,sqlserver数据库修复工具大师官方版
  3. 课时23 YUM软件管理
  4. 用链接法实现散列表构造和查找
  5. vulnhub-2much
  6. Java日期 SimpleDateFormat,Calander使用
  7. 转载:80端口、443端口、8080端口、8000端口的区别
  8. 路由汇总带来的三层环路-解决实验
  9. 芯片设计中的时钟与约束
  10. mktime()函数使用