SOLVED 9.10 Nightlies break sendmail

Status
Not open for further replies.

zoomzoom

Guru
Joined
Sep 6, 2015
Messages
677
Anyone else experiencing sendmail issues on the 9.10 nightlies, resulting from /etc/find_alias_for_smtplib.py?
Code:
[root@Fractals] ~# sendmail jw0914@live.com < /tmp/smart_report.tmp

Traceback (most recent call last):
  File "/etc/find_alias_for_smtplib.py", line 12, in <module>
	from django.utils.translation import ugettext_lazy as _
ImportError: No module named django.utils.translation


[root@Fractals] ~# sendmail jw0914@live.com < /tmp/zpool_report.tmp

Traceback (most recent call last):
  File "/etc/find_alias_for_smtplib.py", line 12, in <module>
	from django.utils.translation import ugettext_lazy as _
ImportError: No module named django.utils.translation


[root@Fractals] ~# sendmail jw0914@live.com < /tmp/ups_report.tmp

Traceback (most recent call last):
  File "/etc/find_alias_for_smtplib.py", line 12, in <module>
	from django.utils.translation import ugettext_lazy as _
ImportError: No module named django.utils.translation
  • Line 12: from django.utils.translation import ugettext_lazy as _

/etc/find_alias_for_smtplib.py
Code:
#!/usr/local/bin/python2

import argparse
import email
import email.parser
import os
import re
import socket
import sys
import syslog

from django.utils.translation import ugettext_lazy as _

sys.path.extend(["/usr/local/www", "/usr/local/www/freenasUI"])

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'freenasUI.settings')

import django
django.setup()

from freenasUI.common.system import get_sw_name, send_mail
from freenasUI.system.models import Email

ALIASES = re.compile(r'^(?P<from>[^#]\S+?):\s*(?P<to>\S+)$')


def do_sendmail(msg, to_addrs=None, parse_recipients=False):

	if to_addrs is None:
		if not parse_recipients:
			syslog.syslog('Do not know who to send the message to.' + msg[0:140])
			raise ValueError('Do not know who to send the message to.')
		to_addrs = []

	# XXX: this should probably be a FeedParser because reading from sys.stdin
	# is blocking.
	em_parser = email.parser.Parser()
	em = em_parser.parsestr(msg)
	if parse_recipients:
		# Strip away the comma based delimiters and whitespace.
		to_addrs = list(map(str.strip, em.get('To').split(',')))

	if not to_addrs or not to_addrs[0]:
		to_addrs = ['root']

	if to_addrs:
		aliases = get_aliases()
		to_addrs_repl = []
		for to_addr in to_addrs:
			for to_addr in to_addr.split(','):
				if to_addr.find('@') == -1 and to_addr in aliases:
					to_addr = aliases[to_addr]
				to_addrs_repl.append(to_addr)

	margs = {}
	margs['extra_headers'] = dict(em)
	margs['extra_headers'].update({
		'X-Mailer': get_sw_name(),
		'X-%s-Host' % get_sw_name(): socket.gethostname(),
		'To': to_addr,
	})
	margs['subject'] = em.get('Subject')

	# abusive use of querysets
	lemail = Email.objects.all()
	for obj in lemail:
		if obj.em_fromemail != '':
			margs['extra_headers'].update({
			   'From': obj.em_fromemail
			})

	if em.is_multipart():
		margs['attachments'] = [part for part in em.walk() if part.get_content_maintype() != 'multipart']
		margs['text'] = "%s" % _(
			'This is a MIME formatted message.  If you see '
			'this text it means that your email software '
			'does not support MIME formatted messages.')
	else:
		margs['text'] = ''.join(email.iterators.body_line_iterator(em))

	if to_addrs_repl:
		margs['to'] = to_addrs_repl

	send_mail(**margs)


def get_aliases():
	with open('/etc/aliases', 'r') as f:
		aliases = {}

		for line in f.readlines():
			search = ALIASES.search(line)
			if search:
				_from, _to = search.groups()
				aliases[_from] = _to

		doround = True
		while True:
			if not doround:
				break
			else:
				doround = False
			for key, val in aliases.items():
				if val in aliases:
					aliases[key] = aliases[val]
					doround = True
		return aliases


def main():
	syslog.openlog(logoption=syslog.LOG_PID, facility=syslog.LOG_MAIL)
	parser = argparse.ArgumentParser(description='Process email')
	parser.add_argument('-i', dest='strip_leading_dot', action='store_false',
						default=True, help='see sendmail(8) -i')
	parser.add_argument('-t', dest='parse_recipients', action='store_true',
						default=False,
						help='parse recipients from message')
	parser.usage = ' '.join(parser.format_usage().split(' ')[1:-1])
	parser.usage += ' [email_addr|user] ..'
	args, to = parser.parse_known_args()
	if not to and not args.parse_recipients:
		parser.exit(message=parser.format_usage())
	msg = sys.stdin.read()
	syslog.syslog("sending mail to " + ','.join(to) + msg[0:140])
	do_sendmail(msg, to_addrs=to, parse_recipients=args.parse_recipients)

if __name__ == "__main__":
	main()

 
D

dlavigne

Guest
Please create a bug report at bugs.freenas.org and post the issue number here.
 

zoomzoom

Guru
Joined
Sep 6, 2015
Messages
677

zoomzoom

Guru
Joined
Sep 6, 2015
Messages
677
That was extremely fast, thanks! =]
 
Status
Not open for further replies.
Top