Как отправить сообщение со встроенным изображением И приглашением в формате ICS? - PullRequest
0 голосов
/ 21 октября 2018

Уже несколько дней я пытаюсь отправить сообщение с текстом htlm встроенным изображением и приглашением отформатировать ics безуспешно.

Я могу отправить текст html со встроенным изображением без каких-либо проблем.Я также могу отправить HTML-текст с приглашением.НО, когда я пытаюсь прикрепить изображение, оно не появляется в полученном сообщении.

Спасибо за вашу помощь и совет

Переменные для представления HTML-текста и приглашения ICS предназначены дляпример

ical = """
BEGIN:VCALENDAR
PRODID:pyICSParser
VERSION:2.0
CALSCALE:GREGORIAN
METHOD:REQUEST
BEGIN:VEVENT
DTSTART:20181021T064734Z
DTEND:20181021T074734Z
DTSTAMP:20181020T064734Z
ORGANIZER;CN=DJR:mailto:me@me.com
UID:FIXMEUID20181020T064734Z
ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=TRUE ;CN=me@me.com;X-NUM-GUESTS=0: mailto:me@me.com
CREATED:20181020T064734Z
DESCRIPTION: test invitation
LAST-MODIFIED:20181020T064734Z
LOCATION: mon bureau
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:test 20181021 @ 06:47
TRANSP:OPAQUE
END:VEVENT
END:VCALENDAR
"""

BodyTxt = """
<html>
    <head>
    </head>
    <body>
            Txt blablabla.<br>
        <br />
        <b>
                <img style="width: 92.50px; height: 60.00px; margin-left: 0.00px; margin-top: 0.00px;" src="cid:{}" >
        </b>
    </body>
</html>
"""

ImageName = 'LogoGIE.png'
FileName = './{}'.format(ImageName)
InternalImageName = '{}@{}'.format(ImageName, uuid.uuid4() )
img_data = open(FileName, 'rb').read()

MailMessage = EmailMessage()                  
MailMessage = MIMEMultipart('related')        
MailMessage["Subject"] = "ICS Test"     

msg_alternative = MIMEMultipart('alternative')
MailMessage.attach(msg_alternative)           

msg_text = MIMEText (BodyTxt.format(InternalImageName), 'html')
msg_alternative.attach(msg_text)              

filename = "invite.ics"
ics_part = MIMEBase('text', 'calendar', **{'method' : 'REQUEST', 'name' : filename})
ics_part.set_payload( (ical.replace('\n','\r\n')).encode('utf-8') )  
ics_part.set_type('text/calendar; charset=UTF-8; method=REQUEST; component = VEVENT')
email.encoders.encode_base64(ics_part) 
ics_part.add_header('Content-Type', 'text/calendar')
ics_part.add_header('charset', 'UTF-8')
ics_part.add_header('component', 'VEVENT')
ics_part.add_header('method', 'REQUEST')
ics_part.add_header('Content-class', 'urn:content-classes:appointment')
ics_part.add_header('Content-ID', 'calendar_message')
ics_part.add_header('Content Description', filename)
ics_part.add_header("Filename", filename)
ics_part.add_header("Path", filename)

msg_alternative.attach(ics_part)

msg_img = MIMEImage(img_data, 'png')
msg_img.add_header ('Content-ID', '<{}>'.format(InternalImageName))
msg_img.add_header ('Content-Disposition', 'inline', filename=InternalImageName)

MailMessage.attach(msg_img)

smtp_server = smtplib.SMTP("my_smtpsrv", 25)
smtp_server.sendmail( 'me@me.com', 'me@me.com', MailMessage.as_string() )
smtp_server.close()
...