smtp协议发送邮件
- SMTP是简单邮件传输协议(Simple Mail Transfer Protocol)的缩写。
- ESMTP (Extended SMTP),是扩展 SMTP 就是对标准 SMTP 协议进行的扩展。
它与 SMTP 服务的区别仅仅是,使用 SMTP 发信不需要验证用户帐户,而用 ESMTP 发信时,服务器会要求用户提供用户名和密码以便验证身份。在所有的验证机制中,信息全部采用Base64编码。验证之后的邮件发送过程与 SMTP 方式没有两样。
OSI模型 & SMTP
根据OSI7层或者5层的模型不同,各层常见的协议信息如下:
其实协议众多,这里借用一张来源与网络的整理结果用于展示OSI7层模型的常见协议的信息,包括应用层的SMTP/POP3/IMAP4
SMTP vs POP3 & IMAP4
SMTP和POP3以及IMAP都是用来做什么的,简单的来说,smtp主要负责发,pop3和imap主要负责收。
一封邮件的发&收的流程是通过SMTP进行发送,使用POP3或者IMAP4进行接收的。
测试
接收
操作说明
输入AUTH LOGIN之后需要输入用户名和密码进行登录,登录时注意如下事项:
- 登录名称为@之前的内容的base64编码,比如2839247368@qq.com为2839247368的base64编码
参考文档:协议基础:SMTP:使用Telnet学习SMTP协议
mail函数发送邮件
mail函数不支持esmtp协议,发送邮件时不需要用户名和密码。
发送邮件步骤:
- 打开php.ini
配置SMTP和sendmail_from两项;
- php代码:var_dump(mail(‘karagrade@163.com’,‘this is subject’,‘hie’));
- 检查结果:
PHPMailer发送邮件
PHPMailer下载地址:PHPMailer
支持php7
代码
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require './src/PHPMailer.php';
require './src/SMTP.php';
require './src/Exception.php';
//require 'vendor/autoload.php';
$mail = new PHPMailer(true);
try {
$mail->SMTPDebug = 2;
$mail->isSMTP();
$mail->Host = 'smtp.qq.com';
$mail->SMTPAuth = true;
$mail->Username = '2839247368@qq.com';
$mail->Password = 'br*****ypxnsddjd';
$mail->setFrom('2839247368@qq.com', '寄件人姓名');
$mail->addAddress('2839247368@qq.com', '收件人姓名');
$mail->Subject = 'this is subject';
$mail->Body = 'this is body';
$mail->send();
echo 'ok';
} catch (Exception $e) {
echo '发生错误' . $mail->ErrorInfo;
}
测试结果
参考: https://www.jianshu.com/p/d103cabb9d68
POP3协议收取邮件
默认端口110
常用命令
注意事项
- SMTP命令不区分大小写,但参数区分大小写
- user pass命令采用明文传输
- uidl 根据邮件的序号查询该邮件的唯一标志符
- stat把邮件从旧到新依次从1-n编号