QT 使用 SMTP 发送邮件 // POP3 收取邮件

目录

一、邮件服务器和电子邮箱

二、邮件传输协议

1、SMTP协议

2、POP3协议

三、电子邮件的发送和接收过程

四、SMTP 协议详解

1、SMTP 发信方法

2、SMTP 的 8 种命令

3、SMTP 发信流程

4、代码

五、POP3 协议详解

POP3 收信流程

六、全球各大邮箱 的 服务器信息


 

一、邮件服务器和电子邮箱

  要在Internet上提供电子邮件功能,必须有专门的电子邮件服务器。例如现在Internet很多提供邮件服务的厂商:sina、sohu、163等等他们都有自己的邮件服务器。

  这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中。

  电子邮箱(E-Mail地址)的获得需要在邮件服务器上进行申请,确切地说,电子邮箱其实就是用户在邮件服务器上申请的一个账户,用户在邮件服务器上申请了一个帐号后,邮件服务器就会为这个账号分配一定的空间,用户从而可以使用这个帐号以及空间发送电子邮件和保存别人发送过来的电子邮件。

二、邮件传输协议

1、SMTP协议

简单邮件传输协议 (Simple Mail Transfer Protocol, SMTP) 

  用户连接上邮件服务器之后,要想给它发送一封电子邮件,需要遵循一定的通讯规则,SMTP协议就是用来定义这种通讯规则的。因此,我们通常也把处理用户smtp请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器)。

2、POP3协议

“邮局协议版本3(Post Office Protocol - Version 3)

  同样,用户若想从邮件服务器管理的电子邮箱当中接收一封电子邮件话,它连上邮件服务器后,也要遵循一定的通讯格式,POP3协议就是用来定义这种通讯格式的。因此,我们通常也把处理用户pop3请求(邮件接收请求)的服务器称之为POP3服务器(邮件接收服务器)。

三、电子邮件的发送和接收过程

  通过一张图来说明一封邮件的发送和接收过程,如下图所示:

 

  简单说一下这个邮件收发过程:

  1、[email protected] 用户写好一封Email发送到sohu的Smtp服务器。对应于上图的步骤①

  2、sohu的Smtp服务器开始处理[email protected] 用户的请求,它会根据收件人的地址判断,当前收件人是不是自己管辖的用户,如果是,就直接将Email存放到为该收件人的分配的邮箱空间当中。sohu的Smtp服务器判断收件人地址发现,这一封Email的收件人[email protected] 是Sina的邮件服务器管理的,于是又将Email转发给Sina的Smtp服务器。对应于上图的步骤②

  3、Sina的Smtp服务器开始处理sohu的Smtp服务器发送过来的Email,Sina的Smtp服务器根据收件人的地址判断,发现收件人自己管辖的用户,于是就直接将Email存放到为[email protected] 用户的分配的邮箱空间当中。对应于上图的步骤③。

  4、[email protected] 用户将邮件发出去之后,就通知[email protected] 用户去收取。[email protected] 用户于是就连接上Sina的POP3服务器收取邮件,对应于上图的步骤④。

  5、POP3服务器从[email protected] 用户的邮箱空间当中取出Email,对应于步骤⑤。

  6、POP3服务器将取出来的Email发给[email protected] 用户,对应于步骤⑥。

四、SMTP 协议详解

1、SMTP 发信方法

SMTP 协议是一个简单的邮件传输协议,利用它您可以将邮件发送给别人。此协议使用命令和应答在客户端与服务器之间传输报文。即客户端发出一个命令,服务器返回一个应答。发送方与接收方进行一问一答的交互,由发送方控制这个对话。

使用 SMTP 协议的邮件服务器分为两种:

  • 一种为邮件发送服务器,通常叫做 smtpd,需要发件人进行认证。
  • 一种为邮件接收服务器,通常叫做 mx,接收外部运营商用户投递给本地用户的邮件。

     

2、SMTP 的 8 种命令

H E L O M A I L R C P TD ATA Q U I T 命令用于发送邮件:

        我们键入m a i l启动用户代理,然后键入主题(s u b j e c t)的提示;键入后,再键入报文的正文。在一行上键入一个句点结束报文,用户代理把邮件传给 M TA,由M TA进行交付。客户主动打开 T C P端口2 5。返回时,客户等待从服务器来的问候报文(应答代码为 2 2 0)。该服务器的应答必须以服务器的完全合格的域名开始。下一步客户用 H E L O命令标识自己。参数必须是完全合格的的客户主机名。M A I L命令标识出报文的发起人。下一个命令, R C P T,标识接收方。如果有多个接收方,可以发多个R C P T命令。邮件报文的内容由客户通过 D ATA命令发送。报文的末尾由客户指定,是只有一个句点的一行。最后的命令Q U I T,结束邮件的交换。

      R S E T 命令异常中止当前的邮件事务并使两端复位。丢掉所有有关发送方、接收方或邮件的存储信息。

      V R F Y 命令使客户能够询问发送方以验证接收方地址,而无需向接收方发送邮件。
      N O O P 命令除了强迫服务器响应一个 O K应答码(2 0 0)外,不做任何事情。
      T U R N 命令使客户和服务器交换角色,无需拆除 T C P连接并建立新的连接就能以相反方向发送邮件。

 

3、SMTP 发信流程

通过 SMTP 协议发送邮件的整体过程如下:

1、客户端 连接到 SMTP 服务器,建立会话。

    clientsocket = new QTcpSocket();
    clientsocket->
connectToHost("smtp.126.com", 25, QTcpSocket::ReadWrite);

2、客户端发送一个 HELO 或 EHLO 命令。

    【使用 helo 和连接上的 smtp 服务器打声招呼】

3、客户端发送一个 AUTH 认证命令 及 进行 用户登录(使用 smtpd 方式)。

      A> 使用 "auth login" 命令登录到 Smtp 服务器

      B> 传入 用户名 和 密码 ,必须经过 Base64 加密

4、客户端发送一个 MAIL 命令指定发件人

      mail from:<[email protected]>

5、客户端发送一个 RCPT 命令指定收件人

      rcpt to:<[email protected]>

6、客户端发送一个 DATA 命令,然后输入 邮件正文。

     A> 输入"data"命令 

     data  

     B> 邮件内容格式:

     from:<[email protected]> ----邮件头

     to:<[email protected]> ----邮件头

     subject:hello ----邮件头

     -----空行

     hello gacl ----邮件的具体内容

     C> 邮件附件

     从上述的 [subject:hello ----邮件头] 往下开始替换:

     MIME-Version: 1.0

     Content-Type: multipart/mixed;boundary=@boundary@ ----见下【注1】

     -----空行

     --@boundary@\r\nContent-Type: text/plain;charset="gb2312"

     -----空行

     hello gacl ----邮件的具体内容

     --@boundary@

     Content-Type: application/octet-stream;

     name="文件名称"<

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值