自动发邮件脚本

时间:2022-08-19 06:04:55

在内网内连接服务器经常需要知道服务器的ip地址,那么有没有办法在开机的时候自动发邮件告诉我们呢?答案是肯定的。
系统 ubantu16.04
思路:利用系统初始化时启动的脚本执行一个发送邮件的python脚本

查阅资料可以知道,ubantu16.04在启动时,会执行一个在/etc/rc.local的文件,那么我们可以在该文件编写命令运行python脚本,就可以达到开机发送邮件给自己的目的了。由于不同系统开机执行的文件可能不同,本人就是在自己的机子上修改rc.local文件就可以了,但应用服务器上死活不发给我,具体就自己调试了。下面关注python脚本。

安装smtplib包,直接在你默认环境下conda install 或pip install 就可以了。下面是代码:

# -*- coding:utf-8 -*-

import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
import re
import os

#获取ip信息
ifconfig_output=os.popen('ifconfig').read()
#提取内网ip地址,这里按我自己的信息结构提取,具体自己再编写正则
pat=re.compile(r'inet addr:[0-9]{1,3}.{1}[0-9]{1,3}.{1}[0-9]{1,3}.{1}[0-9]{1,3}')
match=pat.findall(ifconfig_output)
ip=match[1]

try:
    sender='发送邮件的帐号'
    sender_password='发送邮件帐号的密码'
    receiver=['目标帐号',]

    #信息的主体内容
    msg=MIMEText(ip,'plain','utf-8')
    #发送者信息
    msg['From']=formataddr(['sender',sender])
    #邮件的主题
    msg['Subject'] = '服务器ip地址'

    #连接服务器
    server = smtplib.SMTP_SSL("你使用的邮件帐号的smtp服务器", 465)
    server.login(sender, sender_password)
    server.sendmail(sender, receiver, msg.as_string())
    server.quit()
except:
    print ('发送失败!!!')

本机把这个python脚本命名为send_email.py,放到/etc/下,再在/etc/rc.local的exit 0前加上1行:

python /etc/send_email.py !!!注意执行文件必须使用绝对路径

保存,关机测试即可