2015-02-17 31 views
0

当我concatentate一个字符串变量会议邀请芯片附件没有得到正确创建的UID来设置IC的UID,但是当我硬编码整个字符串无法通过连接字符串变量

"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 = "\r\n" 
    attendees = toAddr 
    organizer = "ORGANIZER;CN=organiser:mailto:do.not.reply"+CRLF+" @engr.orst.edu" 
    fro = "<[email protected]>" 

    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

你确定你的uid变量实际上是一个字符串吗?检查你可以使用 'if isinstance(uid,str):' – oberron 2015-02-26 11:52:44

+0

就是这样。发现这是我测试时的Gmail问题,但它适用于Outlook,它实际上会用于发送会议邀请。 – imparante 2015-02-27 12:50:27

回答

0

发现这是一个Gmail的问题时,我的测试,但它的工作原理上的Outlook,它实际上将被用来发送会议邀请。