Ubuntu 系统启动时发送IP到指定邮箱

新建发送邮件的脚本

#!/usr/bin/python3

import socket
import os
import json
import smtplib
from email.header import Header
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from time import asctime


def send_an_email(email_content): # email_content是一个字符串
	mail_host = "smtp.qiye.163.com" 
	mail_user = "xxxxx@xxxx.com" # 邮箱地址
	mail_auth_code = "passwod" # 邮箱密码
	mail_sender = mail_user # 用mail_user 作为发送人
	mail_receivers = "xxxxx@xxx.com" # 收件人邮箱地址	
	mail_msg = "{} at {}".format(email_content, asctime())
	message = MIMEText(mail_msg, 'html', 'utf-8')
	message['From'] = Header(mail_sender)  # 寄件人
	message['Subject'] = Header("IP地址")  # 邮件标题
	print("message is {}".format(message.as_string())) # debug用
	smtp = smtplib.SMTP_SSL(mail_host)
	smtp.connect(mail_host,465)

	smtp.login(mail_user, mail_auth_code) # 登陆
	smtp.sendmail(mail_sender, mail_receivers, message.as_string()) # 真正发送邮件就是这里

def get_temp_ip(current_ip):
    ip_json_path = "/home/warriorg/app/script/ip.json"
    if not os.path.exists(ip_json_path):
        print("No {}, dump it.".format(ip_json_path))
        with open(ip_json_path, 'w') as jo:
            json.dump(current_ip, jo)
            return True, current_ip

    else:
        with open(ip_json_path, 'r') as jo:
            origin_ip = json.load(jo)
        if origin_ip == current_ip:
            print("Current ip {} do not change, no need to send".format(current_ip))
            return False, current_ip
        else:
            print("The ip updated from {} to {}, update it.".format(origin_ip, current_ip))
            os.remove(ip_json_path)
            with open(ip_json_path, 'w') as jo:
                json.dump(current_ip, jo)
                return True, current_ip

def get_host_ip():
    """
    查询本机ip地址
    :return: ip
    """
    ip = ''
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.connect(('www.baidu.com', 80))
        ip = s.getsockname()[0]
    finally:
        s.close()
        return ip

def get_ip():
	global_ip = get_host_ip()
	whether_to_send, send_ip = get_temp_ip(global_ip)
	send_ip = json.dumps(send_ip)
	return whether_to_send, send_ip

if __name__ == "__main__":
    whether_to_send, global_ips = get_ip()
    if whether_to_send:
        send_an_email(global_ips)
    exit(0)
    # else:
        # print("wait and no send")

新建启动服务

/lib/systemd/system/sendip.service

[Unit]
Description=startup send ip to email
After=systemd-networkd-wait-online.service
Wants=systemd-resolved.service

[Service]
ExecStart=/home/users/app/script/send_ip_to_mailbox.py
Type=oneshot
Restart=on-failure
RestartSec=30
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

让 SystemD 重新加载配置文件,然后设置开机启动

sudo systemctl daemon-reload
sudo systemctl enable sendip.service
上一篇:【chrome插件】Auto Refresh Plus 自动刷新页面


下一篇:帆软报表单选,多选只有一行的情况内容会靠上显示