使用python发送邮件可带附件

使用


python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。

在python中,MIME的这些对象的继承关系如下。

MIMEBase

    |-- MIMENonMultipart

        |-- MIMEApplication

        |-- MIMEAudio

        |-- MIMEImage

        |-- MIMEMessage

        |-- MIMEText

    |-- MIMEMultipart

一般来说,不会用到MIMEBase,而是直接使用它的继承类。MIMEMultipart有attach方法,而MIMENonMultipart没有,只能被attach。

MIME有很多种类型,这个略麻烦,如果附件是图片格式,我要用MIMEImage,如果是音频,要用MIMEAudio,如果是word、excel,我都不知道该用哪种MIME类型了,得上google去查。

最懒的方法就是,不管什么类型的附件,都用MIMEApplication,MIMEApplication默认子类型是application/octet-stream。

以上内容出自原文,下方带有链接。


特别说明


想通过QQ邮箱来发送邮件,需开启QQ邮箱的设置-账户里POP3/SMTP服务,通过发送短信验证来获得授权码,有了授权码后就可以在代码里添加了。


使用python发送邮件可带附件_第1张图片
开启pop/smtp


使用python发送邮件可带附件_第2张图片
授权码


测试代码


#!/usr/bin/python

#!/usr/bin/python

# _*_ coding: utf-8 _*_

import os

import smtplib

from email.mime.text import MIMEText

from email.utils import formataddr

from email.header import Header

'''

函数说明:Send_email_text() 函数实现发送带有附件的邮件,可以群发,附件格式包括:xlsx,pdf,txt,jpg,png,mp3等都可以

参数说明:

    1. subject:邮件主题

    2. content:邮件正文

    3. filepath:附件的地址, 输入格式为["","",...]

    4. receive_email:收件人地址, 输入格式为["","",...]

'''

def Send_email_text(subject,content,filepath,receive_email):

    import smtplib

    from email.mime.multipart import MIMEMultipart

    from email.mime.text import MIMEText

    from email.mime.application import MIMEApplication

    sender = '[email protected]'             #发送方邮箱

    passwd = 'gmdfztzbinlvbiei'         #填入发送方邮箱的授权码

    receivers = receive_email            #收件人邮箱

    msgRoot = MIMEMultipart()

    msgRoot['Subject'] = subject

    msgRoot['From'] = sender

    if len(receivers)>1:

        msgRoot['To'] = ','.join(receivers)    #群发邮件

    else:

        msgRoot['To'] = receivers[0]

    part = MIMEText(content,_charset="utf-8")

    msgRoot.attach(part)

    ##添加附件部分

    for path in filepath:

        part = MIMEApplication(open(path,'rb').read())

        part.add_header('Content-Disposition', 'attachment', filename=path)

        msgRoot.attach(part)

    try:

        #s = smtplib.SMTP()

        #s.connect("smtp.mail.aliyun.com") #这里我使用的是阿里云邮箱,也可以使用163邮箱:smtp.163.com

        s = smtplib.SMTP_SSL('smtp.qq.com',465)    #邮件服务器及端口号,qq邮箱

        s.login(sender, passwd)

        s.sendmail(sender, receivers, msgRoot.as_string())

        print ("邮件发送成功")

    except smtplib.SMTPException as e:

        print("Error, 发送失败")

    finally:

        s.quit()

subject = "文件测试"

content = "Python 邮件测试"

#file_path = ["smtp.py","smtp_attach.py","smtpatt.py"]                  #发送三个文件到三个邮箱

file_path = os.listdir('./')

files.remove('smtp_attach.py')

receive_email = ["[email protected]","[email protected]","[email protected]"]

Send_email_text(subject,content,file_path,receive_email)


测试结果


使用python发送邮件可带附件_第3张图片


相关参考

参考原文

简单的例子

一个附件例子

你可能感兴趣的:(使用python发送邮件可带附件)