树莓派上电发送IP地址到邮箱

创建python脚本文件 auto_send_email.py

#!/usr/bin/python3

import subprocess
import smtplib
from email.mime.text import MIMEText
import datetime
import time
import os

def check_ping():
    hostname = "www.baidu.com"
    response = os.system("ping -c 1 " + hostname)

    # and then check the response...
    if response == 0:
        pingstatus = True
    else:
        pingstatus = False

    return pingstatus

while True:
    if check_ping():
        break

    time.sleep(1)

# Change to your own account information
# Account Information
to            = 'xxxxx@163.com'  # Email to send to.
mail_user     = 'xxxxx@126.com' # Email to send from.
mail_password = ''          # 授权码
smtpserver    = smtplib.SMTP('smtp.126.com') # Server to use.

smtpserver.ehlo()                            # Says 'hello' to the server
smtpserver.starttls()                        # Start TLS encryption
smtpserver.ehlo()
smtpserver.login(mail_user, mail_password)   # Log in to server
today = datetime.date.today()                # Get current time/date

arg='ifconfig -a'                            # Linux command to retrieve ip addresses.
# Runs 'arg' in a 'hidden terminal'.
p=subprocess.Popen(arg, shell=True, stdout=subprocess.PIPE)
data = p.communicate()                       # Get data from 'p terminal'.
# print(data)

# get ip data
ip_lines = data[0].splitlines()
ips = ""
for ip in ip_lines:
    ips += ip.decode("utf-8") + "\n"


# Creates the text, subject, 'from', and 'to' of the message.
msg = MIMEText(ips)
msg['Subject'] = 'IPs For RaspberryPi Ubuntu  on %s' % today.strftime('%b %d %Y')
msg['From'] = mail_user
msg['To'] = to

# Sends the message
smtpserver.sendmail(mail_user, [to], msg.as_string())

# Closes the smtp server.
smtpserver.quit()

创建 /etc/rc.local 文件,在/etc/ 目录下,执行 建立的send_email.py 脚本文件,按绝对路径查找python脚本;
在这里插入图片描述
给 rc.local 添加可执行权限:

$ sudo chmod +x /etc/rc.local

创建软链接

$ sudo ln -s /lib/systemd/system/rc-local.service /etc/systemd/system/rc-local.service

lib/systemd/system/ 目录下 rc-local.service 文件内添加如下内容:会执行/etc/rc.local 文件
在这里插入图片描述

参考:https://blog.csdn.net/weixin_43916516/article/details/133458079

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/236904.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI 与胚胎结合?系统生物学家 Patrick Müller 利用孪生网络对斑马鱼胚胎展开研究

300 万张图片1.5 万个斑马鱼胚胎的数据集,系统生物学家 Patrick Mller 成功实现基于 AI 的胚胎识别。 作者|加零 编辑|三羊 在动物发育过程中,胚胎随着时间的推移会发生复杂的形态变化,研究者们希望能够客观地量化发…

SpringBootWeb请求响应之前言及状态码的详细解析

SpringBootWeb请求响应 前言 在上一次的课程中,我们开发了springbootweb的入门程序。 基于SpringBoot的方式开发一个web应用,浏览器发起请求 /hello 后 ,给浏览器返回字符串 “Hello World ~”。 其实呢,是我们在浏览器发起请求…

WebRTC AEC回声消除算法拆解

WebRTC AEC算法流程分析——时延估计(一) 其实,网上有很多类似资料,各个大厂研发不同应用场景设备的音频工程师基本都对其进行了拆解,有些闪烁其词,有些却很深奥,笔者随着对WebRTC了解的深入&a…

算法Day28 二进制差异序列(格雷码)

二进制差异序列(格雷码) Description n 位二进制差异序列是一个由2^n个整数组成的序列,其中: 每个整数都在范围[0, 2^n - 1]内(含0和2^n - 1) 第一个整数是0 一个整数在序列中出现不超过一次 每对相邻整数…

scripty妙用

在monorepo项目中,随着子模块增多, 每个子项目都需要配置各自的package.json,并且大同小异,为了进一步提高配置效率,引入了scripty,自己写脚本,直接就可以用哦 1、安装 npm install scripty --save-dev 2…

STM32MP157D-DK1开发板固件烧录

本篇介绍STM32MP157D-DK1开发板如何烧录官方固件。 1 开发板基础硬件介绍 1.1 常用接口 板子上的各种接口功如下,本篇固件烧录,主要用的接口包括: CN6:供电接口B2:复位按键CN11:ST-LINK USB&#xff08…

MYSQL索引和事务

Mysql 索引 事务 存储引擎 索引:索引是一个排序的列表,列表当中存储的是索引的值和包含这个值的数据所在行的物理地址 索引的作用加快查询速度 索引的作用: 利用索引数据库可以快速定位,大大加快查询速度,主要作用表…

LINUX:如何以树形结构显示文件目录结构

tree tree命令用于以树状图列出目录的内容。 第一步,先安装tree这个包 sudo apt-get install tree 第二步,在指定文件目录输入下面命令,7代表7级子目录 tree -L 7 第三步,效果图 第四步,拓展学习 颜色显示 tree -C显…

Go json 差异比较 json-diff(RFC6902)

Go json 差异比较 json-diff(RFC 6902) 毕业设计中过程中为了比较矢量图的差异而依据 RFC 6902 编写的一个包,现已开源: Json-diff 使用 go get -u github.com/520MianXiangDuiXiang520/json-diff序列化与反序列化 与官方 json 包的序列化和反序列化不…

川崎ZX-6R确定引进,636它真的来了,3C认证已过。

最新消息,兄弟们,你们期待已久的川崎ZX6R(636)基本已经确定引进了,官方的3C认证已经通过,那么从3C里面我们可以看到哪几个信息?产品代号ZX636J就是心心念念的ZX-6R了。 有些小伙伴不太清楚3C认…

数据结构:第13关:查找两个单词链表共同后缀的起始结点

任务描述编程要求 输入输出测试说明来源 任务描述 本关任务:假定采用带头结点的单链表保存单词,当两个单词有相同的后缀时,则可共享相同的后缀空间。 例如,“loading”和“being”的存储映像如下图所示: 设str1和str2…

detectron2中save_text_instance_predictions⭐

save_text_instance_predictions demo.py中修改关于路径os.path.join()函数用于路径拼接文件路径,可以传入多个路径os.path.basename(path)就是给定一串路径的最终找到的那个文件python官方文档链接 将 Python 对象序列化为 JSON 字符串with open 打开文件&#xff…

PostGIS学习教程十三:几何图形创建函数

PostGIS学习教程十三:几何图形创建函数 目前我们看到的所有函数都可以处理已有的几何图形并返回结果: 分析几何图形(ST_Length(geometry), ST_Area(geometry)) 几何图形的序列化(ST_AsText(geometry), ST_AsGML(geometry)) 选取…

动态规划_不同路径||

//一个机器人位于一个 // m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 // // 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。 // // 现在考虑网格中有障碍物。那么…

坚守数字化创新烽火之地 百望云入选新华社“品牌信用建设典型案例”

潮起海之南,风好正扬帆。2023年12月2日-5日,南海之滨,由新华通讯社、海南省人民政府、中国品牌建设促进会主办的主题为“聚焦新质生产力,增强发展新动能”的2023中国企业家博鳌论坛在海南博鳌隆重举行。 群贤毕至,高朋…

vue零基础

vue 与其他框架的对比 框架设计模式数据绑定灵活度文件模式复杂性学习曲线生态VueMVVM双向灵活单文件小缓完善ReactMVC单向较灵活all in js大陡丰富AngularMVC双向固定多文件较大较陡(Typescript)独立 更多对比细节:vue 官网:ht…

银河麒麟v10系统SSH远程管理及切换root用户的操作方法

📚📚 🏅我是默,一个在CSDN分享笔记的博主。📚📚 ​​ 🌟在这里,我要推荐给大家我的专栏《Linux》。🎯🎯 🚀无论你是编程小白,还是有一…

深入解析C++中的虚函数和虚继承:实现多态性与继承关系的高级特性

这里写目录标题 虚函数虚函数实现动态绑定虚继承抽象类 虚函数 虚函数是在C中用于实现多态性的一种特殊函数。它通过使用关键字"virtual"进行声明,在基类中定义,可在派生类中进行重写。虚函数允许在运行时根据对象的实际类型来调用相应的函数…

在HarmonyOS上使用ArkUI实现计步器应用

介绍 本篇Codelab使用ArkTS语言实现计步器应用,应用主要包括计步传感器、定位服务和后台任务功能: 通过订阅计步器传感器获取计步器数据,处理后显示。通过订阅位置服务获取位置数据,处理后显示。通过服务开发实现后台任务功能。…

MySQL使用教程

数据构成了我们日益数字化的社会基础。想象一下,从移动应用和银行系统到搜索引擎,再到如 ChatGPT 这样的先进人工智能聊天机器人,这些工具若没有数据支撑,将寸步难行。你有没有好奇过这些海量数据都存放在哪里呢?答案正…