首页 > 软件开发 > PYTHON >

利用Python实现邮件的发送

来源:互联网 2023-03-16 19:29:39 324

本文介绍了邮件传输的SMTP协议,并根据该协议,利用了Python的‘smtplib’和‘email‘模块,完成邮件的成功发送。vHx办公区 - 实用经验教程分享!

利用Python实现邮件的发送vHx办公区 - 实用经验教程分享!

工具/原料

  • python,email模块,smtplib模块

方法/步骤

  • 1

    首先了解SMTP(简单邮件传输协议),邮件传送代理程序使用SMTP协议来发送电邮到接收者的邮件服务器。SMTP协议只能用来发送邮件,不能用来接收邮件,而大多数的邮件发送服务器都是使用SMTP协议。SMTP协议的默认TCP端口号是25。vHx办公区 - 实用经验教程分享!

    利用Python实现邮件的发送vHx办公区 - 实用经验教程分享!

  • 2

    本文主要介绍利用'smtplib','email'两个模块来实现邮件的发送,可以如下查看两个模块的函数和方法:vHx办公区 - 实用经验教程分享!

    利用Python实现邮件的发送vHx办公区 - 实用经验教程分享!

    利用Python实现邮件的发送vHx办公区 - 实用经验教程分享!

  • 3

    smtplib模块简介:vHx办公区 - 实用经验教程分享!

    vHx办公区 - 实用经验教程分享!

    smtplib.SMTP([host[, port[, local_hostname[, timeout]]]])vHx办公区 - 实用经验教程分享!

      此为SMTP类构造函数,表示与SMTP服务器之间的连接,并根据这个连接向smtp服务器发送指令,执行相关操作(如:登陆、发送邮件),且每个参数都是可选的。vHx办公区 - 实用经验教程分享!

    其中最重要的参数:vHx办公区 - 实用经验教程分享!

    host:smtp服务器主机名vHx办公区 - 实用经验教程分享!

    port:smtp服务的端口,默认是25;vHx办公区 - 实用经验教程分享!

    如果在创建SMTP对象的时候提供了这两个参数,在初始化的时候会自动调用connect方法去连接服务器。vHx办公区 - 实用经验教程分享!

    vHx办公区 - 实用经验教程分享!

    smtplib.SMTP还提供了如下方法:vHx办公区 - 实用经验教程分享!

    SMTP.set_debuglevel(level):设置是否为调试模式vHx办公区 - 实用经验教程分享!

    SMTP.connect([host[, port]]):连接到指定的smtp服务器。参数分别表示 smpt主机和端口。vHx办公区 - 实用经验教程分享!

    SMTP.docmd(cmd[, argstring]):向smtp服务器发送指令。vHx办公区 - 实用经验教程分享!

    SMTP.helo([hostname]) :使用"helo"指令向服务器确认身份。vHx办公区 - 实用经验教程分享!

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

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

    vHx办公区 - 实用经验教程分享!

    常用的函数方法:vHx办公区 - 实用经验教程分享!

    利用Python实现邮件的发送vHx办公区 - 实用经验教程分享!

  • 4

    email模块 vHx办公区 - 实用经验教程分享!

    1.class email.message.MessagevHx办公区 - 实用经验教程分享!

    __getitem__,__setitem__实现obj[key]形式的访问。vHx办公区 - 实用经验教程分享!

    Msg.attach(playload): 向当前Msg添加playload。vHx办公区 - 实用经验教程分享!

    Msg.set_playload(playload):vHx办公区 - 实用经验教程分享!

    Msg.add_header(_name, _value, **_params): 添加邮件头字段。vHx办公区 - 实用经验教程分享!

    vHx办公区 - 实用经验教程分享!

    2.class email.mime.base.MIMEBase(_maintype, _subtype, **_params)vHx办公区 - 实用经验教程分享!

    所有MIME类的基类,是email.message.Message类的子类。vHx办公区 - 实用经验教程分享!

    vHx办公区 - 实用经验教程分享!

    3.class email.mime.multipart.MIMEMultipart()vHx办公区 - 实用经验教程分享!

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

    vHx办公区 - 实用经验教程分享!

    4.class email.mime.text.MIMEText(_text)vHx办公区 - 实用经验教程分享!

    使用字符串_text来生成MIME对象的主体文本。vHx办公区 - 实用经验教程分享!

    利用Python实现邮件的发送vHx办公区 - 实用经验教程分享!

  • 5

    获得所需要使用的邮箱的host地址和port端口号,(本文使用的是163邮箱,对应的smtp服务器地址:mail.163.com,端口号25)vHx办公区 - 实用经验教程分享!

    常用邮箱的smtp服务器地址和端口号如图:vHx办公区 - 实用经验教程分享!

    利用Python实现邮件的发送vHx办公区 - 实用经验教程分享!

  • 6

    编写程序如下:vHx办公区 - 实用经验教程分享!

    vHx办公区 - 实用经验教程分享!

    #! /usr/bin/env pythonvHx办公区 - 实用经验教程分享!

    import smtplivHx办公区 - 实用经验教程分享!

    from email.mime.text import MIMETextvHx办公区 - 实用经验教程分享!

    vHx办公区 - 实用经验教程分享!

    mailto_list=['xxxx@xxx.com'] #收件人(列表)vHx办公区 - 实用经验教程分享!

    mail_host="smtp.163.com" #使用的邮箱的smtp服务器地址vHx办公区 - 实用经验教程分享!

    mail_user="name" #用户名vHx办公区 - 实用经验教程分享!

    mail_pass="pwd" #密码vHx办公区 - 实用经验教程分享!

    mail_postfix="postfix" #邮箱的后缀vHx办公区 - 实用经验教程分享!

    def send_mail(to_list,sub,content):vHx办公区 - 实用经验教程分享!

    me="hello" "" mail_user "@" mail_postfix ">"vHx办公区 - 实用经验教程分享!

    msg = MIMEText(content,_subtype='plain')vHx办公区 - 实用经验教程分享!

    msg['Subject'] = subvHx办公区 - 实用经验教程分享!

    msg['From'] = mevHx办公区 - 实用经验教程分享!

    msg['To'] = ";".join(to_list) #将收件人列表以‘;’分隔vHx办公区 - 实用经验教程分享!

    try:vHx办公区 - 实用经验教程分享!

    server = smtplib.SMTP()vHx办公区 - 实用经验教程分享!

    server.connect(mail_host) #连接服务器vHx办公区 - 实用经验教程分享!

    server.login(mail_user,mail_pass) #登录操作vHx办公区 - 实用经验教程分享!

    server.sendmail(me, to_list, msg.as_string())vHx办公区 - 实用经验教程分享!

    server.close()vHx办公区 - 实用经验教程分享!

    return TruevHx办公区 - 实用经验教程分享!

    except Exception, e:vHx办公区 - 实用经验教程分享!

    print str(e)vHx办公区 - 实用经验教程分享!

    return FalsevHx办公区 - 实用经验教程分享!

    for i in range(5): #发送五封,不过会被拦截的。。。vHx办公区 - 实用经验教程分享!

    if send_mail(mailto_list,"hello","haha!"): #邮件主题和邮件内容vHx办公区 - 实用经验教程分享!

    print "done!"vHx办公区 - 实用经验教程分享!

    else:vHx办公区 - 实用经验教程分享!

    print "failed!"vHx办公区 - 实用经验教程分享!

    vHx办公区 - 实用经验教程分享!

    最后,可以运行编写的py文件,可以得到如图所是的结果,代表邮件发送成功。vHx办公区 - 实用经验教程分享!

    利用Python实现邮件的发送vHx办公区 - 实用经验教程分享!

    利用Python实现邮件的发送vHx办公区 - 实用经验教程分享!

  • 6该信息未经许可获取自百度经验
  • 7

    这样,就能成功实现用Python发送邮件啦!可以看到接收端接收到的邮件如:vHx办公区 - 实用经验教程分享!

    利用Python实现邮件的发送vHx办公区 - 实用经验教程分享!

  • 以上方法由办公区教程网编辑摘抄自百度经验可供大家参考!vHx办公区 - 实用经验教程分享!


    标签: python

    办公区 Copyright © 2016-2023 www.bgqu.net. Some Rights Reserved. 备案号:湘ICP备2020019561号统计代码