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 = "resources+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 class Messenger: 17 18 "Sending of outgoing messages." 19 20 def __init__(self, sender=None, subject=None, body_text=None): 21 self.sender = sender or MESSAGE_SENDER 22 self.subject = subject or MESSAGE_SUBJECT 23 self.body_text = body_text or MESSAGE_TEXT 24 25 def sendmail(self, recipients, data, sender=None, lmtp_socket=None): 26 27 """ 28 Send a mail to the given 'recipients' consisting of the given 'data', 29 using the given 'sender' identity if indicated, delivering to a local 30 mail system using LMTP if 'lmtp_socket' is provided. 31 """ 32 33 if lmtp_socket: 34 smtp = LMTP(lmtp_socket) 35 else: 36 smtp = SMTP("localhost") 37 38 smtp.sendmail(sender or self.sender, recipients, data) 39 smtp.quit() 40 41 def make_message(self, parts, recipients, sender=None): 42 43 """ 44 Make a message from the given 'parts' for the given 'recipients', using 45 the given 'sender' identity if indicated. 46 """ 47 48 message = MIMEMultipart("mixed", _subparts=parts) 49 message.preamble = self.body_text 50 payload = message.get_payload() 51 payload.insert(0, MIMEText(self.body_text)) 52 53 message["From"] = sender or self.sender 54 for recipient in recipients: 55 message["To"] = recipient 56 message["Subject"] = self.subject 57 58 return message 59 60 def wrap_message(self, msg, parts): 61 62 "Wrap 'msg' and provide the given 'parts' as the primary content." 63 64 message = MIMEMultipart("mixed", _subparts=parts) 65 message.preamble = self.body_text 66 message.get_payload().append(MIMEMessage(msg)) 67 68 message["From"] = msg["From"] 69 message["To"] = msg["To"] 70 message["Subject"] = msg["Subject"] 71 72 return message 73 74 # vim: tabstop=4 expandtab shiftwidth=4