| import smtplib, email.Message, socket, portage_exception |
| |
| def process(mysettings, cpv, logentries, fulltext): |
| mymailhost = "localhost" |
| mymailport = 25 |
| mymailuser = "" |
| mymailpasswd = "" |
| myrecipient = "root@localhost" |
| |
| # Syntax for PORTAGE_LOG_MAILURI (if defined): |
| # adress [[user:passwd@]mailserver[:port]] |
| # where adress: recipient adress |
| # user: username for smtp auth (defaults to none) |
| # passwd: password for smtp auth (defaults to none) |
| # mailserver: smtp server that should be used to deliver the mail (defaults to localhost) |
| # port: port to use on the given smtp server (defaults to 25, values > 100000 indicate that starttls should be used on (port-100000)) |
| if "PORTAGE_ELOG_MAILURI" in mysettings.keys(): |
| if " " in mysettings["PORTAGE_ELOG_MAILURI"]: |
| myrecipient, mymailuri = mysettings["PORTAGE_ELOG_MAILURI"].split() |
| if "@" in mymailuri: |
| myauthdata, myconndata = mymailuri.rsplit("@", 1) |
| try: |
| mymailuser,mymailpasswd = myauthdata.split(":") |
| except ValueError: |
| print "!!! invalid SMTP AUTH configuration, trying unauthenticated ..." |
| else: |
| myconndata = mymailuri |
| if ":" in myconndata: |
| mymailhost,mymailport = myconndata.split(":") |
| else: |
| mymailhost = myconndata |
| else: |
| myrecipient = mysettings["PORTAGE_ELOG_MAILURI"] |
| try: |
| mymessage = email.Message.Message() |
| mymessage.set_unixfrom("portage") |
| mymessage.set_payload(fulltext) |
| mymessage["To"] = myrecipient |
| mymessage["Subject"] = "[portage] Ebuild log for %s" % cpv |
| |
| if int(mymailport) > 100000: |
| myconn = smtplib.SMTP(mymailhost, int(mymailport) - 100000) |
| myconn.starttls() |
| else: |
| myconn = smtplib.SMTP(mymailhost, mymailport) |
| if mymailuser != "" and mymailpasswd != "": |
| myconn.login(mymailuser, mymailpasswd) |
| myconn.sendmail("portage", myrecipient, mymessage.as_string()) |
| myconn.quit() |
| except smtplib.SMTPException, e: |
| raise portage_exception.PortageException("!!! An error occured while trying to send logmail:\n"+str(e)) |
| except socket.error, e: |
| raise portage_exception.PortageException("!!! A network error occured while trying to send logmail:\n"+str(e)+"\nSure you configured PORTAGE_LOG_MAILURI correctly?") |
| return |