2024-05-18 12:23:32 发布
网友
我对Python很陌生,我正在尝试创建一个脚本,它从我们的数据库收集数据并将数据转换成集合。然后获取这些数据集并生成ICS(icalendar)对象(通过使用icalendarhttp://codespeak.net/icalendar/)。
我遇到的问题是电子邮件部分,我可以发送电子邮件并附加ICS文件,但当电子邮件到达时,它只是一个带有附件的电子邮件。我真的希望这封邮件能被看作是一个会议邀请,你只要点击“接受”。我可以做些什么来将ICS文件作为会议请求发送吗?
谢谢
我们所做的。
创建会议邀请
给自己发邮件。一定要做所有值得做的事情。(“您只需点击“接受”即可将电子邮件视为会议邀请)
保存电子邮件和附件。这是基准。
用Python构建ICS文件,该文件看起来与MS Office附件完全类似。这不是完全标准的。http://en.wikipedia.org/wiki/ICalendar
确保附件中也有正确的MIME类型。是text/calendar。
text/calendar
下面是我通过python通过gmail发送邀请(使用google calendar、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()
我们所做的。
创建会议邀请
给自己发邮件。一定要做所有值得做的事情。(“您只需点击“接受”即可将电子邮件视为会议邀请)
保存电子邮件和附件。这是基准。
用Python构建ICS文件,该文件看起来与MS Office附件完全类似。这不是完全标准的。http://en.wikipedia.org/wiki/ICalendar
确保附件中也有正确的MIME类型。是
text/calendar
。下面是我通过python通过gmail发送邀请(使用google calendar、outlook和outlook.com(live/hotmail))的方法:
相关问题 更多 >
编程相关推荐