import smtplib
from email.mime.text import MIMEText
#文字
from email.mime.image import MIMEImage
#图片
from email.mime.multipart import MIMEMultipart
#多类型
from email.header import Header
#文件主题
'''请你按住ctrl同时点击mime,你会看到一个名为init.py的空文件,这说明 email是其实是一个“包”。当然,并不是“包治百病”的那个“包”。
这就要谈到“模块”和“包”的区别了,模块(module)一般是一个文件,而包(package)是一个目录,一个包中可以包含很多个模块,可以说包是“模块打包”组成的。
但为什么看到那个空文件,就能知道email是包呢?这是因为Python中的包都必须默认包含一个init.py的文件。
init.py控制着包的导入行为。假如这个文件为空,那么我们仅仅导入包的话,就什么都做不了。所以直接import email是行不通的。
'''
text='''Python是一种解释型脚本语言,可以应用于以下领域:
Web 和 Internet开发
科学计算和统计
教育
桌面界面开发
软件开发
后端开发'''

msg=MIMEText(text,'plain','utf-8')
# msg:文本内容,可自定义
# type:文本类型,默认为plain(纯文本)
# chartset:文本编码,中文为“utf-8”

from_addr='1076664983@qq.com'
to_addr='598100046@qq.com'

msg['From'] = Header(from_addr)#括号里的内容可以自定义
msg['To'] = Header(to_addr)#括号里的内容可以自定义
msg['Subject'] = Header('python test')#括号里的内容可以自定义
#群发
'''
群发方法一
to_addrs = ['598100046@qq.com','960930859@qq.com']#群发邮件
msg['to'] = Header(",".join(to_addrs))
因为header只能接收字符串和字节,而不能是列表,所以一用join函数,它的作用就是用引号中的符号,把字符串连起来
群发方法二while
to_addrs = []
while True:
    a=input('请输入收件人邮箱:')
    #输入收件人邮箱
    to_addrs.append(a)
    #写入列表
    b=input('是否继续输入,n退出,任意键继续:')
    #询问是否继续输入
    if b == 'n':
        break
msg['to'] = Header(",".join(to_addrs))
因为不确定发多少个,所以用while来输入邮箱地址

第三种方式CSV
import csv
to_addrs=[]
with open(('C:\\Users\\Administrator\\Desktop\\text\\xxx.csv','r') as f):
a=csv.read(f)
for line in a:
to_addrs.append(line)

msg['to'] = Header(",".join(to_addrs))
'''

username = '1076664983@qq.com'
password = 'tdwkfcienqltjhjc'
#username:登录邮箱的用户名
#password:登录密码/授权码

server = smtplib.SMTP_SSL('smtp.qq.com')
#这里如果写成server = smtplib.SMTP_SSL()会报错
#ValueError: server_hostname cannot be an empty string or start with a leading dot.
#python 3.7 修改了 ssl.py 导致了 smtplib.SMTP_SSL 的问题,如果按照原来的会错
#如果端口是用SSL加密,请这样写代码。其中server是变量名
#server.starttls()企业邮箱加一句,不然报错
server.connect('smtp.qq.com', 465)
#如果出现编码错误UnicodeDecodeError,你可以这样写:server.connect('smtp.qq.com', 465,'utf-8')
#如果你打算用QQ邮箱自动发邮件,请保存好这个授权码。在你使用SMTP服务登录邮箱时,要输入这个授权码作为密码登录,而【不是】你的邮箱登录密码。

#登陆
server.login(username, password)



server.sendmail(from_addr, to_addr, msg.as_string())
#from_addr:邮件发送地址,就是上面的username
#to_addr:邮件收件人地址
#msg.as_string():为一个字符串类型

server.quit()
#退出服务器,结束SMTP会话