使用python发送email——给vps备份加一层保障

自从6月份误删lib目录导致重装过后,我就给vps上每个网站都分别写了个备份脚本,把重要数据定时备份在某个目录中。备份是有了,但是需要我亲自上ftp把备份带下来。如果连续几个周太忙导致没取到备份又恰好vps出事了,那只能说呵呵了。由于我没有长期在线稳定的主机,所以不能把备份文件直接cp下来。昨天偶然想到可以通过发邮件解决这个问题,毕竟各大邮件服务器长期在线而且足够稳定。

需要的代码其实就20+行,调用一个smtp就完事了。直接把代码贴上:

#!/usr/bin/env python3  
#coding: utf-8

import smtplib, time
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.header import Header

sender = 'backup@hack0nair.me'    
receiver = '*******@qq.com'
smtp_server = 'smtp.exmail.qq.com'
smtp_port = 25
username = 'backup@hack0nair.me'
password = '*********'

server = 'hack0nair'

subject = date + '_' + server + ' database backup'    ##邮件标题
plain_text = server + 'db backup'    ##邮件正文
content = MIMEText(plain_text, 'plain')

msgRoot = MIMEMultipart('related')
msgRoot['Subject'] = subject

att = MIMEText(open('/home/backup/*******.sql', 'rb').read(), 'base64', 'utf-8')     ##附件位置
att["Content-Type"] = 'application/octet-stream'  
att["Content-Disposition"] = 'attachment; filename="*******.sql"'   ##附件显示名称
msgRoot.attach(att)
msgRoot.attach(content)

smtp = smtplib.SMTP()  
smtp.connect(smtp_server, smtp_port)  
smtp.login(username, password)  
smtp.sendmail(sender, receiver, msgRoot.as_string())  
smtp.quit()

然后在crontab里面加上一个计划,就可以等着收邮件了~

目前遇到的问题是,如果附件太大进程会自动kill掉,还没有找到原因。。。

« 返回