邮件发送

smtp协议发送邮件

  1. SMTP是简单邮件传输协议(Simple Mail Transfer Protocol)的缩写。
  2. ESMTP (Extended SMTP),是扩展 SMTP 就是对标准 SMTP 协议进行的扩展。
    它与 SMTP 服务的区别仅仅是,使用 SMTP 发信不需要验证用户帐户,而用 ESMTP 发信时,服务器会要求用户提供用户名和密码以便验证身份。在所有的验证机制中,信息全部采用Base64编码。验证之后的邮件发送过程与 SMTP 方式没有两样。

OSI模型 & SMTP

根据OSI7层或者5层的模型不同,各层常见的协议信息如下:
邮件发送_第1张图片
其实协议众多,这里借用一张来源与网络的整理结果用于展示OSI7层模型的常见协议的信息,包括应用层的SMTP/POP3/IMAP4
邮件发送_第2张图片

SMTP vs POP3 & IMAP4

SMTP和POP3以及IMAP都是用来做什么的,简单的来说,smtp主要负责发,pop3和imap主要负责收。
一封邮件的发&收的流程是通过SMTP进行发送,使用POP3或者IMAP4进行接收的。
邮件发送_第3张图片
邮件发送_第4张图片
邮件发送_第5张图片

测试

邮件发送_第6张图片

接收

邮件发送_第7张图片

操作说明

输入AUTH LOGIN之后需要输入用户名和密码进行登录,登录时注意如下事项:

  • 登录名称为@之前的内容的base64编码,比如[email protected]为2839247368的base64编码

参考文档:协议基础:SMTP:使用Telnet学习SMTP协议

mail函数发送邮件

mail函数不支持esmtp协议,发送邮件时不需要用户名和密码。

发送邮件步骤:

  1. 打开php.ini
    配置SMTP和sendmail_from两项;
    邮件发送_第8张图片
  2. php代码:var_dump(mail(‘[email protected]’,‘this is subject’,‘hie’));
  3. 检查结果:
    邮件发送_第9张图片

PHPMailer发送邮件

PHPMailer下载地址:PHPMailer

支持php7

代码


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 = '[email protected]';
    $mail->Password = 'br*****ypxnsddjd';

    $mail->setFrom('[email protected]', '寄件人姓名');
    $mail->addAddress('[email protected]', '收件人姓名');

    $mail->Subject = 'this is subject';
    $mail->Body = 'this is body';

    $mail->send();
    echo 'ok';

} catch (Exception $e) {
    echo '发生错误' . $mail->ErrorInfo;
}

测试结果

邮件发送_第10张图片
邮件发送_第11张图片
参考: https://www.jianshu.com/p/d103cabb9d68

POP3协议收取邮件

默认端口110

常用命令

邮件发送_第12张图片

注意事项

  1. SMTP命令不区分大小写,但参数区分大小写
  2. user pass命令采用明文传输
  3. uidl 根据邮件的序号查询该邮件的唯一标志符
  4. stat把邮件从旧到新依次从1-n编号

你可能感兴趣的:(PHP燕十八笔记)