开机联网后自动获取本机内网IP,并通过邮件或者server酱发送自己的内网IP
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email import encoders
from email.utils import parseaddr, formataddr
import requests
import json, re, os, sys, time
class EmailSender(object):
def __init__(self, plain=""):
self.text = plain
self.info = self.get_info('info.json')
self.ip = self.get_ip()
self.message = MIMEText(self.text + '\n\n%s' % self.ip, 'plain', 'utf-8')
self.message['Subject'] = Header('Raspberry pi !', 'utf-8').encode()
self.message['From'] = self.format_addr(self.info['sender_email'])
self.message['To'] = self.format_addr(self.info['recivers'][0])
self.successflag = False
def format_addr(self, s: str):
name, addr = parseaddr(s)
return formataddr((Header(name, 'utf-8').encode(), addr))
def send(self):
trytime = 10
while trytime > 0:
try:
smtp = smtplib.SMTP()
smtp.connect(self.info['smtp_server_host'], self.info['smtp_port'])
smtp.login(self.info['login_name'], self.info['smtp_pass'])
smtp.sendmail(self.info['sender_email'], self.info['recivers'], self.message.as_string())
self.wechat_push()
break
except smtplib.SMTPException:
trytime -= 1
time.sleep(10)
finally:
smtp.quit()
def wechat_push(self):
requests.get('https://sc.ftqq.com/%s.send' % self.info['sckey'], params=dict(text='Raspberry Pi', desp=self.ip))
def get_info(self, fn: str) -> dict:
try:
if os.path.exists(fn) is True:
with open(fn, 'r', encoding='utf-8') as f:
return json.load(f)
else:
sys.exit(-1)
except IOError:
sys.exit(-1)
def get_ip(self) -> str:
f = os.popen('ifconfig | grep inet | grep broadcast').read().strip(' ')
ip = re.split(r'\s+', f)[1]
return ip
if __name__ == '__main__':
time.sleep(10)
sender = EmailSender()
sender.send()
发送时调用send()
方法,考虑到刚启动可能没有联网,默认会尝试发送10次,每次间隔10秒,直到发送成功或者尝试次数耗尽;get_ip()
方法有点那啥~最好找个更好的实现方法
附带的配置文件,和python脚本放在同一个目录下,命名为info.json
{
"smtp_server_host": "smtp服务器host",
"smtp_port": 25,
"name": "发信时显示的姓名",
"sender_email": "发送邮箱",
"login_name": "登录邮箱的用户名(不一定是邮箱本身~)",
"smtp_pass": "验证密码(如果是QQ邮箱有专门的验证码,不是QQ密码)",
"recivers": ["接收方,可以有多个"],
"sckey": "server酱的SCKEY,能推送到微信,可以注册一个~"
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)