很久都没有更新博客了,是半年时间作了1个创业项目。失败后总结宝宝我仍是老老实实打工混吃还债吧。 由于长时间作数据运营工做,报表每天见真的很烦。就想一些常规数据软件本身发算了。因而有了这个研究。html
就用python3作的一个简单的自动发送脚本。定时发送邮件,还得写一个数据获取的心跳,由于是多个数据源。还有一个重要的东西是plt+pillow绘制数据仪表盘导出放到网站上,感受偷懒技术都要上天了!python
本文主要是python发邮件的!测试163,126,qq,阿里邮件推送,均可以用。app
#coding=utf-8 import smtplib import email from email.mime.text import MIMEText #html格式邮件 from email.mime.multipart import MIMEMultipart #带图片格式邮件 from email.mime.image import MIMEImage #带图片格式邮件 # from email.mime.base import MIMEBase # from email import encoders # from email.mime.application import MIMEApplication from email.header import Header # 发件人地址,经过控制台建立的发件人地址 username = 'service@nigaea.com' # 发件人密码,经过控制台建立的发件人密码 password = '*****' # 自定义的回复地址 replyto = '765854380@qq.com' # 收件人地址或是地址列表,支持多个收件人,最多30个 #rcptto = ['***', '***'] rcptto = '******' # 构建alternative结构 msg = MIMEMultipart('alternative') msg['Subject'] = Header('自定义信件主题', 'utf-8') msg['From'] = '%s <%s>' % (Header('自定义发信昵称','utf-8'), username) msg['Reply-to'] = replyto msg['Message-id'] = email.utils.make_msgid() msg['Date'] = email.utils.formatdate() # 构建alternative的text/plain部分 textplain = "hello world!" textplain = MIMEText('自定义TEXT纯文本部分','plain','utf-8') msg.attach(textplain) # 构建alternative的text/html部分 # texthtml = MIMEText('自定义HTML超文本部分', _subtype='html', _charset='UTF-8') # msg.attach(texthtml) # 带附件的邮件MIMEApplication # filename = ['简历.pdf','副本.pdf'] # fp = open(filename, 'rb') # attachfile = MIMEApplication(fp.read()) # fp.close() # attachfile.add_header('Content-Disposition', 'attachment', filename=filename) # msg.attach(attachfile) # 带多个附件的邮件MIMEApplication # filename = ['图片.pdf','副本.pdf'] # for tmp in filename: # fp = open(tmp, 'rb') # attachfile = MIMEApplication(fp.read()) # fp.close() # attachfile.add_header('Content-Disposition', 'attachment', filename=tmp) # msg.attach(attachfile) #带附件的邮件MIMEBase # filename = '图片.pdf' # attachfile = MIMEBase('application', 'octet-stream') # attachfile.set_payload(open(filename, 'rb').read()) # attachfile.add_header('Content-Disposition', 'attachment', filename=('utf-8', '', filename) ) # encoders.encode_base64(attachfile) # msg.attach(attachfile) # 发送邮件 try: client = smtplib.SMTP() #python 2.7以上版本,若须要使用SSL,能够这样建立client #client = smtplib.SMTP_SSL() #SMTP普通端口为25或80 client.connect('smtpdm.aliyun.com', 25) #开启DEBUG模式 # client.set_debuglevel(0) client.login(username, password) #发件人和认证地址必须一致 #备注:若想取到DATA命令返回值,可参考smtplib的sendmaili封装方法: # 使用SMTP.mail/SMTP.rcpt/SMTP.data方法 client.sendmail(username, rcptto, msg.as_string()) client.quit() print('email send success!') except smtplib.SMTPConnectError as e: print('邮件发送失败,链接失败:', e.smtp_code, e.smtp_error) except smtplib.SMTPAuthenticationError as e: print('邮件发送失败,认证错误:', e.smtp_code, e.smtp_error) except smtplib.SMTPSenderRefused as e: print('邮件发送失败,发件人被拒绝:', e.smtp_code, e.smtp_error) except smtplib.SMTPRecipientsRefused as e: print('邮件发送失败,收件人被拒绝:', e.smtp_code, e.smtp_error) except smtplib.SMTPDataError as e: print('邮件发送失败,数据接收拒绝:', e.smtp_code, e.smtp_error) except smtplib.SMTPException as e: print('邮件发送失败, ', e.message) except Exception as e: print('邮件发送异常, ', str(e))
这个是借鉴了阿里云邮件推送服务的实例,感受几乎已经很好解决所需的问题。含ssl的解决方式、多个附件的、带图片的、html格式的,邮件错误类型等。能够后续自行发挥了。测试
做为脚本测试的化上面就已经够了,但是要天天更新数据自行发邮件还须要更多操做。网上搜索了一个很不错的类的写法,能够参考一下:网站
import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.base import MIMEBase from email import encoders class mailsender(object): _from = None _attachments = [] def __init__(self, smtpsvr, port): self.smtp = smtplib.SMTP() print("connecting....") self.smtp.connect(smtpsvr, port) print("connected!") def login(self, user, pwd): self._from = user print("login ...") self.smtp.login(user, pwd) def add_attachment(self, filename): att = MIMEBase('application', 'octet-stream') att.set_payload(open(filename,'rb').read()) att.add_header('Content-Disposition', 'attachment', filename = ('gbk','',filename)) encoders.encode_base64(att) self._attachments.append(att) def send(self, subject, content, to_addr): msg = MIMEMultipart('alternative') contents = MIMEText(content, 'html', _charset ='utf-8') msg['subject'] = subject msg['from'] = self._from msg['to'] = to_addr for att in self._attachments: msg.attach(att) msg.attach(contents) try: self.smtp.sendmail(self._from, to_addr, msg.as_string()) return True except Exception as e: print(str(e)) return False def close(self): self.smtp.quit print("logout!") mail = mailsender('smtp.163.com','25') mail.login('nigaea@163.com','******') mail.add_attachment('简.pdf') mail.send('hello test','试','buwangyouxil@163.com') mail.close()