问题描述
我正在测试通过电子邮件发送事件邀请的代码,并在代码中向MIMEText对象添加标头时看到意外响应。
class PersonInfo:
def __init__(self,name,email):
self.name = name
self.email = email
def build_cal_event(evName,evDesc,\
organizer,attendees,\
startDate,endDate):
str_list = []
str_list.append('''\...... #NOT SHOWING FUNCTION IMPLEMENTATION FOR CONCISEnesS
if __name__ == "__main__":
sender = PersonInfo("MYNAME","ID@gmail.com")
rec1= PersonInfo("RECNAME","ID@outlook.com")
recipients = [rec1]
subject = "Hi"
body = "How is everything?"
dtstart = datetime(2020,9,2,21,30,0)
dtend = datetime(2020,3,22,0)
ics = build_cal_event("ImpEvent","Greeting",sender,recipients,dtstart,dtend) #Function creates ICS file
with open("event.ics",'w') as f:
f.write(ics)
client = boto3.client('ses',region_name="us-east-1")
msg = MIMEMultipart('alternative')
msg["Subject"] = subject
msg["From"] = sender.email
msg["To"] = ','.join(map(lambda x: x.email,recipients))
msg["Content-class"] = "urn:content-classes:calendarmessage"
part_cal = MIMEText(ics,'calendar;method=REQUEST')
part = MIMEText(body)
msg.attach(part)
icsName = "{}.ics".format(subject.replace(" ","_").upper())
part_cal.set_payload(ics)
encoders.encode_base64(part_cal)
part_cal.add_header('Content-Type','text/calendar')
part_cal.add_header('Content-disposition',"attachment; filename={}".format(icsName))
msg.attach(part_cal)
try:
result = client.send_raw_email(
Source=msg['From'],Destinations=[recipient.email for recipient in recipients],RawMessage={'Data': msg.as_string()}
)
print(result['MessageId'])
except ClientError as e:
print(e.response['Error']['Message'])
运行上面的代码时,我在Outlook上看到以下响应:
如您所见,我在电子邮件邀请中看不到“接受”,“暂定”和“拒绝”按钮。
我的ICS文件如下:
BEGIN:VCALENDAR
METHOD:REQUEST
PRODID:OrganizationName
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Eastern Standard Time
BEGIN:STANDARD
DTSTART:16010101T020000
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=11
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:16010101T020000
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=2SU;BYMONTH=3
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
ORGANIZER;CN=MYNAME:mailto:ID@gmail.com
ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=MYNAME:
mailto:ID@outlook.com
DESCRIPTION;LANGUAGE=en-US:impevent
UID:7c8feffa-f03d-406b-8195-3587ec426ec6
SUMMARY;LANGUAGE=en-US:ImpEvent
DTSTART;TZID=Eastern Standard Time:20200902T213000
DTEND;TZID=Eastern Standard Time:20200903T223000
CLASS:PUBLIC
PRIORITY:5
DTSTAMP:20200902T025908Z
TRANSP:OPAQUE
STATUS:CONFIRMED
SEQUENCE:0
LOCATION;LANGUAGE=en-US:
X-MICROSOFT-CDO-APPT-SEQUENCE:0
X-MICROSOFT-CDO-OWNERAPPTID:2118692743
X-MICROSOFT-CDO-BUSYSTATUS:TENTATIVE
X-MICROSOFT-CDO-INTENDEDSTATUS:BUSY
X-MICROSOFT-CDO-ALLDAYEVENT:FALSE
X-MICROSOFT-CDO-IMPORTANCE:1
X-MICROSOFT-CDO-INSTTYPE:0
X-MICROSOFT-ONLINEMEETINGEXTERNALLINK:
X-MICROSOFT-ONLINEMEETINGCONFLINK:
X-MICROSOFT-DONOTFORWARDMEETING:FALSE
X-MICROSOFT-disALLOW-COUNTER:FALSE
X-MICROSOFT-LOCATIONS:[]
BEGIN:VALARM
DESCRIPTION:REMINDER
TRIGGER;RELATED=START:-PT15M
ACTION:disPLAY
END:VALARM
END:VEVENT
END:VCALENDAR
但是,当我以这种方式注释掉上面代码中的add_header
行时:
if __name__ == "__main__":
sender = PersonInfo("MYNAME","ID@outlook.com")
recipients = [rec1]
subject = "Hi"
body = "How is everything?"
dtstart = datetime(2020,region_name="us-east-1")
msg = MIMEMultipart('alternative')
msg["Subject"] = subject
msg["From"] = sender.email
msg["To"] = ',"_").upper())
part_cal.set_payload(ics)
encoders.encode_base64(part_cal)
#part_cal.add_header('Content-Type','text/calendar')
#part_cal.add_header('Content-disposition',"attachment; filename={}".format(icsName))
msg.attach(part_cal)
try:
result = client.send_raw_email(
Source=msg['From'],RawMessage={'Data': msg.as_string()}
)
print(result['MessageId'])
except ClientError as e:
print(e.response['Error']['Message'])
我看到了预期的正确答案:
我不明白为什么当我在代码中包含add_header
行时收件人为什么看不到活动邀请。可能是由于我的代码中的send_raw_email
命令导致了吗?
编辑1:
我注意到第二个片段中没有事件名称和详细信息。可能是什么原因?
编辑2:
在HernánAlarcón的建议之后,我通过以下方式更改了相关代码:
if __name__ == "__main__":
sender = PersonInfo("MYNAME","_").upper())
part_cal.set_payload(ics)
#encoders.encode_base64(part_cal)
part_cal.add_header('Content-Type',RawMessage={'Data': msg.as_string()}
)
print(result['MessageId'])
except ClientError as e:
print(e.response['Error']['Message'])
它产生了以下响应:
即使更改了代码,接收到的电子邮件中也没有“接受”,“暂定”和“拒绝”按钮。
编辑3:
Content-Type: multipart/alternative; boundary="===============3470341632134321988=="
MIME-Version: 1.0
Subject: Hi
From: ID@gmail.com
To: ID@outlook.com
Content-class: urn:content-classes:calendarmessage
--===============3470341632134321988==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-transfer-encoding: 7bit
How is everything?
--===============3470341632134321988==
MIME-Version: 1.0
Content-Type: text/calendar; method="REQUEST"; charset="us-ascii"
Content-transfer-encoding: 7bit
Content-transfer-encoding: base64
QkVHSU46VkNBTEVOREFSCk1FVEhPRDpSRVFVRVNUClBST0RJRdpnQVggQXNwaXJlIENhbGVuZGFy
IEV2ZW50ClZFUlNJT046Mi4wCkJFR0lOOlZUSU1FWk9ORQpUWklEOkVhc3Rlcm4gU3RhbmRhcmQg
VGltZQpCRUdJTjpTVEFOREFSRApEVFNUQVJUOjE2MDEwMTAxVDAyMDAwMApUWk9GRlNFVEZST006
LTA0MDAKVFpPRkZTRVRUTzotMDUwMApSUlVMRTpGUkVRPVlFQVJMWTtJTlRFUlZBTD0xO0JZREFZ
PTFTVTtCWU1PTlRIPTExCkVORDpTVEFOREFSRApCRUdJTjpEQVlMSUdIVApEVFNUQVJUOjE2MDEw
MTAxVDAyMDAwMApUWk9GRlNFVEZST006LTA1MDAKVFpPRkZTRVRUTzotMDQwMApSUlVMRTpGUkVR
PVlFQVJMWTtJTlRFUlZBTD0xO0JZREFZPTJTVTtCWU1PTlRIPTMKRU5EOkRBWUxJR0hUCkVORDpW
VElNRVpPTkUKQkVHSU46VkVWRU5UCk9SR0FOSVpFUjtDTj1BYmR1bGxhaCBTaWRkaXF1aTptYWls
dG86c2lkZGlxdWlhYmR1bGxhaDkyQGdtYWlsLmNvbQpBVFrftkRFRTtST0xFPVJFUS1QQVJUSUNJ
UEFOVDtQQVJUU1RBVD1ORUVEUy1BQ1RJT047UlNWUD1UUlVFO0nopUFiZHVsbGFoOgogbWFpbHRv
OnNpZGRpcxvpYWJkdWxsYWg5MkBvdXRsb29rLmNvbQpERVNDUklQVElPTjtMQU5HVUFHRT1lbi1V
UzppbXBldmVudApVSUQ6ODIxNTQ4MDYtM2I4OS00NjQ0LTk1ZDgtMzJkYjA0N2FhMzBiClNVTU1B
Ulk7TEFOR1VBR0U9ZW4tVVM6SW1wRXZlbnQKRFRTVEFSVDtUWklEPUVhc3Rlcm4gU3RhbmRhcmQg
VGltZToyMDIwMDkwM1QyMjE1MDAKRFrftkQ7VFpJRD1FYXN0ZXJuIFN0YW5kYXJkIFRpbWU6MjAy
MDA5MDNUMjIzMDAwCkNMQVNTOlBVQkxJQwpQUklPUklUWTo1CkRUU1RBTVA6MjAyMDA5MDRUMTU0
MDU0WgpUUkFOU1A6T1BBUVVFClNUQVRVUzpDT05GSVJNRUQKU0VRVUVOQ0U6MApMT0NBVElPTjtM
QU5HVUFHRT1lbi1VUzoKWC1NSUNST1NPRlQtQ0RPLUFQUFQtU0VRVUVOQ0U6MApYLU1JQ1JPU09G
VC1DRE8tT1dORVJBUFBUSUQ6MjExODY5Mjc0MwpYLU1JQ1JPU09GVC1DRE8tQlVTWVNUQVRVUzpU
RU5UQVRJVkUKWC1NSUNST1NPRlQtQ0RPLUlovEVOREVEU1RBVFVTOkJVU1kKWC1NSUNST1NPRlQt
Q0RPLUFMTERBWUVWRU5UOkZBTFNFClgtTUlDUk9TT0ZULUNETy1JTVBPUlRBTkNFOjEKWC1NSUNS
T1NPRlQtQ0RPLUlOU1RUWVBFOjAKWC1NSUNST1NPRlQtT05MSU5FTUVFVElOR0VYVEVSTkFMTElO
SzoKWC1NSUNST1NPRlQtT05MSU5FTUVFVElOR0NPTkZMSU5LOgpYLU1JQ1JPU09GVC1ET05PVEZP
UldBUkRNRUVUSU5HOkZBTFNFClgtTUlDUk9TT0ZULURJU0FMTE9XLUNPVU5URVI6RkFMU0UKWC1N
SUNST1NPRlQtTE9DQVRJT05TOltdCkJFR0lOOlZBTEFSTQpERVNDUklQVElPTjpSRU1JTkRFUgpU
UklHR0VSO1JFTEFURUQ9U1RBUlQ6LVBUMTVNCkFDVElPTjpESVNQTEFZCkVORDpWQUxBUk0KRU5E
OlZFVkVOVApFTkQ6VkNBTEVOREFSCg==
--===============3470341632134321988==--
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)