欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python 简单发送邮件 / 发送带各种附件邮件

程序员文章站 2024-03-18 14:54:28
...

写个自动发送邮件的python脚本。

用脚本发送邮件思路是:登陆邮箱-->写邮件-->发送邮件

Python 简单发送邮件 / 发送带各种附件邮件

发送邮箱设置:

得开通自己邮箱的 SMTP 功能,具体可百度。

以163网易邮箱为例: 设置 -->  POP3/SMTP/IMAP  -->  设置POP3/SMTP/IMAP 勾选保存

Python 简单发送邮件 / 发送带各种附件邮件

Python 简单发送邮件 / 发送带各种附件邮件

一、发送简单邮件:

用STMP库

import smtplib
#发送字符串的邮件
from email.mime.text import MIMEText
#处理多种形态的邮件主体我们需要 MIMEMultipart 类
from email.mime.multipart import MIMEMultipart
#处理图片需要 MIMEImage 类
from email.mime.image import MIMEImage

#设置服务器所需信息
fromaddr = 'aaa@qq.com'#邮件发送方邮箱地址
password = 'zzz'#密码(部分邮箱为授权码) 
toaddrs = ['aaa@qq.com', 'aaa@qq.com']#邮件接受方邮箱地址,注意需要[]包裹,这意味着你可以写多个邮件地址群发


#设置email信息
#---------------------------发送字符串的邮件-----------------------------
#邮件内容设置
message = MIMEText('hello,ziqiiii','plain','utf-8')
#邮件主题       
message['Subject'] = 'ziqiiii test email' 
#发送方信息
message['From'] = sender 
#接受方信息     
message['To'] = receivers[0]  
#---------------------------------------------------------------------


#登录并发送邮件
try:
    server = smtplib.SMTP('smtp.163.com')#163邮箱服务器地址,端口默认为25
    server.login(fromaddr,password)
    server.sendmail(fromaddr, toaddrs, message.as_string())
    print('success')
    server.quit()

except smtplib.SMTPException as e:
    print('error',e) #打印错误


二、发送各种带附件的邮件

使用MIMEMultipart来标示这个邮件是多个部分组成的,然后attach各个部分。如果是附件,则add_header加入附件的声明。

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

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

import smtplib
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication 

if __name__ == '__main__':
        fromaddr = 'aaa@qq.com'
        password = 'password'
        toaddrs = ['aaa@qq.com', 'aaa@qq.com']

        content = 'hello, this is email content.'
        textApart = MIMEText(content)

        imageFile = '1.png'
        imageApart = MIMEImage(open(imageFile, 'rb').read(), imageFile.split('.')[-1])
        imageApart.add_header('Content-Disposition', 'attachment', filename=imageFile)

        pdfFile = '算法设计与分析基础第3版PDF.pdf'
        pdfApart = MIMEApplication(open(pdfFile, 'rb').read())
        pdfApart.add_header('Content-Disposition', 'attachment', filename=pdfFile)
    

        zipFile = '算法设计与分析基础第3版PDF.zip'
        zipApart = MIMEApplication(open(zipFile, 'rb').read())
        zipApart.add_header('Content-Disposition', 'attachment', filename=zipFile)

        m = MIMEMultipart()
        m.attach(textApart)
        m.attach(imageApart)
        m.attach(pdfApart)
        m.attach(zipApart)
        m['Subject'] = 'title'

        try:
            server = smtplib.SMTP('smtp.163.com')
            server.login(fromaddr,password)
            server.sendmail(fromaddr, toaddrs, m.as_string())
            print('success')
            server.quit()
        except smtplib.SMTPException as e:
            print('error:',e) #打印错误

Python 简单发送邮件 / 发送带各种附件邮件



参考自:

1.简单三步,用python发邮件

2.飘逸的python - 发送带各种类型附件的邮件

3.python收发邮件(demo)--smtplib--poplib