这里以QQ邮箱为例子,显示步骤
打开邮箱依次点击--设置--账户,往下翻找到SMTP服务,点击打开即可,之后你会获得一串授权码,将它保存记录好,之后会用到
首先我们发一条简单邮件
import smtplib from email.mime.text import MIMEText sender = '#########@qq.com' receiver ='##########@qq.com' psw = '############'#你的授权码 content = "hey what's up man"#你的邮件内容 msg = MIMEText(content)#内容 msg['From'] = 'who knows'#发件人,真实发件人还是可以看到 msg['Subject'] = 'just a test'#邮件主体,标题 msg['To'] = receiver#接受人 try: server = smtplib.SMTP_SSL('smtp.qq.com',465)#连接QQ邮箱的smtp服务器,和对应端口 server.login(sender,psw)#登入你的账号 server.sendmail(sender,receiver,msg.as_string())#从谁发送给谁,内容是什么 server.quit() print("send already") except: print("fail")
你不写发件人就会显示出真实发送邮箱,写了就不会在预览中显示,但是点进去依旧看的到
同时也可以编写发送HTTP邮件
import smtplib from email.mime.text import MIMEText sender = '######@qq.com' receiver1 ='#########@qq.com' psw = '##########' content = '<html><body><h1>Hello World</h1></body></html>' msg = MIMEText(content,'html','utf-8') msg['From'] = 'who knows' msg['To'] = receiver1 msg['Subject'] = 'whatever' try: s = smtplib.SMTP_SSL('smtp.qq.com',465) s.login(sender,psw) s.sendmail(sender,receiver1,msg.as_string())#以string发送 except: pass
将一个TXT内容发送给多个邮箱
import smtplib from email.mime.text import MIMEText sender = '########@qq.com' receiver1 ='#########@qq.com' receiver2 = '########@qq.com' psw = '##########' with open('TXT.txt','r' ,encoding='utf-8') as f: content = f.read() print(content) msg = MIMEText(content) msg['From'] = 'who knows' msg['Subject'] = 'just a test' try: server = smtplib.SMTP_SSL('smtp.qq.com',465) server.login(sender,psw) server.sendmail(sender,[receiver1,receiver2],msg.as_string())#我们将receiver变为一个列表即可实现向多个对象发送 server.quit() print("send already") except: print("fail")
发送带附件的邮件
import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.image import MIMEImage from email.mime.application import MIMEApplication sender = '######@qq.com' receiver1 ='#######@qq.com' psw = '#########' content = 'this is a email with multipart' msg = MIMEText(content,'html','utf-8') msg['From'] = 'who knows' msg['To'] = receiver1 msg['Subject'] = 'whatever' #发送图片附件 img = MIMEImage(open('dog.jpg','rb').read()) img.add_header('Content-Disposition', 'attachment', filename='dog.jpg') #发送word附件 word = MIMEApplication(open('计算机网络.rtf','rb').read()) word.add_header('Content-Disposition', 'attachment', filename='计算机网络.rtf') #发送一个TXT TXT = MIMEApplication(open('TXT.txt','rb').read()) TXT.add_header('Content-Disposition', 'attachment', filename='TXT.txt') #添加一个video #但是接受到的时候文件是.bin后缀名,需要手动改成MP4后缀 # VIDEO = MIMEApplication(open('video.mp4','rb').read()) # VIDEO.add_header("Conten-Disposition",'attachment',filename = 'video.mp4') multipart = MIMEMultipart() multipart.attach(msg) multipart.attach(img) multipart.attach(word) multipart.attach(TXT) # multipart.attach(VIDEO) try: s = smtplib.SMTP_SSL('smtp.qq.com',465) s.login(sender,psw) s.sendmail(sender,receiver1,multipart.as_bytes()) print('succeed') except: print('erro')
将图片放到正文中
#图片嵌入 from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.image import MIMEImage import smtplib subject = 'A test with img' sender = '#######@qq.com' receiver = '#######@qq.com' psw = '#########' msg = MIMEMultipart() msg['Subject'] = subject msg['From'] = sender msg['To'] = receiver content = MIMEText('<html><body><img src="cid:img" /></body></html>','html')#这里的cid:img代表引用那个ID为img的图片,当你有多张图片时命名多张 msg.attach(content) img = MIMEImage(open('dog.jpg','rb').read()) img.add_header('Content-ID','img')#将ID命名为img msg.attach(img) try: s = smtplib.SMTP_SSL('smtp.qq.com',465) s.login(sender,psw) s.sendmail(sender,receiver,msg.as_string())#我测试的as_string和as_bytes结果是一样的 print('succeed') except: print('erro')