lb_Mvp的个人空间 https://blog.eetop.cn/1185438 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

Python实现邮件的发送

已有 916 次阅读| 2015-9-21 10:35

本文介绍了邮件传输的SMTP协议,并根据该协议,利用了Python的‘smtplib’和‘email‘模块,完成邮件的成功发送。

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

查看模块的函数和方法:

import smtplib
dir(smtplib)
import email
dir(email)


smtplib.SMTP([host[, port[, local_hostname[, timeout]]]])

   此为SMTP类构造函数,表示与SMTP服务器之间的连接,并根据这个连接向smtp服务器发送指令,执行相关操作(如:登陆、发送邮件),且每个参数都是可选的。

     其中最重要的参数:

     host:smtp服务器主机名

     port:smtp服务的端口,默认是25;

如果在创建SMTP对象的时候提供了这两个参数,在初始化的时候会自动调用connect方法去连接服务器。

smtplib.SMTP还提供了如下方法:

     SMTP.set_debuglevel(level):设置是否为调试模式

     SMTP.connect([host[, port]]):连接到指定的smtp服务器。参数分别表示 smpt主机和端口。

     SMTP.docmd(cmd[, argstring]):向smtp服务器发送指令。

     SMTP.helo([hostname]) :使用"helo"指令向服务器确认身份。

     SMTP.login(user, password):登陆到smtp服务器。现在几乎所有smtp服务器,都必须在验证用户信息合法之后才允许发送邮件。(重要!)

     SMTP.sendmail(from_addr,to_addrs,msg[,mail_options,rcpt_options]):发送邮件。这里要注意一下第三个参数,msg是字符串,表示邮件。我们知道邮件一般由标题,发信人,收件人,邮件内容,附件等构成,发送邮件的时候,要注意msg的格式。这个格式就是smtp协议中定义的格式。SMTP.quit() :断开与smtp服务器的连接,相当于发送"quit"指令。(重要!)


3 mail模块简介

class email.message.Message

    __getitem__,__setitem__实现obj[key]形式的访问。

    Msg.attach(playload): 向当前Msg添加playload。

    Msg.set_playload(playload): 

    Msg.add_header(_name, _value, **_params): 添加邮件头字段。

class email.mime.base.MIMEBase(_maintype, _subtype, **_params)

    所有MIME类的基类,是email.message.Message类的子类。

class email.mime.multipart.MIMEMultipart()

    在3.0版本的email模块 (Python 2.3-Python 2.5) 中,这个类位于email.MIMEMultipart.MIMEMult    ipart。这个类是MIMEBase的直接子类,用来生成包含多个部分的邮件体的MIME对象。

class email.mime.text.MIMEText(_text)

    使用字符串_text来生成MIME对象的主体文本。


4 获得所使用的邮箱的host地址和Port端口号

本文使用的是163邮箱,对应的smtp服务器地址:mail.163.com,端口号25


5 代码
import smtplib
from email.mime.text import MIMEText

mail_tolist=['825481409@qq.com']     #收件人(列表)
mail_host="smtp.163.com"             #使用的邮箱的smtp服务器地址
mail_user="liangbohit"               #用户名
mail_pass="liangbo315"               #密码
mail_postfix="163.com"               #邮箱的后缀

def send_mail(tolist,sub,content):  #sub为邮件主题,content为邮件内容
    me = "hello"+"<"+mail_user+"@"+mail_postfix+">"
    msg = MIMEText(content,_subtype='plain')
    msg['Subject'] = sub
    msg['From'] = me
    msg['To']=";".join(tolist)

    try:
        server = smtplib.SMTP()
        server.connect(mail_host)
        server.login(mail_user,mail_pass)
        server.sendmail(me,tolist,msg.as_string())
        server.close()
        print('done!')
        return True
    except Exception as reason:
        print('发送失败:'+str(reason))
        return False

send_mail(mail_tolist,'hello','发送成功了!') 

点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 1

    粉丝
  • 0

    好友
  • 3

    获赞
  • 2

    评论
  • 753

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-22 00:55 , Processed in 0.025441 second(s), 14 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部