树莓派开机自动发送邮件脚本

2023-05-16

开机联网后自动获取本机内网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):
    	# server酱微信推送 
        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(使用前将#替换为@)

树莓派开机自动发送邮件脚本 的相关文章

  • 如何安装ArchLinux

    本文基于ArchLinux xff08 https www archlinux org xff09 Current Release 2013 08 01的ISO写的安装教程 xff01 ISO下载地址 xff1a http mirrors
  • 从源码分析HashMap集合之属性(一)

    注 xff1a 笔者所使用的jdk为1 8 xff0c 因本人水平有限 xff0c 难免会有错误 xff0c 请批评指正 xff0c 弥补不足 xff0c 多谢 xff0c 另转载请注明出处 我们首先来看下一下HashMap类 public
  • 审批流程设计方案-介绍(一)

    10年有幸接触了HP的一套PAAS平台 xff0c 里面有一套关于工作流 审批流的设置模块 公司现在做的这个项目也有用到审批流 这中间磕磕碰碰的遇到不少问题 xff0c 但最后也小有收获 xff0c 趁着周末闲暇时间 xff0c 把一些细节
  • 怎么解压system.img文件

    system img是官方的刷机包镜像 也就是安卓手机的系统 所有apk文件都在system img里面 包括系统app文件 有时候精简误删了app 那么如果不重新刷机就没有办法恢复了吗 xff1f 错 xff01 只有把系统文件重新放回去
  • 五、二叉搜索树的第k个结点

    一 题目描述 给定一棵二叉搜索树 xff0c 请找出其中的第k小的结点 例如 xff0c xff08 5 xff0c 3 xff0c 7 xff0c 2 xff0c 4 xff0c 6 xff0c 8 xff09 中 xff0c 按结点数值
  • Manjaro下安装和美化i3wm,以及相关软件配置

    Manjaro下安装及美化i3wm 由于本人是在vmware workstation pro15下安装的Manjaro Xfce桌面 xff0c 所以可能与部分用户配置步骤和配置软件并不完全相同 xff0c 具体情况大家可以去Arch Wi
  • ubantu中apt-get安装的依赖全部打包

    最近在适配国产化系统 xff0c 其中有arm和x86的 xff0c 虽然是国产化系统 xff0c 其实只是Ubuntu的包装罢了 xff1b 好不容易将海光型号的适配完毕 xff0c 就要进行测试 xff0c 但是这些海光环境并没有进行总
  • ubuntu linux 配置PATH JAVA PATH(解决双击不能启动eclipse的问题)

    我是下载了jdk 放在 opt下 于是我在 etc bash bashrc里添加 xff1a export JAVA HOME 61 opt jdk1 7 0 06 export PATH 61 PATH opt jdk1 7 0 06 b
  • Linux vi/vim命令大全

    参考资料 xff1a https www runoob com linux linux vim html 1 什么是vi vim 所有的 Unix Like 系统都会内建 vi 文书编辑器 xff0c 其他的文书编辑器则不一定会存在 但是目
  • Linux中动态库(共享库)的制作与使用

    0 库的基本概念 见博客 xff1a Linux中静态库的制作与使用 0 1 动态库的工作原理 首先回忆一下静态库 xff0c 使用静态库 xff0c 在GCC进行链接时 xff0c 会把静态库中代码打包到可执行程序中 但是使用动态库 xf
  • Linux中的source命令(.命令)的用法

    参考 xff1a https blog csdn net LEON1741 article details 81944879 1 使用格式 其使用格式如下 xff0c 其中filename必须是可执行的脚本文件 span class tok
  • 一个简单的游戏源代码

    一个简单的游戏源代码 作者 xff1a 陈跃峰 出自 xff1a http blog csdn net mailbomb 实现一个简单的翻牌游戏 xff0c 每次最多翻开两个数字 xff0c 如果数字相同则消失 xff0c 否则两个数字不显
  • 数据库事务图解

    一 基本概念 xff08 from baidu xff09 数据库事务 Database Transaction xff0c 是指作为单个逻辑工作单元执行的一系列操作 xff0c 要么完全地执行 xff0c 要么完全地不执行 事务处理可以确
  • Java新手必读

    Java 新手必读 1 学习 Java 学什么 xff1f a Java 语法基础 xff1a 如基本数据类型 流程控制 数组等等 b 面向对象的概念 xff1a 理解类和对象的概念等等 c 开发工具 xff1a Jbuilder Ecli
  • Java编程那些事儿3——你适合学习程序设计吗?

    Java编程那些事儿3 你适合学习程序设计吗 xff1f 作者 xff1a 陈跃峰 出自 xff1a http blog csdn net mailbomb 程序设计是一个技术活 xff0c 所以不是适合所有的人 现在很多人听说程序设计人员
  • J2ME资源:各厂商SDK和模拟器下载地址

    现在支持 Java 的手机厂商很多 xff0c 现将常用的手机厂商 SDK 和下载地址说明一下 xff1a 1 Nokia Nokia 不愧为手机行业的老大 xff0c 对于 j2me 的支持也是一流的 xff0c 有专门的网站提供 SDK
  • 陈跃峰的个人简历

    简 历 基 本 信 息 姓 名 xff1a 陈跃峰性 别 xff1a 男 出生日期 xff1a 1980年01月23日居 住 地 xff1a 郑州市 工作年限 xff1a 五年以上 户 口 xff1a 河南 目前年薪 xff1a 8 10万
  • NokiaS40和S60开发平台1.0已知问题(翻译)

    NokiaS40 和 S60 开发平台 1 0 已知问题 翻译 作者 xff1a 陈跃峰 出自 xff1a http blog csdn net mailbomb 1 Nokia3300 不支 MMA 声音处理 类库 2 Image get
  • 自己动手清除Android系统中的不良程序

    自己动手清除Android系统中的不良程序 陈跃峰 2014 6 29 最近在使用我的Nexus7时 xff0c 总是经常莫名其妙的弹出一些广告弹窗 xff0c 还会自动下载一些应用程序 xff0c 还会在桌面上生成一个叫做 精彩应用 的图

随机推荐