无法通过串联字符串变量来设置ics的uid



当我用字符串变量连接uid时,会议邀请ics附件不会正确创建,但当我硬编码整个字符串时

"UID: hardcoded string"

这将正确创建会议邀请ics附件。我不知道如何避开这件事。我不想使用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 = "rn"
    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()

我在测试时发现这是一个Gmail问题,但它在Outlook上有效,它实际上将用于发送会议邀请。

相关内容

  • 没有找到相关文章

最新更新