How to send calendar mail (ics) via python

Email's rfc: https://tools.ietf.org/html/rfc2446

For convenience, speak with code (just the simplest version, you can refer to rfc for various customization requirements, but many effects require the support of the client, and the support is better is Outlook)

# encoding: utf-8

import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
import os,datetime


def send_email(**kwargs):
    """
    method
    event
    dtstart
    due
    msg
    dtstamp
    """
    ical = """
    BEGIN:VCALENDAR\r\n
    PRODID:pyICSParser\r\n
    METHOD:%(method)s\r\n
    VERSION:2.0\r\n
    BEGIN:%(event)s\r\n
    DTSTART:%(dtstart)s\r\n
    TWO:% (two) s \ r \ n
    PRIORITY:1\r\n
    SUMMARY:%(msg)s\r\n
    UID:[email protected]\r\n
    SEQUENCE:0\r\n
    DTSTAMP:%(dtstamp)s\r\n
    STATUS:%(status)s\r\n
    END:VEVENT\r\n
    END:VCALENDAR\r\n
    """% kwargs

    eml_body = u"%(msg)s" % kwargs
    msg = MIMEMultipart('mixed')
    msg['Date'] = formatdate(localtime=True)
    msg['Subject'] = u"%(msg)s" % kwargs
    msg['To'] = ",".join(attendees)

    part_email = MIMEText(eml_body,"html",'utf-8')
    part_cal = MIMEText(ical,'calendar;method=%(method)s'%kwargs,'utf-8')

    msgAlternative = MIMEMultipart('alternative')
    msg.attach(msgAlternative)

    ical_atch = MIMEBase('application/ics',' ;name="%s"'%("invite.ics"))
    ical_atch.set_payload(ical)
    Encoders.encode_base64(ical_atch)
    ical_atch.add_header('Content-Disposition', 'attachment; filename="%s"'%("invite.ics"))

    eml_atch = MIMEBase('text/plain','')
    Encoders.encode_base64(eml_atch)
    eml_atch.add_header('Content-Transfer-Encoding', "")

    msgAlternative.attach(part_email)
    msgAlternative.attach(part_cal)

    s = smtplib.SMTP()
    s.connect('xxxx')
    s.login(' ', ' ')
    s.sendmail('[email protected]', attendees, msg.as_string())
    s.close()

attendees =['[email protected]']
fro = ""

ddtstart = datetime.datetime.utcnow()
dur = datetime.timedelta (minutes = 5)
dtend = ddtstart + hard
dtend = dtend.strftime("%Y%m%dT%H%M%SZ")

send_email(method='PUBLISH',event='VTODO',dtstart=dtend,due=dtend,msg='publish 任务',dtstamp=dtend, status="COMPLETED")
send_email(method='REQUEST',event='VTODO',dtstart=dtend,due=dtend,msg='request 任务',dtstamp=dtend, status="NEEDS ACTION")
send_email(method='PUBLISH',event='VEVENT',dtstart=dtend,due=dtend,msg='publish 日历',dtstamp=dtend, status="CONFIRMED")
send_email(method='REQUEST',event='VEVENT',dtstart=dtend,due=dtend,msg='request 日历',dtstamp=dtend, status='CONFIRMED')

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=326450132&siteId=291194637