导图社区 用python发一个邮件
综合整理鱼c论坛和风变编程两家教程
编辑于2020-04-06 23:28:18用python发一个邮件
V1.0 找到模块,给自己发一句话邮件
基础准备
【email】 是用来构建邮件内容的
【smtplib】 是用来发送邮件用的
import smtplib #导入smtplib模块 server = smtplib.SMTP() #简化调用的名称,SMTP即邮件发送的服务器通信协议 server.connect(host, port) #.connect()连接指定的服务器 #host :指定服务器的域名 #port : 端口,int, 默认为25 server.login(username, password) server.sendmail(sender, to_addr, msg.as_string()) #from_addr:邮件发送者地址。 #to_addr:邮件收件人地址。 #msg.as_string():为一个字符串类型 server.quit() #退出服务器,结束SMTP会话
成果&例子
【实例】 # smtplib 用于邮件的发信动作 import smtplib from email.mime.text import MIMEText # email 用于构建邮件内容 # 发信方的信息:发信邮箱,QQ 邮箱授权码 from_addr = 'zhuangshifu123@qq.com' password = input ('来吧,悄悄的输入授权码,别让别人看到') # 收信方邮箱 to_addr = 'zhuangshifu123@qq.com' # 发信服务器 smtp_server = 'smtp.qq.com' # 邮箱正文内容,第一个参数为内容,第二个参数为格式(plain 为纯文本),第三个参数为编码 msg = MIMEText(''' 这是我发给自己的第一封邮件, 也不知道该写点啥, 也不知道能不能发的出去, 那就先写这么几句吧 Send by python''','plain','utf-8') # 开启发信服务,这里没有使用加密传输 server = smtplib.SMTP(smtp_server) server.connect(smtp_server,587) # 登录发信邮箱 server.login(from_addr, password) # 发送邮件 server.sendmail(from_addr, to_addr, msg.as_string()) # 关闭服务器 server.quit()
V2.0 给自己发一封完整的邮件
丰富文件头
from email.header import Header msg['From'] = Header(from_addr) msg['To'] = Header(to_addr) msg['Subject'] = Header('python test')
丰富正文
# smtplib 用于邮件的发信动作 import smtplib from email.mime.text import MIMEText # email 用于构建邮件内容 from email.header import Header #下边放正文内容 neirong = ''' 测试内容: 1-优化了文件头 2-优化了文本显示 ''' # 发信方的信息:发信邮箱,QQ 邮箱授权码 from_addr = 'zhuangshifu123@qq.com' password = input ('来吧,悄悄的输入授权码,别让别人看到') # 收信方邮箱 to_addr = 'zhuangshifu123@qq.com' # 发信服务器 smtp_server = 'smtp.qq.com' # 邮箱正文内容,第一个参数为内容,第二个参数为格式(plain 为纯文本),第三个参数为编码 msg = MIMEText(neirong,'plain','utf-8') msg['From'] = Header('庄市府') msg['To'] = Header('''Dear somebody''') msg['Subject'] = Header('由市府通过Python自动发送') # 开启发信服务,这里使用的是加密传输 server = smtplib.SMTP(smtp_server) server.connect(smtp_server,587) # 登录发信邮箱 server.login(from_addr, password) # 发送邮件 server.sendmail(from_addr, to_addr, msg.as_string()) # 关闭服务器 server.quit()
V3.0 群发完整的邮件
列表变量
方法
to_addrs = ['1335360228@qq.com','zhuangshifu123@qq.com'] msg['to'] = Header(",".join(to_addrs)) #Header接受的第一个参数的数据类型必须要是字符串或者字节,列表不能解码。 #join()的用法是str.join(sequence),将列表的元素合并,直接使用逗号来连接。
实例
# smtplib 用于邮件的发信动作 import smtplib from email.mime.text import MIMEText # email 用于构建邮件内容 from email.header import Header # 用于构建邮件头 # 发信方的信息:发信邮箱,QQ邮箱授权码) from_addr = 'xxx@qq.com' password = '你的授权码数字' # 收信方邮箱 to_addrs = ['wufeng@qq.com','kaxi@qq.com'] # 发信服务器 smtp_server = 'smtp.qq.com' # 邮箱正文内容,第一个参数为内容,第二个参数为格式(plain 为纯文本),第三个参数为编码 text='''亲爱的学员,你好! 我是吴枫老师,能遇见你很开心。 希望学习Python对你不是一件困难的事情! 人生苦短,我用Python ''' msg = MIMEText(text,'plain','utf-8') # 邮件头信息 msg['From'] = Header(from_addr) msg['To'] = Header(",".join(to_addrs)) msg['Subject'] = Header('python test') # 开启发信服务,这里使用的是加密传输 server = smtplib.SMTP_SSL() server.connect(smtp_server,465) # 登录发信邮箱 server.login(from_addr, password) # 发送邮件 server.sendmail(from_addr, to_addr, msg.as_string()) # 关闭服务器 server.quit()
while循环
方法
#定义一个空列表to_addrs,用来存放收件人邮箱地址。输入邮箱地址的时候,地址会被追加写进列表。
实例
to_addrs = [] while True: a=input('请输入收件人邮箱:') #输入收件人邮箱 to_addrs.append(a) #写入列表 b=input('是否继续输入,n退出,任意键继续:') #询问是否继续输入 if b == 'n': break print(to_addrs)
调用CSV
方法
将收件人邮箱写入csv文件,在发邮件时读取csv文件,将邮箱地址写入csv模块的方法是write(),步骤是: 1.引入csv模块; 2.提供需要写入csv文件的数据; 3.建文件并写入。
【写入】 import csv #引用csv模块。 data = [['庄市府', '庄市府123@qq.com'],['市府', '1335360228@qq.com']] #待写入csv文件的内容 with open('to_addrs.csv', 'w', newline='') as f: writer = csv.writer(f) for row in data: writer.writerow(row)
【读取】 import csv #引用csv模块。 with open('to_addrs.csv', 'r') as f: reader = csv.reader(f) for row in reader: to_addrs=row[1]
实例
import smtplib # smtplib 用于邮件的发信动作 from email.mime.text import MIMEText # email 用于构建邮件内容 from email.header import Header # 用于构建邮件头 import csv # 引用csv模块,用于读取邮箱信息 # 发信方的信息:发信邮箱,QQ邮箱授权码 # 方便起见,你也可以直接赋值 from_addr = input('请输入登录邮箱:') password = input('请输入邮箱授权码:') # 发信服务器 smtp_server = 'smtp.qq.com' # 邮件内容 text='''亲爱的学员,你好! 我是吴枫老师,能遇见你很开心。 希望学习python对你不是一件困难的事情! 人生苦短,我用Python ''' # 待写入csv文件的收件人数据:人名+邮箱 # 记得替换成你要发送的名字和邮箱 data = [['wufeng ', 'wufeng@qq.com'],['kaxi', 'kaxi@qq.com']] # 写入收件人数据 with open('to_addrs.csv', 'w', newline='') as f: writer = csv.writer(f) for row in data: writer.writerow(row) # 读取收件人数据,并启动写信和发信流程 with open('to_addrs.csv', 'r') as f: reader = csv.reader(f) for row in reader: to_addrs=row[1] msg = MIMEText(text,'plain','utf-8') msg['From'] = Header(from_addr) msg['To'] = Header(to_addrs) msg['Subject'] = Header('python test') server = smtplib.SMTP_SSL() server.connect(smtp_server,465) server.login(from_addr, password) server.sendmail(from_addr, to_addrs, msg.as_string()) # 关闭服务器 server.quit()
debug
try: server.sendmail(from_addr, to_addrs, msg.as_string()) print('恭喜,发送成功') except: print('发送失败,请重试')