网络协议分析(5):电子邮件相关协议

电子邮件相关协议

电子邮件协议有SMTP、POP3、IMAP4,它们都隶属于TCP/IP协议簇,默认状态下,分别通过TCP端口25、110和143建立连接



前言

Internet电子邮件系统是基于客户机/服务器方式,客户端也叫用户代理(User Agent),提供用户界面,负载邮件发送的准备工作,如邮件的起草、编辑以及向服务器发送邮件或从服务器取邮件等。服务器端也叫传输代理(Message Transfer Agent),负责邮件的传输,它采用端到端的传输的传输方式,源端主机参与邮件传输的全过程。


一、SMTP协议

SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)是Internet上基于TCP/IP的应用层协议,使用于主机与主机之间的电子邮件交换。SMTP的特点是简单,它只定义了邮件发送方和接收方之间的连接传输,将电子邮件有一台计算机传送到另一台计算机,而不规定其他任何操作

#!/usr/bin/python3
import smtplib
from smtplib import SMTP
from email.mime.image import MIMEImage
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import time
host = 'smtp.qq.com' #邮箱的接口
port = '465' #端口
pwd = 'xxxxxxxx' #授权码
sender = 'xxxxxxxx@qq.com' #发送方
receiver = "xxxxxx@qq.com" #接收方
 
def SetMsg():
    '''
    设置邮件格式    
    '''
    msg = MIMEMultipart('mixed')
    #标题
    msg['Subject'] = '爱你的我'
    msg['From'] = sender
    msg['To'] = receiver
    #邮件正文内容
    text = '快看我美丽的容颜'
    text_plain = MIMEText(text,'plain','utf-8') #正文转码
    msg.attach(text_plain)
    return msg.as_string()
 
def SendEmail(msg):
    '''
    发送邮件
    :msg :邮件内容
    :return
    '''
    try:
        smtp = smtplib.SMTP_SSL(host,port) #创建一个邮件服务
        smtp.login(sender,pwd)
        smtp.sendmail(sender,receiver,msg)
        time.sleep(3)
        smtp.quit() #退出邮件服务
    except smtplib.SMTPException as e:
        print("出错啦")
 
if __name__ == '__main__':
    # 2. 设置邮件格式
    msg = SetMsg()
    # 3. 发送邮件
    SendEmail(msg)

python的smtplib库和email库提供了很多有用的接口函数,也有许多合适的第三方包,可以实现正常用邮箱能做到的绝大部分功能,最关键是可以通过编写定时脚本来实现自动化功能

想学习golang版本的同学可以看一下这篇文章,强烈推荐!

强烈推荐

二、POP协议

POP邮局协议负责从邮件服务器中检索电子邮件。
它要求邮件服务器完成下面几种任务之一:

  • 从邮件服务器中检索邮件并从服务器中删除这个邮件;
  • 从邮件服务器中检索邮件但不删除它;
  • 不检索邮件,只是询问是否有新邮件到达。

POP协议支持多用户互联网邮件扩展,后者允许用户在电子邮件上附带二进制文件,如文字处理文件和电子表格文件等,实际上这样就可以传输任何格式的文件了,包括图片和声音文件等。

在用户阅读邮件时,POP命令所有的邮件信息立即下载到用户的计算机上,不在服务器上保留。

POP3(Post Office Protocol 3)即邮局协议的第3个版本,是因特网电子邮件的第一个离线协议标准。

代码如下(示例):

import poplib

emailServer = poplib.POP3('xxx.xxx.xxx.xxx')
emailServer.user('xxx@qq.com')
emailServer.pass_('xxxxxxx')

# 获取一些统计信息
emailMsgNum, emailSize = emailServer.stat()
print('email number is %d and size is %d'%(emailMsgNum, emailSize))

# 遍历邮件,并打印出每封邮件的标题
for i in range(emailMsgNum):
    for piece in emailServer.retr(i+1)[1]:
        if piece.startswith('Subject'):
            print('\t' + piece)
            break

emailServer.quit()

我浅显的认为模拟pop3协议的难度不在于连接并获取信息,python和golang都给出了很多可用的模块包,但是如果邮件里含有附件,拿到的数据信息需要解析,这一步工作应该比较难,鉴于只是初步学习一下pop3协议,所以没去深入研究

总结

提示:希望友友们多多转发

本文只是初步介绍了电子邮件相关的SMTP和POP协议,但是实际上电子邮件相关协议还有IMAP、MIME等,只是对于学生而言不太常见

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值