在内网内连接服务器经常需要知道服务器的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 !!!注意执行文件必须使用绝对路径
保存,关机测试即可