zoukankan      html  css  js  c++  java
  • [置顶] 利用Python 提醒实验室同学值日(自动发送邮件)

        前言:

              在实验室里一直存在着一个问题,就是老是有人忘记提醒下一个人值日,然后值日就被迫中断了。毕竟良好的        卫生环境需要大家一起来维护的!没办法只能想出一些小对策了。

         解决思路:

              首先,我想使用python 写个脚本,原因是其拥有众多的库,操作方便。首先实现使用Python 登陆邮箱然后发送        邮件的功能。然后再解决定时发送和对实验室同学轮流发送的问题。在第二步中有两个解决方案:

              1⃣️使用win 2012服务器 的定时任务功能,到指定时间进行自动执行脚本。然后将同学们的邮箱放到一个文件中     ,其中第一行为发送邮件的次数。从第二行开始是同学们的邮箱。每执行一次就增加改变一次数值。通过取余,计         算出应该将邮件发送给谁。

                  2⃣️不用那么麻烦,但是需要一直占用些CPU 资源。就是利用while 循环,让脚本在服务器上一直运行。

        当然我选择的是第二种方法做的。

         脚本源码:

          

    # -*- coding: UTF-8 -*-
    import sys, os, re, urllib, urlparse
    import smtplib
    import time
    import string
    import traceback
    from email.mime.text import MIMEText
    from email.mime.multipart import MIMEMultipart
    
    
    def sendmail(subject, msg, toaddrs, fromaddr, smtpaddr, password):
        '''''
        @subject:邮件主题
        @msg:邮件内容
        @toaddrs:收信人的邮箱地址
        @fromaddr:发信人的邮箱地址
        @smtpaddr:smtp服务地址,可以在邮箱看,比如163邮箱为smtp.163.com
        @password:发信人的邮箱授权码 注意:是授权码不是密码
        '''
        mail_msg = MIMEMultipart()
        if not isinstance(subject, unicode):
            subject = unicode(subject, 'utf-8')
        mail_msg['Subject'] = subject
        mail_msg['From'] = fromaddr
        mail_msg['To'] = ','.join(toaddrs)
        mail_msg.attach(MIMEText(msg, 'html', 'utf-8'))
        try:
            s = smtplib.SMTP()
            s.connect(smtpaddr)  # 连接smtp服务器
            s.login(fromaddr, password)  # 登录邮箱
            s.sendmail(fromaddr, toaddrs, mail_msg.as_string())  # 发送邮件
            s.quit()
            print "success"
        except Exception, e:
            print "Error: unable to send email"
            print traceback.format_exc()
    
    group=("864678132@qq.com","1358548208@qq.com","843822062@qq.com","572939586@qq.com")#用来存放每个人的邮箱
    i=0 # 用来记录发送次数,然后对人数取余进行判断应该发送给哪个邮箱
    while True:
        now = time.strftime("%H")  # 获取当前时间 小时
        now = time.strftime(now)  # 转换成字符串
        nows = string.atoi(now)  # 转换成整数
        if nows == 18:  # 进行判断 在十八点后进行发送
            fromaddr = "发件人邮箱"
            smtpaddr = "smtp.163.com"
            toaddrs = [group[i]]
            subject = "实验室值日邮件"
            password = "授权码"
            msg = "今天记得打扫卫生哟!"
            sendmail(subject, msg, toaddrs, fromaddr, smtpaddr, password)
            i=(i+1)%len(group)
            time.sleep(6000)  #发送完后 等待一小时,避免重复发送
        else:
            time.sleep(3000)
    

        总结:

             让技术方便生活!

  • 相关阅读:
    美国贷款买饭的房屋保险
    ArrayList和数组间的相互转换
    JList动态添加元素
    美国交往礼仪
    刘元普双生贵子(但行好事,莫问前程)
    CountDownLatch与CyclicBarrier
    彻底理解Java的feature模式
    Java中的Future模式原理自定义实现
    浅谈Java Future接口
    Future接口和Callable接口以及FeatureTask详解
  • 原文地址:https://www.cnblogs.com/chxuan/p/8232087.html
Copyright © 2011-2022 走看看