• 技术文章 >后端开发 >Python教程

    使用python发送和接收邮件实例代码

    高洛峰高洛峰2017-03-21 13:44:49原创875

    关于电子邮件

    大学之前,基本不用邮箱,所以基本感觉不到它的存在,也不知道有什么用;然而大学之后,随着认识的人越来越多,知识越来越广泛,邮箱已然成为很重要的通讯工具,大学一些课程作业需要有邮箱发给老师,注册网站需要邮箱,找工作也需要邮箱;那么电子邮箱是什么原理呢?

    发送邮件

    SMTP协议

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议属于TCP/IP协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。通过SMTP协议所指定的服务器,就可以把E-mail寄到收信人的服务器上了,只要几分钟。

    python中的SMTP模块

    使用SMTP的基本步骤

    1. 连接服务器

    2. 登录

    3. 发送服务请求

    4. 退出

    import smtplib
    from email import encoders
    from email.header import Header
    from email.mime.text import MIMEText
    from email.utils import parseaddr, formataddr
    
    
    
    def send_email(from_addr, to_addr, subject, password):
        msg = MIMEText("邮件正文",'html','utf-8')
        msg['From'] = u'<%s>' % from_addr
        msg['To'] = u'<%s>' % to_addr
        msg['Subject'] = subject
    
        smtp = smtplib.SMTP_SSL('smtp.163.com', 465)
        smtp.set_debuglevel(1)
        smtp.ehlo("smtp.163.com")
        smtp.login(from_addr, password)
        smtp.sendmail(from_addr, [to_addr], msg.as_string())
    
    
    if name == "main":
        # 这里的密码是开启smtp服务时输入的客户端登录授权码,并不是邮箱密码
        # 现在很多邮箱都需要先开启smtp才能这样发送邮件
        send_email(u"from_addr",u"to_addr",u"主题",u"password")

    上面演示了用smtplib来发送邮件,并且使用了SSL加密,这样相对安全,使用了email来构造邮件的内容,这里发送的是纯文本的内容,我觉得最应该注意的就是这里邮箱的密码。另外各个公司的邮件服务器和端口都可能不同,使用前可以先查一下

    这里列几个常用的:

    邮箱SMTP服务器SSL协议端口非SSL协议端口
    163smtp.163.com465或者99425
    qqsmtp.11.com465或58725

    接收邮件

    POP3和IMAP

    POP是指邮局协议,目的是让用户可以访问邮箱服务器中的邮件,允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。

    后来又出现了IMAP协议(Interactive Mail Access Protocol),即交互式邮件访问协议,与POP3的不同在于:开启了IMAP后,在电子邮件客户端收取的邮件仍然保留在服务器上,同时在客户端上的操作都会反馈到服务器上,如:删除邮件,标记已读等,服务器上的邮件也会做相应的动作。

    使用POP3

    python的poplib模块支持POP3,基本步骤:

    1. 连接到服务器

    2. 登录

    3. 发出服务请求

    4. 退出

    poplib的常用方法:

    方法描述
    POP3(server)实例化POP3对象,server是pop服务器地址
    user(username)发送用户名到服务器,等待服务器返回信息
    pass_(password)密码
    stat()返回邮箱的状态,返回2元祖(消息的数量,消息的总字节)
    list([msgnum])stat()的扩展,返回一个3元祖(返回信息, 消息列表, 消息的大小),如果指定msgnum,就只返回指定消息的数据
    retr(msgnum)获取详细msgnum,设置为已读,返回3元组(返回信息, 消息msgnum的所以内容, 消息的字节数),如果指定msgnum,就只返回指定消息的数据
    dele(msgnum)将指定消息标记为删除
    quit()登出,保存修改,解锁邮箱,结束连接,退出

    例子

    from poplib import POP3
    
    p = POP3('pop.163.com')
    p.user('xxxxxxx@163.com')
    p.pass_('xxxxxxxx')
    
    p.stat()
    ...
    
    p.quit()

    使用IMAP

    python中的imaplib包支持IMAP4

    常用方法:

    方法描述
    IMAP4(server)与IMAP服务器建立连接
    login(user, pass)用户密码登录
    list()查看所有的文件夹(IMAP可以支持创建文件夹)
    select()选择文件夹默认是"INBOX"
    search()三个参数,第一的是CHARSET,通常为None(ASCII),第二个参数不知到是干什么官方没解释

    例子

    import getpass, imaplib
    
    M = imaplib.IMAP4()
    M.login(getpass.getuser(), getpass.getpass())
    M.select()
    typ, data = M.search(None, 'ALL')
    for num in data[0].split():
        typ, data = M.fetch(num, '(RFC822)')
        print 'Message %s\n%s\n' % (num, data[0][1])
    M.close()
    M.logout()

    以上就是使用python发送和接收邮件实例代码的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:python
    上一篇:python tornado websocket实时日志展示的实例代码 下一篇:python文件File输入输出的基本操作方法
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• 详细解析python正则表达式re模块• 一文搞定Python中pip的安装与使用• Python实战解析selenium的基本元素与键盘鼠标模拟事件• 一文详解python生成器• 一起聊聊Python的编码样式
    1/1

    PHP中文网