1.代碼說明
在實際的使用中,有些郵件我們希望收件人可以看到還有那些人可以收到此郵件,但有些郵件相反,例如含有一些較敏感的信息時,希望收件人都是隱藏的。一般我們可以在郵件配置文件smtp_conig.py中設置,下面是為實現 隱藏 / 顯示 收件人而使用的不同配置。
Python 的運行環境:Python 2.7.5
2.隱藏收件人
#!/usr/bin/python # -*- coding: UTF-8 -*- import smtplib from email.mime.text import MIMEText from email.header import Header #郵件發送函數 def send_mail(message): # 第三方 SMTP 服務 mail_host = "mail.q1q2w1w2.com" # 設置服務器 mail_user = "OrderCWS_Inform@q1q2w1w2.com" # 用戶名 mail_pass = "PWD" # 口令 sender = 'OrderCWS_Inform@q1q2w1w2.com' receivers = ['收件人1@q1q2w1w2.com','收件人2@q1q2w1w2.com'] # 接收郵件 try: smtpObj = smtplib.SMTP() smtpObj.connect(mail_host, 25) # 25 為 SMTP 端口號 smtpObj.login(mail_user, mail_pass) smtpObj.sendmail(sender, receivers, message.as_string()) print "郵件發送成功" except smtplib.SMTPException: print "Error: 無法發送郵件" return
3.顯示收件人
此份代碼是在上份代碼的基礎上完善的,新增的地方已用粗體字顯示。
#!/usr/bin/python # -*- coding: UTF-8 -*- import smtplib from email.mime.text import MIMEText from email.header import Header from email.utils import parseaddr from email.utils import formataddr def __format_addr(addr): # 解析郵件地址,以保證郵有別名可以顯示 alias_name, addr = parseaddr(addr) # 防止中文問題,進行轉碼處理,並格式化為str返回 return formataddr((Header(alias_name,charset="utf-8").encode(), addr.encode("uft-8") if isinstance(addr, unicode) else addr)) #郵件發送函數 def send_mail(message): # 第三方 SMTP 服務 mail_host = "mail.q1q2w1w2.com" # 設置服務器 mail_user = "OrderCWS_Inform@q1q2w1w2.com" # 用戶名 mail_pass = "PWD" # 口令 sender = 'OrderCWS_Inform@q1q2w1w2.com' receivers = ['收件人1@q1q2w1w2.com','收件人2@q1q2w1w2.com'] # 接收郵件 strTo = list() try: for a in receivers: strTo.append(__format_addr(a)) except Exception as e: # 沒有對a和toadd進行type判斷,出錯就直接還原 strTo = receivers # 發送HTML格式郵件 message['To'] = ','.join(strTo) # 這個一定要是一個str,不然會報錯“AttributeError: 'list' object has no attribute 'lstrip'” try: smtpObj = smtplib.SMTP() smtpObj.connect(mail_host, 25) # 25 為 SMTP 端口號 smtpObj.login(mail_user, mail_pass) smtpObj.sendmail(sender, receivers, message.as_string()) print "郵件發送成功" except smtplib.SMTPException: print "Error: 無法發送郵件" return
4.參考資料
python發送多人郵件沒有展示收件人問題的解決方法