1 #!/usr/bin/env python 2 3 from email.mime.message import MIMEMessage 4 from email.mime.multipart import MIMEMultipart 5 from email.mime.text import MIMEText 6 from smtplib import LMTP, SMTP 7 8 MESSAGE_SENDER = "imip-agent@example.com" 9 10 MESSAGE_SUBJECT = "Calendar system message" 11 12 MESSAGE_TEXT = """\ 13 This is a response to a calendar message sent by your calendar program. 14 """ 15 16 PREAMBLE_TEXT = """\ 17 This message contains several different parts, one of which will contain 18 calendar information that will only be understood by a suitable program. 19 """ 20 21 class Messenger: 22 23 "Sending of outgoing messages." 24 25 def __init__(self, sender=None, subject=None, body_text=None, preamble_text=None): 26 self.sender = sender or MESSAGE_SENDER 27 self.subject = subject or MESSAGE_SUBJECT 28 self.body_text = body_text or MESSAGE_TEXT 29 self.preamble_text = preamble_text or PREAMBLE_TEXT 30 31 def sendmail(self, recipients, data, sender=None, lmtp_socket=None): 32 33 """ 34 Send a mail to the given 'recipients' consisting of the given 'data', 35 using the given 'sender' identity if indicated, delivering to a local 36 mail system using LMTP if 'lmtp_socket' is provided. 37 """ 38 39 if lmtp_socket: 40 smtp = LMTP(lmtp_socket) 41 else: 42 smtp = SMTP("localhost") 43 44 smtp.sendmail(sender or self.sender, recipients, data) 45 smtp.quit() 46 47 def make_message(self, parts, recipients, sender=None): 48 49 """ 50 Make a message from the given 'parts' for the given 'recipients', using 51 the given 'sender' identity if indicated. 52 """ 53 54 message = MIMEMultipart("mixed", _subparts=parts) 55 message.preamble = self.preamble_text 56 payload = message.get_payload() 57 payload.insert(0, MIMEText(self.body_text)) 58 59 message["From"] = sender or self.sender 60 for recipient in recipients: 61 message["To"] = recipient 62 message["Subject"] = self.subject 63 64 return message 65 66 def wrap_message(self, msg, parts): 67 68 "Wrap 'msg' and provide the given 'parts' as the primary content." 69 70 message = MIMEMultipart("mixed", _subparts=parts) 71 message.preamble = self.preamble_text 72 payload = message.get_payload() 73 payload.insert(0, MIMEText(self.body_text)) 74 payload.append(MIMEMessage(msg)) 75 76 message["From"] = msg["From"] 77 message["To"] = msg["To"] 78 message["Subject"] = msg["Subject"] 79 80 return message 81 82 # vim: tabstop=4 expandtab shiftwidth=4