Changeset View
Changeset View
Standalone View
Standalone View
wallace/modules.py
Show All 14 Lines | |||||
# You should have received a copy of the GNU General Public License | # You should have received a copy of the GNU General Public License | ||||
# along with this program. If not, see <http://www.gnu.org/licenses/>. | # along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
# | # | ||||
import os | import os | ||||
import sys | import sys | ||||
import time | import time | ||||
import traceback | |||||
from email import message_from_string | from email import message_from_string | ||||
from email.message import Message | from email.message import Message | ||||
from email.mime.base import MIMEBase | from email.mime.base import MIMEBase | ||||
from email.mime.message import MIMEMessage | from email.mime.message import MIMEMessage | ||||
from email.mime.multipart import MIMEMultipart | from email.mime.multipart import MIMEMultipart | ||||
from email.mime.text import MIMEText | from email.mime.text import MIMEText | ||||
from email.parser import Parser | from email.parser import Parser | ||||
▲ Show 20 Lines • Show All 80 Lines • ▼ Show 20 Lines | def execute(name, *args, **kw): | ||||
if not modules[name].has_key('function') and \ | if not modules[name].has_key('function') and \ | ||||
not modules[name].has_key('group'): | not modules[name].has_key('group'): | ||||
log.error(_("No such module %r in modules %r (2).") %(name, modules)) | log.error(_("No such module %r in modules %r (2).") %(name, modules)) | ||||
sys.exit(1) | sys.exit(1) | ||||
try: | try: | ||||
return modules[name]['function'](*args, **kw) | return modules[name]['function'](*args, **kw) | ||||
except Exception, errmsg: | except Exception, errmsg: | ||||
log.error(_("Unknown error occurred; %r") % (errmsg)) | log.exception(_("Module %r - Unknown error occurred; %r") % (name, errmsg)) | ||||
log.error("%s" % (traceback.format_exc())) | |||||
def heartbeat(name, *args, **kw): | def heartbeat(name, *args, **kw): | ||||
if not modules.has_key(name): | if not modules.has_key(name): | ||||
log.warning(_("No such module %r in modules %r (1).") % (name, modules)) | log.warning(_("No such module %r in modules %r (1).") % (name, modules)) | ||||
if modules[name].has_key('heartbeat'): | if modules[name].has_key('heartbeat'): | ||||
return modules[name]['heartbeat'](*args, **kw) | return modules[name]['heartbeat'](*args, **kw) | ||||
def _sendmail(sender, recipients, msg): | def _sendmail(sender, recipients, msg): | ||||
# NOTE: Use "127.0.0.1" here for IPv6 (see also the service | # NOTE: Use "127.0.0.1" here for IPv6 (see also the service | ||||
# definition in master.cf). | # definition in master.cf). | ||||
sl = pykolab.logger.StderrToLogger(log) | |||||
smtplib.stderr = sl | |||||
smtp = smtplib.SMTP("127.0.0.1", 10027) | smtp = smtplib.SMTP("127.0.0.1", 10027) | ||||
if conf.debuglevel > 8: | if conf.debuglevel > 8: | ||||
smtp.set_debuglevel(True) | smtp.set_debuglevel(True) | ||||
# Not an infinite loop | # Not an infinite loop | ||||
while True: | while True: | ||||
try: | try: | ||||
smtp.sendmail( | smtp.sendmail( | ||||
sender, | sender, | ||||
recipients, | recipients, | ||||
msg | msg | ||||
) | ) | ||||
smtp.quit() | smtp.quit() | ||||
return True | return True | ||||
vanmeeuwen: This line would prevent `smtp.quit()` and other cleanup from being called. | |||||
except smtplib.SMTPServerDisconnected, errmsg: | except smtplib.SMTPServerDisconnected, errmsg: | ||||
smtp.quit() | smtp.quit() | ||||
smtp.connect() | smtp.connect() | ||||
Not Done Inline ActionsNote that the existing smtplib.SMTP() used to be rebuilt the connection for here. vanmeeuwen: Note that the existing `smtplib.SMTP()` used to be rebuilt the connection for here. | |||||
except smtplib.SMTPDataError, errmsg: | except smtplib.SMTPDataError, errmsg: | ||||
# DEFER | # DEFER | ||||
log.error("SMTP Data Error, %r" % (errmsg)) | log.error("SMTP Data Error, %r" % (errmsg)) | ||||
Not Done Inline ActionsThis does not invoke recreating the smtplib.SMTP() instance, therefore possibly looping? vanmeeuwen: This does not invoke recreating the `smtplib.SMTP()` instance, therefore possibly looping? | |||||
except smtplib.SMTPHeloError, errmsg: | except smtplib.SMTPHeloError, errmsg: | ||||
# DEFER | # DEFER | ||||
log.error("SMTP HELO Error, %r" % (errmsg)) | log.error("SMTP HELO Error, %r" % (errmsg)) | ||||
except smtplib.SMTPRecipientsRefused, errmsg: | except smtplib.SMTPRecipientsRefused, errmsg: | ||||
# REJECT, send NDR | # REJECT, send NDR | ||||
log.error("SMTP Recipient(s) Refused, %r" % (errmsg)) | log.error("SMTP Recipient(s) Refused, %r" % (errmsg)) | ||||
except smtplib.SMTPSenderRefused, errmsg: | except smtplib.SMTPSenderRefused, errmsg: | ||||
# REJECT, send NDR | # REJECT, send NDR | ||||
log.error("SMTP Sender Refused, %r" % (errmsg)) | log.error("SMTP Sender Refused, %r" % (errmsg)) | ||||
except Exception, errmsg: | except Exception, errmsg: | ||||
log.error(_("Unknown error occurred; %r") % (errmsg)) | log.exception(_("SMTP Unknown error occurred: %r") % (errmsg)) | ||||
log.error("%r" % (traceback.format_exc())) | |||||
return False | return False | ||||
def cb_action_HOLD(module, filepath): | def cb_action_HOLD(module, filepath): | ||||
log.info(_("Holding message in queue for manual review (%s by %s)") % (filepath, module)) | log.info(_("Holding message in queue for manual review (%s by %s)") % (filepath, module)) | ||||
def cb_action_DEFER(module, filepath): | def cb_action_DEFER(module, filepath): | ||||
log.info(_("Deferring message in %s (by module %s)") % (filepath, module)) | log.info(_("Deferring message in %s (by module %s)") % (filepath, module)) | ||||
▲ Show 20 Lines • Show All 214 Lines • Show Last 20 Lines |
This line would prevent smtp.quit() and other cleanup from being called.