#!/usr/bin/env python3

# Simple SMTP interface
import smtplib

# Import the email modules we'll need
from email.mime.text import MIMEText

__SENDER__ = 'Projects <apsite@apache.org>'
__RECIPIENTS__ = 'Site Development <site-dev@apache.org>'
__REPLY_TO__ = 'site-dev@apache.org'

def sendMail(subject, body='', recipients=__RECIPIENTS__, sender=__SENDER__, port=25, replyTo=__REPLY_TO__):
    # Create a text/plain message
    msg = MIMEText(body)
    msg['Subject'] = subject
    msg['From'] = sender
    if isinstance(recipients, str):
        msg['To'] = recipients
    else:
        msg['To'] = ",".join(recipients)
    if replyTo != None:
        msg['Reply-To'] = replyTo
    smtp = smtplib.SMTP('localhost', port)
#     smtp.set_debuglevel(True)
    smtp.sendmail(sender, recipients, msg.as_string())
    smtp.quit()

def main():
    import sys
    port = 25
    if len(sys.argv) > 1: # argv[0] is the script name
        port = int(sys.argv[1])
    # for testing locally:
    # sudo postfix start # MacoxX
    # or start a debug server => need to change the SMTP port
    # python -m smtpd -n -c DebuggingServer localhost:1025
    sendMail('Test message, please ignore', "Thanks!", port=port)
    print("Sent")
    sendMail('Another Test message, please ignore', "Thanks again!", recipients=['a.b.c','d.e.f'], port=port)
    print("Sent second")

if __name__ == '__main__':
    main()
