应用运维日常工作中需要对应用系统的业务情况制定每日业务交易报表,可通过crontab配置定时执行python发送邮件脚本获取交易报表,以下分享两个脚本,一个不带附件的,一个带附件。
一、不带附件
#coding: utf-8
import smtplib
from email.header import Header
from email.mime.text import MIMEText
# 第三方 SMTP 服务
mail_host = "smtp.163.com" # SMTP服务器
mail_user = "uprick@163.com" # 用户名
mail_pass = "adhilahwd " # 授权密码,非登录密码
sender = '11111@163.com' # 发件人邮箱(最好写全, 不然会失败)
receivers = ['22222@163.com'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
content = '今日报表,系统成功率为100%,业务成功率为98.63%'
title = '今日业务系统报表 # 邮件主题
def sendEmail():
message = MIMEText(content, 'plain', 'utf-8') # 内容, 格式, 编码
message['From'] = "{}".format(sender)
message['To'] = ",".join(receivers)
message['Subject'] = title
try:
smtpObj = smtplib.SMTP_SSL(mail_host, 465) # 启用SSL发信, 端口一般是465
smtpObj.login(mail_user, mail_pass) # 登录验证
smtpObj.sendmail(sender, receivers, message.as_string()) # 发送
print("mail has been send successfully.")
except smtplib.SMTPException as e:
print(e)
def send_email2(SMTP_host, from_account, from_passwd, to_account, subject, content):
email_client = smtplib.SMTP(SMTP_host)
email_client.login(from_account, from_passwd)
# create msg
msg = MIMEText(content, 'plain', 'utf-8')
msg['Subject'] = Header(subject, 'utf-8') # subject
msg['From'] = from_account
msg['To'] = to_account
email_client.sendmail(from_account, to_account, msg.as_string())
email_client.quit()
if __name__ == '__main__':
sendEmail()
# receiver = '***'
# send_email2(mail_host, mail_user, mail_pass, receiver, title, content)
执行脚本
结果如下图
二、带附件
#coding: utf-8
import time
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
ISOTIMEFORMAT='%Y%m%d'
def sentemail():
caodate=str(time.strftime(ISOTIMEFORMAT, time.localtime()))
host = 'smtp.163.com' # 设置发件服务器地址
port = 465 # 设置发件服务器端口号。注意,这里有SSL和非SSL两种形式
sender = '111111@163.com' # 设置发件邮箱
pwd = 'adadajd' # 设置发件邮箱的密码,qq邮箱的授权码,等会登陆会用到
receiver0 = '22222@qq.com' # 设置邮件接收人
receiver1 = '11111@163.com'
body = '<h1>'+caodate+'</h1><p>交易报表</p>' #发送文件的内容
# 设置邮件正文,这里是支持HTML的
msg = MIMEText(body, 'html') # 设置正文为符合邮件格式的HTML内容
message = MIMEMultipart()
message['subject'] = caodate + '交易报表' # 设置邮件标题
message['from'] = sender # 设置发送人
message['to'] = receiver0 # 设置接收人
message['to'] = receiver1
message.attach(msg)
filename='tmp.txt' # 构造附件1,传送当前目录下的 filename 文件
att1 = MIMEText(open(filename, 'rb').read(), 'base64', 'utf-8')
att1["Content-Type"] = 'application/octet-stream' # 注意这里是个坑,之前没有这样写的话发送文件就会变成bin格式的
att1.add_header('Content-Disposition', 'attachment', filename='tmp.txt')
# att1["Content-Disposition"] = 'attachment; filename="'+filename+'"' # bin格式
message.attach(att1)
try:
s = smtplib.SMTP_SSL(host, port) # 注意!如果是使用SSL端口,这里就要改为SMTP_SSL
s.login(sender, pwd) # 登陆邮箱
s.sendmail(sender, receiver0, message.as_string())# 发送邮件!
print ('邮件发送成功')
except smtplib.SMTPException as e:
print(e)
print ('邮件发送失败')
if __name__ == '__main__':
sentemail()
结果如下图
技术小白一枚,脚本都是从网上学习而来的,很多不能用,这两个是我学习认为有用的;如有侵犯请联系删除。