php中如何使用smtp,PHP使用SMTP协议发送邮件
PHP开发者一般都是使用PHPMailer发送邮件,不知道你有没有看过它的源码呢?其实并不难,核心在于SMTP协议,下面我分享下如何不依赖PHPMailer来发送邮件。
我选择使用QQ邮箱的SMTP服务器,其他邮箱服务商比如网易、新浪都是可以的。
首先建立TCP连接:
$hostname = 'smtp.qq.com'; // 邮件服务器
$port = 465; // 服务器端口
$username = 'crazymus@foxmail.com'; // 你的邮箱账号
$password = '*************'; // 你的邮箱密码,QQ邮箱使用的不是密码,是授权码,登录邮箱设置
$sendTo = '291445576@qq.com'; // 收件人
$socket = fsockopen('ssl://' . $hostname, $port, $errno, $errmsg);
if (!$socket) throw new \RuntimeException('create socket failed', 1);
为什么要使用ssl连接?因为QQ邮箱提供了ssl加密的通道,我们和服务器之间的数据传输都将是加密的。你也可以不使用ssl连接,去掉ssh://前缀,使用端口25就行,但并不推荐这样。在如今复杂的互联网环境中,明文传输数据是非常危险的,很容易被他人截获敏感信息。
然后,我们按照SMTP协议准备好需要发送的命令。
$array = [
"HELO crazymus\r\n", // 打招呼
"auth login\r\n", // 请求认证
base64_encode($username) . "\r\n", // 用户名,需要base64编码
base64_encode($password) . "\r\n", // 密码,需要base64编码
"mail from:\r\n", // 发件人
"rcpt to:\r\n", // 收件人
"data\r\n", // 即将发送的是邮件内容
"subject:这是邮件标题\r\nfrom:$username\r\nto:$sendTo\r\n\r\n这是邮件内容\r\n.\r\n", // 邮件内容
];
每条命令都用换行符结束,windows下是\r\n,如果你使用Linux或者Mac,就换成\n和\r。需要注意的是最后一条命令,它是邮件的内容。邮件内容包含header和body两部分,用换行符隔开。如果你熟悉HTTP协议,就会发现这很容易理解。最后用\r\n.\r\n (两个换行符包裹的点号)来标识邮件结束。服务器收到这个标识后,就会开始发送邮件了。
接下来,我们依次向服务器发送上面的命令,并输出服务器返回值:
foreach ($array as $command) {
fwrite($socket, $command); // 发送命令
$resp = fgets($socket); // 获取一行响应内容
echo $resp;
}
flose($socket); // 关闭TCP连接
如果顺利的话,应该会依次输出下面的内容:
220 newxmesmtplogicsvrszc5.qq.com XMail Esmtp QQ Mail Server.
250-newxmesmtplogicsvrszc5.qq.com-100.77.8.93-115229658
250-SIZE 73400320
250 OK
334 VXNlcm5hbWU6
334 UGFzc3dvcmQ6
235 Authentication successful
250 OK.
250 OK
354 End data with ..
250 OK: queued as.
最后一行是250状态码,表示邮件发送完毕,我们可以根据它来判断邮件是否发送成功。下面列出SMTP协议常见的状态码:
501 参数格式错误
502 命令不可实现
503 错误的命令序列
504 命令参数不可实现
211 系统状态或系统帮助响应
214 帮助信息
220 <domain>服务就绪
221 <domain>服务关闭
421 <domain>服务未就绪,关闭传输信道
250 要求的邮件操作完成
251 用户非本地,将转发向<forward-path>
450 要求的邮件操作未完成,邮箱不可用
550 要求的邮件操作未完成,邮箱不可用
451 放弃要求的操作;处理过程中出错
551 用户非本地,请尝试<forward-path>
452 系统存储不足,要求的操作未执行
552 过量的存储分配,要求的操作未执行
553 邮箱名不可用,要求的操作未执行
354 开始邮件输入,以"."结束
554 操作失败
这样我们就用SMTP协议简单的实现了发送邮件。上面的例子只是发送了纯文本,其实HTML也是支持的,只要在邮件header中定义了正确的content-type,就可以发送HTML内容了,这里就不再深入讲解了,大家可以在自行查阅相关资料!
php中如何使用smtp,PHP使用SMTP协议发送邮件相关推荐
- c#中邮件收发处理(POP3,IMAP,SMTP)的实现方法
对于还没用动手写过程序的人来说,动手是必须的,只有自己动手写写程序才能在锻炼中不断提高,今天和大家一起探讨一个程序c#中邮件收发处理(POP3,IMAP,SMTP)的实现方法,程序有点长,希望大家坚持 ...
- outlook服务器信息查看器,允许最终用户在 Outlook Web App 中查看 POP3、IMAP4 和 SMTP 服务器设置...
允许最终用户在 Outlook Web App 中查看 POP3.IMAP4 和 SMTP 服务器设置 2021/6/1 本文内容 适用于:Exchange Server 2013 如果您有使用 PO ...
- Python 使用SMTP协议发送邮件
引言 问题基于<计算机网络自定向下>第二章的课后套接字编程作业:邮件客户 题目的下载链接:python 压缩包 题目如下: 这个实验结束时,您将能够更好地了解SMTP协议.您还将获得使用P ...
- 阿里云服务器用SMTP的25号端口发送邮件问题
这几天自己闲着没事就用阿里云服务器部署了一个项目,这个项目中包含了一个发送邮件到我的邮箱的功能出错了,这个功能在我的电脑上用本地服务器没有问题,但是部署到阿里云的Centos服务器上这个功能出了问题, ...
- qq stmp php_sockets.dll 端口,QQ邮箱开启SMTP服务与SMTP信息(密码、服务器、端口) - 老王博客...
无论是 WordPress 自动回复,还是写代码发送邮件,我们都需要用到 SMTP 服务,这时候我们就需要一个稳定靠谱的 SMTP 账号.老王一般喜欢使用 QQ 邮箱的 SMTP 服务,简单方便,反正 ...
- SMTP协议发送邮件
网上找了一个smtp邮箱的发送工具类,还行,用我自己的qq测试可以发送package com.exampleimport javax.mail.Address; import javax.mail.S ...
- Linux 平台使用smtp协议发送邮件
Linux平台使用smtp协议 发送邮件 前言 项目简介 项目开发环境 项目代码 测试结果以及存在问题 写在最后 前言 本人第一次写博客,主要目的是想记录一下自己的学习结果,本篇博客内容纯手打,参考资 ...
- E-mail概述 | 邮件发送协议SMTP与邮件读取协议POP3、IMAP
文章目录 电子邮件系统的组成 用户代理UA(User Agent) 邮件服务器 邮件发送协议 邮件读取协议 POP3 IMAP POP3与IMAP的对比 基于万维网的电子邮件 补充与思考 摘抄于文献 ...
- smtp协议源ip是服务器地址吗,Smtp协议发送邮件
Smtp协议发送邮件,是最全面的smtp协议发送邮件教程!有助于新手快速入门,从而跟好的进阶学习.本文档内容丰富,知识全面,简单易懂 Smtp协议发送邮件 MTP(Simple Mail Transf ...
- smtp发送服务器的协议,smtp协议总结
Smtp简介: 简易邮件传输通讯协议smtp是互联网上的一种通讯协议,主要功能是用在传送电子邮件,当我们通过电子邮件程序,寄e-mail给另外一个时,必须通过smtp通讯协议,将邮件送到对方的邮件服务 ...
最新文章
- Dev-C++安装和使用教程(手把手傻瓜式教学)
- 开源一个基于cocos2d-x的游戏--超级六边形(SuperSector)
- 物料主数据(SAP屠夫)
- 利用系统滴答时间计算实际程序运行时间
- BGP重分布进IGP-EIGRP
- gorm查询降序排列
- MAC使用终端DISKUTIL命令给U盘分区(解决window优盘只有200M)
- 光骓者的荣耀(洛谷P5638题题解,弃坑Java拥抱C++)
- JavaScript中语句与函数的执行辨析
- Redis集合 安装 哨兵集群 安全配置 redis持久化
- 服务器上安装声卡稳定吗,服务器加装声卡的故障
- 【开发神器】自动化测试、用 Apipost!
- 在html语言中读取txt文件中的内容,Javascript写入txt和读取txt文件示例详解
- pdf合并页面大小不一样
- 【查缺补漏 | JAVA 基础知识 | 粗略复习②】
- gwas snp 和_新的高密度玉米SNP芯片可用于基因组选择、GWAS和群体遗传学
- docker安装xware 实现迅雷远程下载
- SEO的道与术,因果关系的选择
- 计算机丢失client,FsPiscesClient.dll
- 题解 CF174A 【Problem About Equation】