zoukankan      html  css  js  c++  java
  • 使用python发送outlook约会提醒邮件

    今天突然有一个自动发送会议邀请邮件的需求,因为需要用到发送outlook的约会提醒,所以到网络上找了一些资料。有用微软的outlook API实现的,但是这个有一个问题,就是必须在本地安装有outlook并且具有一个available的账户被登录。如果因为这个而向公司申请一个单独的邮件账号比较麻烦也不是很现实。于是找到了另一个python的第三方库,利用smtp实现。
    icalendar.rar,附件是附带的第三方库,下载安装即可
    利用python发送提醒的代码如下:

    import email.MIMEText
     
    import email.MIMEBase
     
    from email.MIMEMultipart import MIMEMultipart
     
    import smtplib
     
    import datetime
     
    import icalendar
     
          
     
    def sendAppointment(self, subj, description):
     
          reminderHours = 1
     
          startHour = 7
     
          start = datetime.datetime.combine(self.date, datetime.time(startHour, 0, 0))
     
          cal = icalendar.Calendar()
     
          cal.add('prodid', '-//My calendar application//example.com//')
     
          cal.add('version', '2.0')
     
          cal.add('method', "REQUEST")
     
          event = icalendar.Event()
     
          event.add('attendee', self.getEmail())
     
          event.add('organizer', "me@example.com")
     
          event.add('status', "confirmed")
     
          event.add('category', "Event")
     
          event.add('summary', subj)
     
          event.add('description', description)
     
          event.add('location', "Room 101")
     
          event.add('dtstart', start)
     
          event.add('dtend', datetime.datetime.combine(self.date, datetime.time(startHour + 1, 0, 0)))
     
          event.add('dtstamp', datetime.datetime.combine(self.date, datetime.time(6, 0, 0)))
     
          event['uid'] = getUniqueId() # Generate some unique ID
     
          event.add('priority', 5)
     
          event.add('sequence', 1)
     
          event.add('created', datetime.datetime.now())
     
          
     
          alarm = icalendar.Alarm()
     
          alarm.add("action", "DISPLAY")
     
          alarm.add('description', "Reminder")
     
          #alarm.add("trigger", datetime.timedelta(hours=-reminderHours))
     
          # The only way to convince Outlook to do it correctly
     
          alarm.add("TRIGGER;RELATED=START", "-PT{0}H".format(reminderHours))
     
          event.add_component(alarm)
     
          cal.add_component(event)
     
          
     
          msg = MIMEMultipart("alternative")
     
          
     
          msg["Subject"] = subj
     
          msg["From"] = "{0}@example.com".format(self.creator)
     
          msg["To"] = self.getEmail()
     
          msg["Content-class"] = "urn:content-classes:calendarmessage"
     
          
     
          msg.attach(email.MIMEText.MIMEText(description))
     
          
     
          filename = "invite.ics"
     
          part = email.MIMEBase.MIMEBase('text', "calendar", method="REQUEST", name=filename)
     
          part.set_payload( cal.to_ical() )
     
          email.Encoders.encode_base64(part)
     
          part.add_header('Content-Description', filename)
     
          part.add_header("Content-class", "urn:content-classes:calendarmessage")
     
          part.add_header("Filename", filename)
     
          part.add_header("Path", filename)
     
          msg.attach(part)
     
          
     
          s = smtplib.SMTP('localhost')
     
          s.sendmail(msg["From"], [msg["To"]], msg.as_string())
     
          s.quit()
  • 相关阅读:
    序列点,相关知识
    6.13 关键概念
    6.9 如何选择循环
    6.8 出口条件循环:do while
    6.7 逗号运算符
    6.6 其他赋值运算符:+=、-=、*=、/=、%=
    6.3.4 新的_Bool类型
    Oracle的表导入到PowerDesigner
    PowerDesigner连接Oracle数据库
    加了日期条件后查询结果慢了100倍
  • 原文地址:https://www.cnblogs.com/hyb1/p/3042182.html
Copyright © 2011-2022 走看看