当我使用字符串变量连接uid时,会议邀请ics附件无法正确创建,但是当我对整个字符串进行硬编码时
"UID: hardcoded string"
这会正确创建会议邀请函附件。我不知道怎么解决这个问题。我不想使用getuniqueid()函数,因为我希望能够取消会议邀请请求。
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
def meeting_invitation(toAddr, body, datetimeStrP, method, uid):
CRLF = "\r\n"
attendees = toAddr
organizer = "ORGANIZER;CN=organiser:mailto:do.not.reply"+CRLF+" @engr.orst.edu"
fro = "<do.not.reply@me.com>"
ddtstart = datetimeStrP
dtoff = datetime.timedelta(hours = 8) # Correct -8 hour UTC offset correction
dur = datetime.timedelta(minutes = 15)
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")
if method == "REQUEST":
status = "CONFIRMED"
elif method == "CANCEL":
status = "CANCELLED"
description = "DESCRIPTION: Meeting invitation "+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:"+method+CRLF+\
"BEGIN:VEVENT"+CRLF+\
"DTSTART:"+dtstart+CRLF+\
"DTEND:"+dtend+CRLF+\
"DTSTAMP:"+dtstamp+CRLF+organizer+CRLF
ical+= "UID:"+uid+CRLF
ical+= "UID:%s" %(uid)+CRLF
# ical['uid']=uid+CRLF
ical+= attendee+\
"CREATED:"+dtstamp+CRLF+\
description+\
"LAST-MODIFIED:"+dtstamp+CRLF+\
"LOCATION:"+CRLF+\
"SEQUENCE:0"+CRLF+\
"STATUS:"+status+CRLF
ical+= "SUMMARY: Meeting invitation "+ddtstart.strftime("%Y%m%d @ %H:%M")+CRLF+\
"TRANSP:OPAQUE"+CRLF+\
"END:VEVENT"+CRLF+\
"END:VCALENDAR"+CRLF
eml_body = body
msg = MIMEMultipart('mixed')
msg['Reply-To']=fro
msg['Date'] = formatdate(localtime=True)
msg['Subject'] = "Advising Meeting "+ status #+ dtstart
msg['From'] = fro
msg['To'] = ",".join(attendees)
part_email = MIMEText(eml_body, "plain")
part_cal = MIMEText(ical,'calendar;method='+method)
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('mail.server', 587)
mailServer.sendmail(fro, attendees, msg.as_string())
mailServer.close()
答案 0 :(得分:0)
我在测试时发现这是一个Gmail问题,但它适用于Outlook,它实际上会用于发送会议邀请。