Enviar invitaciones a reuniones con Python

Soy bastante nuevo en Python y estoy intentando crear un script que recostack datos de nuestra base de datos y los convierte en conjuntos. Luego toma esos conjuntos de datos y genera objetos ICS (icalendar) (utilizando icalendar http://codespeak.net/icalendar/ ).

El problema con el que me estoy topando es la parte del correo electrónico, puedo enviar un correo electrónico y adjuntar el archivo ICS, pero cuando llega el correo electrónico es solo un correo electrónico con un archivo adjunto. Esperaba que el correo electrónico se viera como una invitación a una reunión en la que acaba de pulsar “aceptar”. ¿Hay algo que pueda hacer para enviar el archivo ICS como una solicitud de reunión?

Gracias

A continuación se muestra lo que funcionó para enviar invitaciones a través de python a través de gmail (funcionó con google calendar, outlook y 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 " 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() 

Lo que hicimos.

  1. Crear una invitación a la reunión

  2. Correo electrónico a mí mismo. Asegúrese de que hace todas las cosas deseables. (“el correo electrónico se verá como una invitación a una reunión en la que acaba de pulsar ‘aceptar'”)

  3. Guarde ese correo electrónico y el archivo adjunto. Es el punto de referencia.

  4. Cree el archivo ICS en Python que se parece exactamente a los archivos adjuntos de MS-Office. No es completamente estándar. http://en.wikipedia.org/wiki/ICalendar

  5. Asegúrese de que el tipo MIME correcto exacto esté en el archivo adjunto, también. IIRC es text/calendar .