python实现微信发送邮件关闭电脑功能

yipeiwu_com6年前Python基础

Python 通过微信邮件实现电脑关机,供大家参考,具体内容如下

通过手机微信发送QQ邮件给sina邮箱,然后利用python的pop3定时检查sina邮箱的邮件主题以及邮件来源,并在电脑执行相应的命令行实现关机。

Email_test【V1.0】

import poplib 
import os 
import time 
from email.parser import Parser 
from email.header import decode_header 
from email.utils import parseaddr 
 
#编码转换函数 
def decode_str(s): 
  value, charset = decode_header(s)[0] 
  if charset: 
    value = value.decode(charset) 
  return value 
 
#获取email主题 
def get_Subject(msg): 
  #提取Subject信息 
  Subject = msg.get('Subject') 
  #编码转换 
  Subject = decode_str(Subject) 
  return Subject 
 
def judge(Subject, e_addr): 
  if (Subject == '关机' and e_addr == '532101629@qq.com'): 
    return 1 
  else: 
    return 0 
 
#检索邮件主题 
def Check_Subject(host, user, password): 
  result = 0 
  try: 
    pop_connect = poplib.POP3(host=host, timeout=3) 
    print(pop_connect.getwelcome()) 
 
    pop_connect.user(user) 
    pop_connect.pass_(password) 
    print('Messages: %s. Size: %s' % pop_connect.stat()) 
 
    #服务器返回信息,消息列表,返回信息的大小。 
    number = len(pop_connect.list()[1]) 
    print('消息列表长度:', number) 
 
    #检索所有邮件 
    for index in range(1, number+1): 
      #获取第一封邮件信息 
      msglines = pop_connect.retr(index)[1] 
      # 可以获得整个邮件的原始文本(重新排版后的): 
      str = b'\r\n' 
      msg_content = str.join(msglines).decode('utf-8') 
      print('\n', msg_content) 
      #将原始邮件转换为email实例: 
      msg = Parser().parsestr(msg_content) 
 
      # 获取email主题 
      Subject = get_Subject(msg) 
      print(Subject) 
      # 获取email地址 
      email_addr = parseaddr(msg.get('From'))[1] 
      #信息判断 
      result = judge(Subject, email_addr) 
      print(result) 
      #根据判断结果,执行操作 
      if result == 1: 
        pop_connect.dele(index) 
        break 
    # 登出email 
    pop_connect.quit() 
    return result 
 
  except Exception as e: 
      print('login fail! ' + str(e)) 
      quit() 
 
def main(): 
  host = 'pop.sina.com' 
  user = '********@sina.com' 
  password = '********' 
  while 1: 
    result = Check_Subject(host, user, password) 
    if result == 1: 
      cmd = 'cmd /k shutdown -l' 
      os.system(cmd) 
      break 
    time.sleep(60) # 两次检索邮件的时间间隔60s 
 
main() 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持【听图阁-专注于Python设计】。

相关文章

快速解决vue.js 模板和jinja 模板冲突的问题

快速解决vue.js 模板和jinja 模板冲突的问题

jinjia和vue.js默认的模板转义符都是{{}} 目前的解决办法是修改vue.js的转义符,将原来的{{}}替换为其他标签,我改为{[]} 版本1.x和2.x方法如下 //...

django 2.0更新的10条注意事项总结

前言 备受期待的django 2.0已经发布了,最大的一个变化就是不再支持python2.x版本了,这也为我们还在保守使用的2.x的同学们敲响了警钟,赶紧学习python3.x吧,虽然大...

Python提取特定时间段内数据的方法实例

python提取特定时间段内的数据 尝试一下: data['Date'] = pd.to_datetime(data['Date']) data = data[(data['Date...

基于python进行桶排序与基数排序的总结

本文首先举例阐述了两种排序方法的操作步骤,然后列出了用python进行的实现过程,最后对桶式排序方法的优劣进行了简单总结。 一、桶排序: 排序一个数组[5,3,6,1,2,7,5,10]...

Spring实战之使用util:命名空间简化配置操作示例

本文实例讲述了Spring使用util:命名空间简化配置操作。分享给大家供大家参考,具体如下: 一 配置 <?xml version="1.0" encoding="G...