python发送邮件,各邮件服务商都有smtp服务器,但是注册完邮箱后呢,需要去开启pop3/smtp服务。国内的邮箱基本上都需要第三方登录授权码,在python代码中,登录密码就要替换成授权码。国人的东西,什么都是管控的,因为咱中国人,都太聪明而且无节制。我这里用的是qq邮箱。
1,纯文本格式:
1 ''' 2 #利用python发送普通的文字邮件 3 #内建库 4 smtplib,发送邮件的 5 email处理文字的 6 ''' 7 import smtplib 8 from smtplib import SMTP_SSL 9 from email.mime.text import MIMEText #处理邮件文本 10 from email.mime.multipart import MIMEMultipart #构造构建主体 11 from email.header import Header #处理邮件头 12 13 #定义登录信息 14 server = 'smtp.qq.com' #smtp服务器地址 15 user = 'xxxx@qq.com' #登录smtp服务器的用户名 16 pwd = '授权码字符串' #这里不要用邮箱登录密码,会出现验证错误,要用授权码 17 18 #定义发件人和收件人 19 sender = 'xxx@qq.com' #发件人 20 receiver = 'xxx@outlook.com' #收件人 21 22 #定义邮件主题和内容 23 title = 'Python测试邮件' 24 content = '这是一封来自python的测试邮件,详情访问https://www.python.org' 25 26 #开始构造邮件 27 msg = MIMEMultipart() #构造邮件 28 msg['Subject'] = Header(title, 'utf-8') #邮件主题 29 msg['From'] = sender #发件人 30 msg['To'] = receiver #收件人 31 msg.attach(MIMEText(content, 'plain', 'utf-8')) #邮件正文,以plain格式发送,我习惯叫打包内容 32 33 #开始登录邮箱 34 smtp = SMTP_SSL(server) #以ssl的方式登录邮箱 35 smtp.login(user, pwd) #开始登录 36 smtp.sendmail(sender, receiver, msg.as_string()) #开始发送邮件 37 smtp.quit() #退出邮件服务器
2,HTML格式:
1 ''' 2 #利用python发送html格式的邮件 3 #内建库 4 smtplib,发送邮件的 5 email处理文字的 6 ''' 7 import smtplib 8 from smtplib import SMTP_SSL 9 from email.mime.text import MIMEText #处理邮件文本 10 from email.mime.multipart import MIMEMultipart #构造构建主体 11 from email.header import Header #处理邮件头 12 13 #定义登录信息 14 server = 'smtp.qq.com' 15 user = '958316676@qq.com' 16 pwd = '授权码字符串' 17 18 #定义发件人和收件人 19 sender = '958316676@qq.com' 20 receiver = 'vipdentfy@outlook.com' 21 22 #定义邮件标题和内容 23 title = '来自Python的测试邮件' 24 content = '你好,<p>这是来自python的测试邮件.</p>详情请访问:<a href="https://www.python.org">Python官方</a>' 25 26 #开始构造邮件 27 msg = MIMEMultipart() 28 msg['Subject'] = Header(title, 'utf-8') 29 msg['From'] = sender 30 msg['To'] = receiver 31 32 #以html格式构造邮件内容 33 msg.attach(MIMEText(content, 'html', 'utf-8')) 34 35 #开始尝试发送 36 try: 37 smtp = SMTP_SSL(server) #以ssl的方式登录邮箱服务器 38 smtp.set_debuglevel(1) #调试信息 39 smtp.ehlo(server) #向服务器打招呼,类似gmail就要用到这个 40 smtp.login(user, pwd) #登录邮箱 41 smtp.sendmail(sender, receiver, msg.as_string()) #发送邮件 42 smtp.quit() 43 print('发送邮件成功') 44 #开始捕获异常 45 except smtplib.SMTPException: 46 print('邮件发送不成功,请调试程序后再试。')
3,发送带附件的邮件:
1 ''' 2 #利用python发送带附件的邮件 3 #内建库 4 smtplib,发送邮件的 5 email处理文字的 6 ''' 7 import smtplib 8 from smtplib import SMTP_SSL 9 from email.mime.text import MIMEText #处理邮件文本 10 from email.mime.multipart import MIMEMultipart #构造构建主体 11 from email.header import Header #处理邮件头 12 from email.mime.application import MIMEApplication #处理附件的库 13 14 #定义smtp服务器信息 15 server = 'smtp.qq.com' 16 user = '958316676@qq.com' 17 pwd = '授权码字符串' 18 19 #定义收件人和发件人 20 sender = '958316676@qq.com' 21 receiver = 'vipdentfy@outlook.com' 22 23 #定义邮件标题和内容 24 title = '来自Python的测试邮件 - 带附件' 25 content = '你好,<p>这是一封来自python带附件的测试邮件.</p><p>详情请登录官网查看:<a href="https://www.python.org">Python官网</a></p>' 26 27 #构造邮件开始 28 msg = MIMEMultipart() #邮件主体 29 msg['Subject'] = Header(title, 'utf-8') #主题 30 msg['From'] = sender #收件人 31 msg['To'] = receiver #发件人 32 msg.attach(MIMEText(content, 'html', 'utf-8')) 33 34 #找到附件位置以二进制只读方式打开附件 35 attachment = MIMEApplication(open('test.xlsx','rb').read()) #以二进制只读方式打开对应位置的福建 36 #给附件重命名,三个参数,content-dispostion是内容设置,attachment表示附件,filename表示要重新命名的文件名 37 attachment.add_header('Content-Disposition', 'attchament', filename='我是附件.xlsx') 38 #添加到邮件主体 39 msg.attach(attachment) 40 41 #开始尝试登录邮箱并发送 42 try: 43 smtp = SMTP_SSL(server) #以ssl方式登录 44 smtp.set_debuglevel(0) #关闭调试信息 45 smtp.ehlo(server) #向服务器打招呼 46 smtp.login(user,pwd) #登录 47 smtp.sendmail(sender, receiver, msg.as_string()) #发送 48 smtp.quit() #退出邮箱 49 print('恭喜你,邮件发送成功。') 50 #开始捕获异常 51 except smtplib.SMTPException: 52 print('邮件发送失败,请调试程序后再试。')