notes邮件正文显示不全_python实现一次性批量发邮件
生活随笔
收集整理的這篇文章主要介紹了
notes邮件正文显示不全_python实现一次性批量发邮件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在上次實現了批量修改文件名后(鏈接:https://zhuanlan.zhihu.com/p/133727520),又拿來了同事編寫的一次性批量發郵件小程序,小編每月向分公司發數據任務算是基本上實現了自動化
需要新建2個.py文件實現,一個auto_email_module.py創建自動發郵件模塊,一個auto _send_email.py執行自動發郵件。
auto_email_module.py代碼:
from email.utils import parseaddr, formataddr from email.header import Header from email.mime.multipart import MIMEMultipart from email.mime.application import MIMEApplication from email.mime.text import MIMEText import smtplibclass AutoEmail:def __init__(self):self.from_name = '默認發件人'self.from_mail = ''self.from_password = ''self.to_address = ''self.to_city = ''self.cc_address = ''self.subject = '默認主題'self.body = '%s默認正文'self.enclosure_names = '附件%s.txt'self.enclosure_affirm = '' # 若不添加附件則非空def __set_send(self):smt_set = smtplib.SMTP_SSL('smtp.exmail.qq.com', 465)try:smt_set.login(self.from_mail, self.from_password)except:# print('賬號或密碼錯誤。')return '001'from_address = self.__format_address(self.from_name+'<'+self.from_mail)msg = MIMEMultipart()msg['Subject'] = self.subject % self.to_citymsg['From'] = from_addressmsg['Cc'] = self.__format_address(self.cc_address)msg['To'] = self.to_addressmsg.attach(MIMEText(self.body,'plain','utf-8'))if self.enclosure_affirm == '':try:for enclosure in self.enclosure_names.split(';'):try:enclosure_name = enclosure % self.to_cityexcept:enclosure_name = enclosureenclosure = MIMEApplication(open(enclosure_name, 'rb').read())enclosure.add_header('content-disposition', 'attachment', filename=('gbk', '', enclosure_name))msg.attach(enclosure)except:# print('未添加附件或附件設置有誤')return '002'smt_set.sendmail(from_address, self.to_address.split(',') + self.cc_address.split(','), msg.as_string())smt_set.quit()def send_email(self, to_addresses):if to_addresses == {}:print('請添加收件人')else:i = 1body = self.bodyfor city_name, addresses in to_addresses.items():self.to_city = city_nametry:self.body = body % self.to_cityexcept:print('郵件正文應包含%s來區分')returnself.to_address = self.__format_address(addresses)print('正在發送第%d封郵件,發向%s' % (i,self.to_city))key = self.__set_send()if key == '001':print('賬號或密碼錯誤。')breakelif key == '002':print('未添加附件或附件設置有誤')breakelse:print('發送成功')i += 1def __format_address(self, addr):addresses_str = ''for address in addr.split(';'):name, addr = parseaddr(address)if addresses_str == '':addresses_str = formataddr((Header(name, 'utf-8').encode(), addr))else:addresses_str = ','.join((formataddr((Header(name, 'utf-8').encode(), addr)), addresses_str))return addresses_strauto _send_email.py 代碼:
from auto_email_module import AutoEmailreceivers_dic = {'成都': '收件人A郵箱','綿陽': '收件人B郵箱','南京': '收件人C郵箱' }a = AutoEmail() a.from_name = '發件人' a.from_mail = '發件人郵箱地址' a.from_password = '發件人郵箱密碼' a.cc_address = '抄送人郵箱地址 'a.subject = '%s分公司3月數據' # 郵件主題,可不設置。默認顯示‘默認主題’a.body = '%s分公司:n' ' 附件為分公司3月份數據,請查收! n' 'n***此郵件由小程序分發***' # 郵件正文,%s必須,%s代表分公司名稱,可不設置,默認顯示‘%s默認正文’a.enclosure_names = '%s分公司.xlsx' # 附件名稱,默認添加附件發送a.enclosure_affirm = '' # 默認添加附件,若不添加附件則添加‘no’,否則將報錯a.send_email(receivers_dic) # 發送郵件done!
總結
以上是生活随笔為你收集整理的notes邮件正文显示不全_python实现一次性批量发邮件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网页底部的版权信息_Shopify底部的
- 下一篇: python webviewer爬虫_爬