#!/usr/bin/env python import sys import smtplib import dns.resolver from email.MIMEMultipart import MIMEMultipart from email.MIMEText import MIMEText # Lookup a domain and get its mailserver def get_mx_record(domain): hosts = [] try: records = dns.resolver.query(domain, "MX") for rdata in records: hosts.append(str(rdata.exchange).rstrip('.')) return hosts except (dns.resolver.NXDOMAIN, dns.resolver.NoAnswer, dns.exception.Timeout) as e: print e if (hosts): return hosts[0] else: return None def send_email_direct(email_from, email_to, subject, body): # find the appropiate mail server domain = email_to.split('@')[1] remote_server = get_mx_record(domain) if (remote_server is None): print "No valid email server could be found for [%s]!" % (email_to) return # connect to remote mail server and forward message on server = smtplib.SMTP(remote_server, 25) msg = MIMEMultipart() msg['From'] = email_from msg['To'] = email_to msg['Subject'] = subject msg.attach(MIMEText(body, 'plain')) smtp_sendmail_return = "" try: smtp_sendmail_return = server.sendmail(email_from, email_to, msg.as_string()) except Exception, e: print 'SMTP Exception:\n' + str( e) + '\n' + str( smtp_sendmail_return) finally: server.quit() def loademails(filename): with open(filename, 'r') as f: return f.read().splitlines() def loadbody(filename): with open(filename, 'r') as f: return f.read() if __name__ == "__main__": def usage(): print "%s <from emailaddress> <subject> <to emailaddress file> <email body file>" % (sys.argv[0]) if (len(sys.argv) <> 5): usage() sys.exit(0) fromemail = sys.argv[1] subject = sys.argv[2] emailfile = sys.argv[3] bodyfile = sys.argv[4] body = loadbody(bodyfile) for toemail in loademails(emailfile): send_email_direct(fromemail, toemail, subject, body)