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会话
python发邮件,群发邮件
最新推荐文章于 2024-03-21 16:56:22 发布