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?
/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()