python 發送郵件(收到的郵件要有發送方才能回復)
阿新 • • 發佈:2018-04-13
turn als password port 編碼格式 方法 n) multi 打開
Python使用SMTP(簡單郵件傳輸協議)發送郵件 普通文本郵件 普通文本郵件發送的實現,關鍵是要將MIMEText中_subtype設置為plain ## -*- coding: UTF-8 -*- import smtplib from email.mime.text import MIMEText#導入MIMEText類 from email import encoders from email.header import Header from email.utils import parseaddr, formataddr mail_host="smtp.163.com"#使用的郵箱的smtp服務器地址,這裏是163的smtp地址 mail_user=raw_input("你的163郵箱: ")#發送方郵箱 mail_pass=raw_input("郵箱授權碼: ") #授權碼 mail_postfix="163.com"#郵箱的後綴,網易就是163.com mail_from = raw_input("來自: ") #發送方昵稱 mail_sub = raw_input("郵件主題: ") #郵件主題 mail_content = raw_input("內容: ") def send_mail(sub,content): me=mail_from+"<"+mail_user+">" msg = MIMEText(content,‘plain‘,‘utf-8‘)#郵件正文,subtype(文本是plain),編碼格式 msg[‘Subject‘] = sub msg[‘From‘] = me to_list = map(None,raw_input("mail_to: ").split(" "))#可以群發 msg[‘To‘] = ",".join(to_list)#將收件人列表以‘,’分隔 try: server = smtplib.SMTP() server.connect(mail_host)#連接服務器 server.login(mail_user,mail_pass)#登錄操作 server.sendmail(me, to_list, msg.as_string()) server.close() return True except Exception, e:#捕捉異常,並將異常對象輸出 print str(e) return False if send_mail(mail_sub , mail_content): #郵件主題和郵件內容 print "done!" else: print "failed!" MIME(Multipurpose Internet Mail Extensions)多用途互聯網郵件擴展類型。是設定某種擴展名的文件用一種應用程序來打開的方式類型,當該擴展名文件被訪問的時候,瀏覽器會自動使用指定應用程序來打開。多用於指定一些客戶端自定義的文件名,以及一些媒體文件打開方式。 它是一個互聯網標準,擴展了電子郵件標準,使其能夠支持: 非ASCII字符文本;非文本格式附件(二進制、聲音、圖像等);由多部分(multiple parts)組成的消息體;包含非ASCII字符的頭信息(Header information)。 這個標準被定義在RFC 2045、RFC 2046、RFC 2047、RFC 2048、RFC 2049等RFC中。 MIME改善了由RFC 822轉變而來的RFC 2822,這些舊標準規定電子郵件標準並不允許在郵件消息中使用7位ASCII字符集以外的字符。正因如此,一些非英語字符消息和二進制文件,圖像,聲音等非文字消息原本都不能在電子郵件中傳輸(MIME可以)。MIME規定了用於表示各種各樣的數據類型的符號化方法。 此外,在萬維網中使用的HTTP協議中也使用了MIME的框架,標準被擴展為互聯網媒體類型。
import smtplib from email.mime.text import MIMEText #用來格式化郵件地址 from email.header import Header from email.utils import parseaddr, formataddr msg = MIMEText(‘別人的容忍不是讓你踐踏的!!‘, ‘plain‘, ‘utf-8‘) # 輸入Email地址和口令: from_addr = raw_input(‘From(163郵箱): ‘) #這裏的密碼一定是授權碼,163郵箱原始密碼不行。 password = raw_input(‘授權碼: ‘) # 輸入SMTP服務器地址:這裏我們用smtp.163.com #smtp_server = raw_input(‘SMTP server: ‘) smtp_server = "smtp.163.com" # 輸入收件人地址: to_addr = raw_input(‘To: ‘) def _format_addr(s): name, addr = parseaddr(s)#這個函數會解析出姓名和郵箱地址 return formataddr(( Header(name, ‘utf-8‘).encode(), addr.encode(‘utf-8‘) if isinstance(addr, unicode) else addr)) def send_mail(): #設置發件人,收件人姓名和郵件主題 msg[‘From‘] = _format_addr(u‘joker <%s>‘ % from_addr) msg[‘To‘] = _format_addr(u‘朋友 <%s>‘ % to_addr) msg[‘Subject‘] = Header(u‘測試郵件‘, ‘utf-8‘).encode() server = smtplib.SMTP(smtp_server, 25) # SMTP協議默認端口是25 #server.set_debuglevel(1)#打印出和SMTP服務器交互的所有信息 server.login(from_addr, password)#登錄服務器 #發送郵件,這裏第二個參數是個列表,可以有多個收件人 #郵件正文是一個str,as_string()把MIMEText對象變成str server.sendmail(from_addr, [to_addr], msg.as_string()) server.quit() return True if send_mail(): print "done!"
python 發送郵件(收到的郵件要有發送方才能回復)