Send meeting invitations to Python

I am new to Python and I am trying to create a script that collects data from our database and converts the data into groups. He then takes these datasets and generates ICS (icalendar) objects (using icalendar http://codespeak.net/icalendar/ ).

The problem I am facing is part of the email, I can send the email and attach the ICS file, but when the email is sent via email with the application. I really hoped that the letter would be seen as an invitation to a meeting where you simply click "accept." Is there something I can do to send an ICS file as a meeting invitation?

thanks

+6
python icalendar
source share
2 answers

below is what worked for me, sending invitations via python via gmail (working with Google Calendar, Outlook and outlook.com (live / hotmail):

import smtplib from email.MIMEMultipart import MIMEMultipart from email.MIMEBase import MIMEBase from email.MIMEText import MIMEText from email.Utils import COMMASPACE, formatdate from email import Encoders import os,datetime CRLF = "\r\n" login = " yourloging@googlemail.com " password = "yourpassword" attendees = [" first@gmail.com ", " second@example.com "," third@hotmail.com "] organizer = "ORGANIZER;CN=organiser:mailto:first"+CRLF+" @gmail.com" fro = "nickname < first@gmail.com >" ddtstart = datetime.datetime.now() dtoff = datetime.timedelta(days = 1) dur = datetime.timedelta(hours = 1) ddtstart = ddtstart +dtoff dtend = ddtstart + dur dtstamp = datetime.datetime.now().strftime("%Y%m%dT%H%M%SZ") dtstart = ddtstart.strftime("%Y%m%dT%H%M%SZ") dtend = dtend.strftime("%Y%m%dT%H%M%SZ") description = "DESCRIPTION: test invitation from pyICSParser"+CRLF attendee = "" for att in attendees: attendee += "ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ- PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=TRUE"+CRLF+" ;CN="+att+";X-NUM-GUESTS=0:"+CRLF+" mailto:"+att+CRLF ical = "BEGIN:VCALENDAR"+CRLF+"PRODID:pyICSParser"+CRLF+"VERSION:2.0"+CRLF+"CALSCALE:GREGORIAN"+CRLF ical+="METHOD:REQUEST"+CRLF+"BEGIN:VEVENT"+CRLF+"DTSTART:"+dtstart+CRLF+"DTEND:"+dtend+CRLF+"DTSTAMP:"+dtstamp+CRLF+organizer+CRLF ical+= "UID:FIXMEUID"+dtstamp+CRLF ical+= attendee+"CREATED:"+dtstamp+CRLF+description+"LAST-MODIFIED:"+dtstamp+CRLF+"LOCATION:"+CRLF+"SEQUENCE:0"+CRLF+"STATUS:CONFIRMED"+CRLF ical+= "SUMMARY:test "+ddtstart.strftime("%Y%m%d @ %H:%M")+CRLF+"TRANSP:OPAQUE"+CRLF+"END:VEVENT"+CRLF+"END:VCALENDAR"+CRLF eml_body = "Email body visible in the invite of outlook and outlook.com but not google calendar" eml_body_bin = "This is the email body in binary - two steps" msg = MIMEMultipart('mixed') msg['Reply-To']=fro msg['Date'] = formatdate(localtime=True) msg['Subject'] = "pyICSParser invite"+dtstart msg['From'] = fro msg['To'] = ",".join(attendees) part_email = MIMEText(eml_body,"html") part_cal = MIMEText(ical,'calendar;method=REQUEST') 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) mailServer = smtplib.SMTP('smtp.gmail.com', 587) mailServer.ehlo() mailServer.starttls() mailServer.ehlo() mailServer.login(login, password) mailServer.sendmail(fro, attendees, msg.as_string()) mailServer.close() 
+12
source share

What have we done.

  • Create a meeting invitation

  • Write me. Be sure that he does everything necessary. ("email will be seen as a meeting invitation, where you just click" accept ")

  • Save this email and attachment. This is the standard.

  • Create an ICS file in Python that looks exactly like an MS-Office application. This is not quite a standard. http://en.wikipedia.org/wiki/ICalendar

  • Make sure the correct exact MIME type is on the attachment. IIRC it text/calendar .

+6
source share

All Articles