Отправка приглашений на встречи с Python - PullRequest
8 голосов
/ 28 января 2011

Я довольно новичок в Python и пытаюсь создать скрипт, который собирает данные из нашей базы данных и преобразует их в наборы.Затем он берет эти наборы данных и генерирует объекты ICS (icalendar) (используя icalendar http://codespeak.net/icalendar/).

Проблема, с которой я сталкиваюсь - это часть электронной почты, я могу отправить электронное письмо иприкрепите файл ICS, но когда приходит электронное письмо, это просто электронное письмо с вложением. Я действительно надеялся, что электронное письмо будет рассматриваться как приглашение на собрание, когда вы просто нажимаете «принять». Есть ли что-то, что я могу сделать, чтобы отправитьФайл ICS как приглашение на собрание?

Спасибо

Ответы [ 2 ]

17 голосов
/ 01 февраля 2013

ниже - это то, что помогло мне отправить приглашения через python через gmail (работал с календарем google, outlook и 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()
7 голосов
/ 28 января 2011

То, что мы сделали.

  1. Создание приглашения на встречу

  2. Пишите мне.Будьте уверены, что он делает все желаемое.(«электронная почта будет рассматриваться как приглашение на встречу, когда вы просто нажмете« принять »»)

  3. Сохраните эту электронную почту и вложение.Это тест.

  4. Создайте файл ICS на Python, который выглядит точно , как вложение MS-Office.Это не совсем стандарт.http://en.wikipedia.org/wiki/ICalendar

  5. Убедитесь, что на вложении также указан правильный MIME точный .IIRC это text/calendar.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...