2015-02-17 6 views
0

Когда я concatentate 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

+0

Это. Выяснилось, что это была проблема Gmail при тестировании, но она работает в Outlook, где она фактически будет использоваться для отправки приглашений на собрание. – imparante

ответ

0

Обнаруженный это был вопрос Gmail, когда я был тестирование, но он работает в Outlook, где он на самом деле будет использоваться для отправки приглашения на собрание.