美文网首页
理解邮件推拉SMTP&POP3

理解邮件推拉SMTP&POP3

作者: Chreyl_1d33 | 来源:发表于2018-09-07 20:01 被阅读0次

    【前言】作为一名测试小白,如果有天被问到:测试邮件发送、接收?
    这种该如何测呢?那首先,结合python来理解下邮件推拉协议吧
    【正文】

    电子邮件协议及其通信实体

    SMTP:邮件发送协议;
    POP3:邮件拉取协议(当然,现在都是IAMP用的较多,POP3是单向的);
    理解推拉协议:
    上图中,Alice要发送邮件,他在用户代理(可以理解为电脑里的Foxmail应用程序)中编辑好邮件后,通过SMTP协议将邮件发送到他的邮件服务器,此邮件被加入到邮件服务器的发送邮件队列中,然后Alice的邮件服务器再通过SMTP协议将此邮件发送到Bob的邮件服务器中。当Bob打开用户代理,用户代理和Bob的邮件服务器建立好TCP连接后,POP3按照3个阶段开始工作:
    1、特许阶段:用户代理发送用户名和口令--鉴别用户;
    2、事务处理阶段:用户代理取回报文;还可以对报文做删除标记,取消报文删除标记,以及获取邮件的统计信息;
    3、更新阶段:结束该POP3会话;这个时候该邮件服务器删除那些被标记的删除的报文;
    在POP3事务处理的过程中,用户代理发出指令,服务器对每个指令做出回答;

    看看python中怎么实现邮件推拉的:
    1.发送邮件:
    Python对SMTP支持有两个模块:email负责构造邮件,smtplib负责发送邮件
    from email.mime.text import MIMEText
    import smtplib
    msg = MIMEText('hello, send by Python...', 'plain', 'utf-8')
    from_addr = input('From: ') //输入Email地址和口令
    password = input('Password: ')
    to_addr = input('To: ') //输入收件人地址
    smtp_server = input('SMTP server: ') //输入SMTP服务器地址
    server = smtplib.SMTP(smtp_server, 25) # SMTP协议默认端口是25
    server.set_debuglevel(1) //打印出和SMTP服务器交互的所有信
    server.login(from_addr, password)
    server.sendmail(from_addr, [to_addr], msg.as_string()) //可以一次发给多个人,所以传入一个list
    server.quit()

    2.收取邮件:
    Python内置一个poplib模块,实现了POP3协议,可用来收邮件。POP3协议收取的不是一个已经可以阅读的邮件本身,而是邮件的原始文本,这和SMTP协议很像,SMTP发送的也是经过编码后的一大段文本。要把POP3收取的文本变成可以阅读的邮件,还需要用email模块提供的各种类来解析原始文本,变成可阅读的邮件对象。
    所以,收取邮件分两步:
    第一步:用poplib把邮件的原始文本下载到本地;
    第二步:用email解析原始文本,还原为邮件对象;
    import poplib
    from email.parser import Parser
    from email.header import decode_header
    from email.utils import parseaddr
    email = input('Email: ')//输入邮件地址, 口令和POP3服务器地址
    password = input('Password: ')
    pop3_server = input('POP3 server: ')
    server = poplib.POP3(pop3_server)//连接到POP3服务器
    server.set_debuglevel(1)
    server.user(email)//身份认证
    server.pass_(password)
    print('Messages: %s. Size: %s' % server.stat())//stat()返回邮件数量和占用空间
    resp, mails, octets = server.list()// list()返回所有邮件的编号
    index = len(mails)//获取最新一封邮件, 注意索引号从1开始
    resp, lines, octets = server.retr(index)
    msg_content = b'\r\n'.join(lines).decode('utf-8')//lines存储了邮件原始文本的每一行
    msg = Parser().parsestr(msg_content)//解析出邮件,这里就不细说
    server.dele(index)//可以根据邮件索引号直接从服务器删除邮件
    server.quit()//# 关闭连接

    好了,理解了简单的协议,如何测试邮件推拉整体功能呢?
    明确要测什么? ---smtp协议,pop3协议,客户端,邮件服务器?
    首先排除掉协议和服务器,协议用了这么久自然有用户来检验,而邮件服务器,现在我们一般使用的都是三方提供的,菜鸟本鸟也并没有接触过服务器测试==。所以下面就说下关于邮件推拉整体的功能测试一些想法吧(尽管不会有这种问题...

    a. 冒烟测试主功能:能编辑信息、能发送信息、能收到信息;
    b.界面友好,信息完善(编辑信息界面、查看信息界面--发件人、收件人、主题、内容)
    c.功能有哪些分类呢?这里考虑等价类:
    邮件内容:文本、链接、图片、附件;
    收件人:一个、多个;
    主题:中英文、特殊字符、表情符;
    支持邮件处理:增删改查;刷新;转发;
    d.功能支持的上限?考虑边界值:
    内容超长?附件最多数量?文件大小?图片大小?收件人数量?附件有效存储期?邮件服务器容量?
    e.友好提示:为空提示?失败成功提示?非法操作提示?
    d.其他:
    安全性考虑,传输加密;
    时效性考虑,实时收发;
    用户认证,登陆有效期;
    稳定性,大用户量并发;
    需求性,满足客户需求;

    相关文章

      网友评论

          本文标题:理解邮件推拉SMTP&POP3

          本文链接:https://www.haomeiwen.com/subject/amtriftx.html