美文网首页
利用python收发邮件功能实现远程电脑的控制

利用python收发邮件功能实现远程电脑的控制

作者: web小哥MrYang | 来源:发表于2019-09-29 10:58 被阅读0次

    功能并非原创, 只是重复实现了 http://codecloud.net/python-control-128.html 中描述的功能. 

    实现功能: 通过给固定邮件地址发送命令(包含在主题中)的方式控制远程电脑实现相应功能(譬如关机等, 可以根据实际需要实现更复杂的功能)

    实现原理: 远程电脑不断(每隔10s)利用 python 脚本检查邮件服务器是否有新邮件, 如有则对邮件进行分析, 如果包含可执行命令, 则执行相应命令

    你需要的: 装有 PYTHON 的 PC; 最好两个邮箱(一个用于接收命令, 一个用来发邮件); 可选手机邮件客户端(可以实现在手机上发送邮件, 更高大上)

    注意: 不要使用163邮箱来接受命令, 每隔 10s 的检查间隔会导致网易拒绝让你登录的~ 

    我反正丧心病狂用学校的服务器.  Python 代码如下:

    # -*- coding: utf-8 -*-

    import poplib,email,re

    from email.header import decode_header

    import smtplib

    from email.mime.text import MIMEText

    import time

    import os,sys

    import random

    def send_mail(to_mail_addr, message):

        from_mail_addr = "****@fudan.edu.cn"

        password = "****"

        smtp_server = "mail.fudan.edu.cn"  #smtp_server

        message = "Hello, mission received: \n \t \t" + message

        msg = MIMEText(message, 'plain', 'gb2312')

        msg['Subject'] = 'This is a reply msg by PythonMailControl'

        msg['From'] = from_mail_addr

        msg['To'] = to_mail_addr

        server = smtplib.SMTP(smtp_server, 25)

        server.set_debuglevel(1)

        server.login(from_mail_addr, password)

        server.sendmail(from_mail_addr, [to_mail_addr], msg.as_string())

        server.quit()

    def get_last_mail():

        try:

            host = 'mail.fudan.edu.cn'  # pop3 server

            username = '****@fudan.edu.cn'

            password = '****'

            p = poplib.POP3_SSL(host)

            p.user(username)

            p.pass_(password)

            ret = p.stat()

        except poplib.error_proto,e:

            print "Login failed:",e

            return (-2,0,0)  # error code, nonsense, nonsense

        mail_number = ret[0] # return the total number of mails

        ret = p.list()

        down = p.retr(1)    # return the last received mail

        return (1,mail_number,down)

    if __name__ == "__main__":

        mail_number_old = 0

        while 1:

            (error,mail_number,down) = get_last_mail()

            if (error==1) and (mail_number != mail_number_old):  # no error and have new mail

                mail_number_old = mail_number   

                for line in down[1]:    # check the mail line by line, get the sender and subject

                    if line[0:4]=="From":

                        from_mail_addr = re.search( '[0-9a-zA-Z_]*@[0-9a-zA-Z_.]*', line).group(0) 

                    if line[0:7]=="Subject":

                        content = line[9:]

                if content[0] == '@':  # response according to the subject

                    cmd = content[1:]

                    try:

                        os.system(cmd)  # do sth.

                        send_mail(from_mail_addr,cmd)  # reply message to the mail sender

                    except:

                        os.system('echo error')

            time.sleep(10)

    运行待机情况: 

    然后用手机给我的学号邮箱发个邮件. 主题是 @shutdown -s -t 600

    其中 @ 是前导字符, 用于给程序判断这是一个命令. shutdown 等则是10分钟后关机的命令. 

    等待5-10s, 在PC上就出现了等待关机的提示

    相关文章

      网友评论

          本文标题:利用python收发邮件功能实现远程电脑的控制

          本文链接:https://www.haomeiwen.com/subject/fecfpctx.html