前几天无聊,把一直吃灰的树莓派从角落里面拿出来。决定做私有云。但是发现之前写的python脚本失效了,经过查阅百度几番修改,使其重新"焕发生机"。
百度很多源码都是无效的,有各种各样的问题,对于不想折腾的人来说很麻烦。所以今天我就把自己写好的脚本分享出来。
1.开机自启播报IP发送至邮箱
#-*-coding:utf-8-*-
import time
import smtplib
import socket
from email.mime.text import MIMEText
from email.utils import formataddr
def sendemail(): #发送邮件
my_sender = 'xxxxxx@xxxxx.xxx' # 发件人邮箱账号
my_pass = '************' # 发件人邮箱密码
my_user = 'xxxxxx@xxxxx.xxx' # 收件人邮箱账号,我这边发送给自己
msg=MIMEText('系统启动成功!\nIP地址:'+ip_adress+'\n默认端口:22\n', 'plain', 'utf-8')
msg['From'] = formataddr(["Raspberry Pi 4B", my_sender]) # 括号里的对应发件人邮箱昵称、发件人邮箱账号
msg['To'] = formataddr(["xxxxxx@xxxxx.xxx", my_user]) # 括号里的对应收件人邮箱昵称、收件人邮箱账号
msg['Subject'] = "来自树莓派的信" # 邮件的主题,也可以说是标题
server = smtplib.SMTP_SSL("xxxxxxxxxx", xxx) # 发件人邮箱中的SMTP服务器,端口
server.login(my_sender, my_pass) # 括号中对应的是发件人邮箱账号、邮箱密码
server.sendmail(my_sender, [my_user, ], msg.as_string()) # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
server.quit() # 关闭连接
def get_ip():#获取树莓派的IP
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("1.1.1.1", 80))
ip_adress = s.getsockname()[0]
s.close()
return ip_adress
if __name__ == '__main__':
time.sleep(25)
ip_adress = get_ip()
sendemail()
2.定时播报CPU温度
# -*-coding:utf-8-*-
import smtplib
import os
from email.mime.text import MIMEText
from email.utils import formataddr
def email():
my_sender = 'xxxxxx@xxxxx.xxx' # 发件人邮箱账号
my_pass = '********' # 发件人邮箱密码
my_user = 'xxxxxx@xxxxx.xxx' # 收件人邮箱账号
msg = MIMEText(date, 'plain', 'utf-8')
msg['From'] = formataddr(["Raspberry 4B", my_sender]) # 括号里的对应发件人邮箱昵称、发件人邮箱账号
msg['To'] = formataddr(["xxxxxx@xxxxx.xxx", my_user]) # 括号里的对应收件人邮箱昵称、收件人邮箱账号
msg['Subject'] = "来自树莓派的温度提示" # 邮件的主题,也可以说是标题
server = smtplib.SMTP_SSL("xxxxxxxxxx", xxx) # 发件人邮箱中的SMTP服务器,端口是25
server.login(my_sender, my_pass) # 括号中对应的是发件人邮箱账号、邮箱密码
server.sendmail(my_sender, [my_user, ], msg.as_string()) # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
server.quit() # 关闭连接
if init == 7:
os.system('wall 警告!\nCPU温度过高\n为保证硬件稳定性与数据的安全,系统已强制执行关机命令\n\n您已被动下线!')
os.system('shutdown -h now')
def get_cpu(): # 获取树莓派CPU的温度
init = 0
walls = 0
file = open("/sys/class/thermal/thermal_zone0/temp", 'r')
temp = float(file.read()) / 1000 # 读取结果,转换为浮点数
temps = round(temp, 2) # 保留两位小数点
file.close() # 关闭文件
if temps <= 39:
walls = '状态空闲!'
elif 40 <= temps < 50:
walls = '状态正常!'
elif 50 <= temps < 60:
walls = '当前状态:负载较高!'
elif 60 <= temps < 70:
walls = '达到预警值状态,请注意!!!'
elif temps >= 70:
walls = '警告!\n温度过高,为保证安全,执行强制性断电命令!'
init = 7
return '当前CPU温度为:'+str(temps)+'℃\n'+walls, init
if __name__ == '__main__':
date, init = get_cpu()
email()
3.邮件附件发送
#-*-coding:utf-8-*-
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.utils import formataddr
def mail():
print("\n\t#-----------------邮箱附件发送服务-----------------#\t\n")
my_sender = 'xxxxxx@xxxxx.xxx' # 发件人邮箱账号
my_pass = '********' # 发件人邮箱密码
my_user = input("请输入收件人账号:") # 收件人邮箱账号
ret = True
content = input("请输入附件的路径:")
temp = input("是否默认发送附件名称(默认会包含文件的路径信息):")
try:
msg = MIMEMultipart()
att = MIMEText(open(content, 'rb').read(), 'base64', 'gb2312')
att["Content-Type"] = 'application/octet-stream'
if temp == "是":
att.add_header('Content-Disposition', 'attachment', filename=content)
else:
contens = input("请输入发送附件名称(包含后缀):")
att.add_header('Content-Disposition', 'attachment', filename=contens)
# att["Content-Disposition"] = 'attachment,filename=content' 这种写法是bin附件(二进制)
msg.attach(att)
print("In transit......")
server = smtplib.SMTP_SSL("xxxxxxxxxxxxx", xxx) # 发件人邮箱中的SMTP服务器,端口是25
server.login(my_sender, my_pass) # 括号中对应的是发件人邮箱账号、邮箱密码
server.sendmail(my_sender, [my_user, ], msg.as_string()) # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
server.quit() # 关闭连接
except Exception: # 如果 try 中的语句没有执行,则会执行下面的 ret=False
ret = False
return ret
ret = mail()
if ret:
print("邮件发送成功!\n如果您不想让别人知道你的邮件信息,可以使用clear命令来刷新终端!")
else:
print("\n邮件发送失败!\n帮助:请检查您的附件路径,发件人邮箱以及网络连通性.")
Comments | NOTHING