zoukankan      html  css  js  c++  java
  • python 网络编程学习: 4 网络客户端编程之SMTP

    邮件工作过程 建议看一下

    常见的电子邮件协议有以下几种:SMTP(简单邮件传输协议)、POP3(邮局协议)、IMAP(Internet邮件访问协议)、HTTP、S/MIME。这几种协议都是由TCP/IP协议族定义的。

    • SMTP(Simple Mail Transfer Protocol):SMTP主要负责底层的邮件系统如何将邮件从一台机器传至另外一台机器。
    • POP(Post Office Protocol):目前的版本为POP3,POP3是把邮件从电子邮箱中传输到本地计算机的协议。
    • IMAP(Internet Message Access Protocol):目前的版本为IMAP4,是POP3的一种替代协议,提供了邮件检索和邮件处理的新功能,这样用户可以完全不必下载邮件正文就可以看到邮件的标题摘要,从邮件客户端软件就可以对服务器上的邮件和文件夹目录等进行操作。IMAP协议增强了电子邮件的灵活性,同时也减少了垃圾邮件对本地系统的直接危害,同时相对节省了用户察看电子邮件的时间。除此之外,IMAP协议可以记忆用户在脱机状态下对邮件的操作(例如移动邮件,删除邮件等)在下一次打开网络连接的时候会自动执行。
    • HTTP(S): 通过浏览器使用邮件服务时使用。

    Python和SMTP

    python 有一个smtplib模块和一个smtplib.SMTP类。

    过程为:

    1. 连接服务器
    2. 登录(如果需要)
    3. 发出服务请求
    4. 退出

    代码描述为

    from smtplib import SMTP
    n = SMTP('smtp.yourdomain.com')
    .....
    n.quit()

    smtplib.SMTP类的一些常用方法

     
    方法 描述
    sendmail(from_addrto_addrsmsg[mail_optionsrcpt_options]) 把msg从from 发送给to(列表或元组),ESMTP设置 (mail_options)和收件人设置 rcpt_options 为可选
    quit() 关闭连接,然后退出
    login(userpassword) 使用用户名和密码登录到SMTP服务器,只在有SMTP-AUTH时使用

    sendmail(from_addrto_addrsmsg[mail_optionsrcpt_options])  的所有参数都要遵循RFC 2822 ,即电子邮件地址必须要有正确的格式,消息体要有正确的前导头,前导头后面是两个回车和换行(\r\n)对。

     

    看一下邮件内容包括哪些部分

    每一个传统的E-mail都包含两个不同的部分:header和body。header 包含控制数据----例如:寄件人、目的地、信息的标题,而body包含信息本身。

    下面是用到header的几种的几种情况:

    • From header 可以想用户表明邮件的发送人。
    • Reply-To header 可以设置一个回复的替换地址
    • Subject header 用于显示邮箱主题
    • Date header 可以用来按照到达时间分类邮箱
    • Message-ID 和In-Reply-To header 可以帮助某些邮件程序实现线索
    • MIME header 可以帮助邮件程序以合适的语言 格式来显示邮件,也可用来处理附件

    代码示例

    #!/usr/bin/python
    
    import smtplib
    
    sender = 'from@fromdomain.com'
    receivers = ['to@todomain.com']
    
    message = """From: From Person <from@fromdomain.com>
    To: To Person <to@todomain.com>
    Subject: SMTP e-mail test
    
    This is a test e-mail message.
    """
    
    try:
       smtpObj = smtplib.SMTP('localhost')
       smtpObj.sendmail(sender, receivers, message)         
       print "Successfully sent email"
    except SMTPException:
       print "Error: unable to send email"

    在Python中 产生邮件的模块在email模块里,在这里我们使用MIMEText 来编写一个使用126邮箱发送邮件的程序

    #/usr/bin/python
    # -*- coding: utf-8 -*-
    
    #导入smtplib和MIMEText
    import smtplib
    from email.mime.text import MIMEText
    
    
    mailto = "XXXXXXX@gmail.com"
    #设置服务器DateTimeField用户名、口令以及邮箱的后缀
    mail_host = "smtp.126.com"
    mail_user = "username"
    mail_pass = "password"
    mail_postfix = "126.com"
    ######################
    
    
    def send_mail(to, sub, content):
        '''
        to_list:发给谁
        sub:主题
        content:内容
        send_mail("aaa@126.com","sub","content")
        '''
        me = mail_user + "<" + mail_user + "@" + mail_postfix + ">"
        msg = MIMEText(content)
        msg['Subject'] = sub
        msg['From'] = me
        msg['To'] = to
        try:
            s = smtplib.SMTP()
            s.connect(mail_host)
            s.login(mail_user, mail_pass)
            s.sendmail(me, to, msg.as_string())
            s.close()
            print '发送至' + to + '成功'
        except Exception, e:
            print str(e)
            print "发送至'+ to +'失败"
    
    
    if __name__ == '__main__':
        subject = raw_input('enter subject:> ')
        content = raw_input('enter content:> ')
        send_mail(mailto, subject, content)


    作者:GoodSpeed Cheng
    出处:http://www.cnblogs.com/cacique/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。


  • 相关阅读:
    Scite 编辑器及其相关项目介绍
    cmake 常用指令入门指南
    C++中的POD类型
    引用折叠、万能引用和完美转发那些事
    c++的对象初始化
    C++类对象的内存布局
    effective C++ 读书精华笔记提取
    c/c++的const说明符——深入挖掘
    gdb调试器—常用知识(一)
    g++/gcc编译器——常用知识(一)
  • 原文地址:https://www.cnblogs.com/cacique/p/2655793.html
Copyright © 2011-2022 走看看