首页

PHP-SMTP收发邮件

kkcode
2024-01-22  阅读 121

1 Smtp介绍

SMTP(Simple Mail Transfer Protocol):即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。

SMTP协议属于TCP/IP协议族,它帮助每台计算机在发送或中转信件时找到下一个目的地。

通过SMTP协议所指定的服务器,就可以把Email寄到收信人的服务器上了,整个过程只要几分钟。SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转发出的电子邮件。

2 Smtp协议测试

思考:我要手动给php0620@163.com发信??
步骤1:你要首先找到这个email存储邮件的准确的服务器?--你到底在哪儿?
步骤2:连接该服务器,用smtp协议与之对话!

用nslookup来查询某个域的邮件服务器地址 如:nslookup -q=mx 163.com

file

telnet 163mx02.mxmail.netease.com 25 连接163的邮件服务器,25是端口号 file

如果以smp.163.com来中继邮件(通过163发到QQ邮箱)而不是直投,怎么办+?

用esmtp协议,extention,扩展的smtp协议

这个服务不能匿名发必须经过权限验证.在Helo命令后面增加权限验证过程.

客户端:Auth login 声明用账号密码登陆
服务端:334
客户端:用户名(注意:用户名应是base64加密后的结果)
服务端:334
客户端:密码(注意密码应是base64加密后的结果,php中base64_encode()方法)
服务端:235 [此时,权限验证通过]复制代码

file 下接mail from命令,见上。

3 Mail函数发送邮件

用PHP来发送邮件,PHP有mail函数,是一个包装好的smtp发送过程。 我们可以直接调用该函数,往某个固定的smtp服务器上发送邮件。

在win下,利用PHP的mail函数来发送邮件。
mail函数的作用: 是连接到邮件服务器,利用smtp协议,与该服务器交互并投邮件

注意:

1:mail函数不支持esmtp协议,即,只能直投,不能登陆
2:由上条,我们只能直投至最终的收件服务器地址.
而该地址,又是在PHP.ini中指定的。复制代码

问: 调用mail 函数,PHP会发邮件发送到哪个邮件服务器地址呢?
答: 在PHP.ini里可以配置
file

Mail 函数连接php.ini中的smtp服务器,并根据smtp协议和该服务器进行通讯按参数来发送邮件.

请注意: mail函数不可能把邮件地址的mx记录解析出来找到服务器地址并发送. 因此,需要我们在php.ini里把smtp服务器配置好才能往163发送

请思考再往qq.com发邮件怎么办?
答: 修改php.ini的smtp服务器的mx地址

但是,每往一个新的域名上发邮件,都要查询并修改php.ini不现实.

如何直接调用mail函数,不反复修改php.ini?
答始终把信发给某一台stmp服务器让他中继。 比如发给smtp.163.com

4 Smtp服务器安装

收费,不推荐使用

5 PHPMailer发送复杂邮件

file

file

6 POP3协议收取密码

1:pop3协议默认的端口是110

2:作用是收取邮件

3:常用命令:

user 用户名
pass 密码
stat 统计
top 邮件号 行号,查看邮件头。
retr 邮件号 行号查看主题
dele邮件号加上删除标记
rset 邮件号取消删除标记
quit 退出复制代码

4:测试

telnet pop3.163.com 110
# 命令注意事项
# 使用ctrl+] 打开回显功能
user,pass 明文传输
stat 返回邮件数量及所占总空间
邮件从旧到新从1.2…递增编号
top 1 5,则是指取第1封(最旧的)邮件的前邮件头信息的前5行
retr 2 6.则是取第2封邮件的主体内容的前5行
top/retr 收到的数据可能是base64编码后的,因此如果是,注意解码复制代码

7、找回密码功能实战

开发场景:
1:激活邮件
注册后,该账户处于非激活阶段,同时,往该账户的注册邮件,发送email给一个链接点击该链接,完成注册

2:找密码功能

3:有的网站,用这种方式来激活---—-让你用注册邮箱给指定的邮箱发信.

如土豆,让你用注册邮箱,往xxx@tudou.com发一封邮件,几分钟后就会把你的账号激活.
好处--有许多激活邮件,被打到垃圾箱,而用户又不知道查垃圾箱.
用这种办法,可以避免垃圾箱的问题.

本文为作者原创文章,转载无需和我联系,但请注明转载链接。 【前端黑猫】