python邮件发送

邮件自动发送基本流程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# 第一步 smtplib - 登陆邮箱;发送邮件

import smtplib
from email.mime.multipart import MIMEMultipart #邮件对象
from email.header import Header # 头部
from email.mime.text import MIMEText #文本的正文

# 1.连接邮箱服务器
# smtplib.SMTP_SSL(服务器地址,邮箱服务端口) - 连接邮箱服务器并且返回一个连接对象

connect = smtplib.SMTP_SSL('smtp.qq.com',465)

# 2.登陆邮箱
# 连接对象.login(邮箱地址,密码(授权码))

connect.login('QQ号@qq.com','授权码')

# 第二步 - 准备邮件
# 1.创建一个邮件对象

email = MIMEMultipart()

# 2.设置邮件主题
# Header(邮件标题,编码方式)

email['Subject'] = Header('第一次普通邮件发送','utf-8').encode()

# 3.设置邮件接收者信息(收件人)

email['To'] = 'QQ号@qq.com'

# 4.设置邮件发件人

email['From'] = 'QQ号@qq.com <QQ号@qq.com>'

# 5.添加正文
'''
MIMEText(文字内容,类型,编码方式)
类型 - plain(普通文字),html(超文本)
'''

text = MIMEText('hello world','plain','utf-8')
email.attach(text)

# 第三步:通过连接发送邮件
# 连接对象.sendmail(发件人,收件人,邮件对象.as_string())

connect.sendmail('QQ号@qq.com','QQ号@qq.com',email.as_string())
connect.quit()

发送包含附件的邮件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import smtplib
from email.mime.multipart import MIMEMultipart #邮件对象
from email.header import Header # 头部
from email.mime.text import MIMEText #文本的正文
from email.mime.image import MIMEImage

# 登陆
connect = smtplib.SMTP_SSL('smtp.qq.com',465)
connect.login('QQ号@qq.com','授权码')

# 准备邮件

email = MIMEMultipart()

email['Subject'] = Header('第二次邮件发送带附件','utf-8').encode()
email['To'] = 'QQ号@qq.com'
email['From'] = 'QQ号@qq.com <QQ号@qq.com>'

text = MIMEText('照片在附件中,请注意查收','plain','utf-8')
email.attach(text)

# 准备图片

# 打开图片读取图片二进制数据
image_data = open('image/小猫.jpg', 'rb').read()

# 创建图片对象
image = MIMEImage(image_data)

# 设置图片为附件
image["Content-Disposition"] = 'attachment;filename="cat.jpg"'

# 将图片添加到邮件对象中
email.attach(image)

# ===============2.其他文件附件================

file_data1 = open('image/2021年“专升本”学生收费公示栏.xls',"rb").read()
file1 = MIMEText('file_data1', 'base64', 'utf-8')
file1['Content-Disposition'] = ' attachment; filename="a.xls"'
email.attach(file1)

file_data2 = open('image/邱少云烈士纪念馆.pptx','rb').read()
file2 = MIMEText('file_data1', 'base64', 'utf-8')
file2['Content-Disposition'] = ' attachment; filename= "b.pptx"'
email.attach(file2)

# 发送邮件
connect.sendmail('QQ号@qq.com','QQ号@qq.com',email.as_string())
connect.quit()

发送超文本文件内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import smtplib
from email.mime.multipart import MIMEMultipart #邮件对象
from email.header import Header # 头部
from email.mime.text import MIMEText
from email.mime.image import MIMEImage

# 登陆
connect = smtplib.SMTP_SSL('smtp.qq.com',465)
connect.login('QQ号@qq.com','授权码')

# 准备邮件

email = MIMEMultipart()

email['Subject'] = Header('第三次发送html邮件','utf-8').encode()
email['To'] = 'QQ号@qq.com'
email['From'] = 'QQ号@qq.com <QQ号@qq.com>'

#====================邮件正文===========================

content = open('test.html',encoding='utf-8').read()
text = MIMEText(content,'html', 'utf-8')
email.attach(text)


image_data = open('image/aa.jpg', 'rb').read()
image = MIMEImage(image_data)
image.add_header("Content-ID",'<image1>')
email.attach(image)

connect.sendmail('QQ号@qq.com','QQ号@qq.com',email.as_string())
connect.quit()

图片批量发送

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import smtplib
from email.mime.multipart import MIMEMultipart
from email.header import Header
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
import os

connect = smtplib.SMTP_SSL('smtp.qq.com', 465)
connect.login('QQ号@qq.com', '授权码')

email = MIMEMultipart()
email['Subject'] = Header('第四次图片批量发送邮件', 'utf-8').encode()
email['To'] = 'QQ号@qq.com'
email['From'] = 'QQ号@qq.com <QQ号@qq.com>'

# ========================邮件正文=====================
all_images = os.listdir('images')
ids = []
for name in all_images:
image_data = open(f'images/{name}', 'rb').read()
image = MIMEImage(image_data)
cid = name.split(".")[0]
ids.append(cid)
image.add_header('Content-ID', f'<{cid}>')
email.attach(image)

send = ''
for cid in ids:
send += f'<img src="cid:{cid}" alt=""><br>'
text = MIMEText(send, 'html', 'utf-8')
email.attach(text)


connect.sendmail('QQ号@qq.com', 'QQ号@qq.com', email.as_string())
connect.quit()

作业

将指定文件夹中的所有文件作为附件发送

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import os
import smtplib
from email.mime.multipart import MIMEMultipart #邮件对象
from email.header import Header # 头部
from email.mime.text import MIMEText #文本的正文

# 登陆
connect = smtplib.SMTP_SSL('smtp.qq.com',465)
connect.login('QQ号@qq.com','授权码')

# 准备邮件

email = MIMEMultipart()

email['Subject'] = Header('作业批量发送附件','utf-8').encode()
email['To'] = 'QQ号@qq.com'
email['From'] = 'QQ号@qq.com <QQ号@qq.com>'

text = MIMEText('对方发送了大量附件,请注意查收','plain','utf-8')
email.attach(text)

# ===============批量文件附件================

all_fujian = os.listdir('fujian')
for name in all_fujian:
fujian_data = open(f'fujian/{name}', 'rb').read()
fujian = MIMEText('fujian_data','base64','utf-8')
cid = name.split(".")[0]
fujian['Content-Disposition'] = f'attachment; filename="{cid}.txt"'
email.attach(fujian)

# 发送邮件
connect.sendmail('QQ号@qq.com','QQ号@qq.com',email.as_string())
connect.quit()