這里以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')