def sendsimplemail( fromaddr, toaddr, text, reply_to, subject, message_id, in_reply_to=None): from allura import model as M if fromaddr is None: fromaddr = u'*****@*****.**' elif '@' not in fromaddr: log.warning('Looking up user with fromaddr: %s', fromaddr) user = M.User.query.get(_id=ObjectId(fromaddr)) if not user: log.warning('Cannot find user with ID: %s', fromaddr) fromaddr = u'*****@*****.**' else: fromaddr = user.email_address_header() plain_msg = mail_util.encode_email_part(text, 'plain') html_text = g.forge_markdown(email=True).convert(text) html_msg = mail_util.encode_email_part(html_text, 'html') multi_msg = mail_util.make_multipart_message(plain_msg, html_msg) smtp_client.sendmail( [toaddr], fromaddr, reply_to, subject, message_id, in_reply_to, multi_msg)
def sendmail(fromaddr, destinations, text, reply_to, subject, message_id, in_reply_to=None): from allura import model as M addrs_plain = [] addrs_html = [] addrs_multi = [] if fromaddr is None: fromaddr = u'*****@*****.**' elif '@' not in fromaddr: log.warning('Looking up user with fromaddr: %s', fromaddr) user = M.User.query.get(_id=ObjectId(fromaddr)) if not user: log.warning('Cannot find user with ID: %s', fromaddr) fromaddr = u'*****@*****.**' else: fromaddr = user.email_address_header() # Divide addresses based on preferred email formats for addr in destinations: if mail_util.isvalid(addr): addrs_plain.append(addr) else: try: user = M.User.query.get(_id=ObjectId(addr)) if not user: log.warning('Cannot find user with ID: %s', addr) continue except: log.exception('Error looking up user with ID: %r' % addr) continue addr = user.email_address_header() if not addr and user.email_addresses: addr = user.email_addresses[0] log.warning('User %s has not set primary email address, using %s', user._id, addr) if not addr: log.error("User %s (%s) has not set any email address, can't deliver", user._id, user.username) continue if user.get_pref('email_format') == 'plain': addrs_plain.append(addr) elif user.get_pref('email_format') == 'html': addrs_html.append(addr) else: addrs_multi.append(addr) plain_msg = mail_util.encode_email_part(text, 'plain') html_text = g.forge_markdown(email=True).convert(text) html_msg = mail_util.encode_email_part(html_text, 'html') multi_msg = mail_util.make_multipart_message(plain_msg, html_msg) smtp_client.sendmail( addrs_multi, fromaddr, reply_to, subject, message_id, in_reply_to, multi_msg) smtp_client.sendmail( addrs_plain, fromaddr, reply_to, subject, message_id, in_reply_to, plain_msg) smtp_client.sendmail( addrs_html, fromaddr, reply_to, subject, message_id, in_reply_to, html_msg)
def test_markdown(): 'Just a test to get coverage in our markdown extension' h.set_context('test', 'wiki', neighborhood='Projects') assert '<a href=' in g.markdown.convert('# Foo!\n[Home]') assert '<a href=' not in g.markdown.convert('# Foo!\n[Rooted]') assert '<a href=' in g.markdown.convert('This is http://sf.net') tgt = 'http://everything2.com/?node=nate+oostendorp' s = g.markdown.convert('This is %s' % tgt) assert_equal( s, '<div class="markdown_content"><p>This is <a href="%s" rel="nofollow">%s</a></p></div>' % (tgt, tgt)) assert '<a href=' in g.markdown.convert('This is http://sf.net') # assert '<a href=' in g.markdown_wiki.convert('This is a WikiPage') # assert '<a href=' not in g.markdown_wiki.convert('This is a WIKIPAGE') assert '<br' in g.markdown.convert('Multi\nLine'), g.markdown.convert( 'Multi\nLine') assert '<br' not in g.markdown.convert('Multi\n\nLine') r = g.markdown.convert('[[projects]]') assert '[[projects]]' in r, r with h.push_context( M.Neighborhood.query.get( name='Projects').neighborhood_project._id): r = g.markdown_wiki.convert('[[projects]]') assert '<div class="border card">' in r, r r = g.markdown.convert('[[include ref=Home id=foo]]') assert '<div id="foo">' in r, r assert 'href="../foo"' in g.markdown.convert('[My foo](foo)') assert 'href="..' not in g.markdown.convert('[My foo](./foo)') h.set_context('--init--', 'wiki', neighborhood='Projects') r = g.markdown_wiki.convert('[[neighborhood_feeds tool_name=Wiki]]') assert 'WikiPage Home modified by Test Admin' in r, r g.markdown.convert("<class 'foo'>") # should not raise an exception assert '<br>' not in g.markdown.convert('''# Header Some text in a regular paragraph :::python for i in range(10): print i ''') assert 'http://localhost/' in g.forge_markdown( email=True).convert('[Home]') assert 'class="codehilite"' in g.markdown.convert(''' ~~~~ def foo(): pass ~~~~''')
def test_markdown(): 'Just a test to get coverage in our markdown extension' h.set_context('test', 'wiki', neighborhood='Projects') assert '<a href=' in g.markdown.convert('# Foo!\n[Home]') assert '<a href=' not in g.markdown.convert('# Foo!\n[Rooted]') assert '<a href=' in g.markdown.convert('This is http://sf.net') tgt = 'http://everything2.com/?node=nate+oostendorp' s = g.markdown.convert('This is %s' % tgt) assert_equal( s, '<div class="markdown_content"><p>This is <a href="%s" rel="nofollow">%s</a></p></div>' % (tgt, tgt)) assert '<a href=' in g.markdown.convert('This is http://sf.net') # assert '<a href=' in g.markdown_wiki.convert('This is a WikiPage') # assert '<a href=' not in g.markdown_wiki.convert('This is a WIKIPAGE') assert '<br' in g.markdown.convert('Multi\nLine'), g.markdown.convert('Multi\nLine') assert '<br' not in g.markdown.convert('Multi\n\nLine') r = g.markdown.convert('[[projects]]') assert '[[projects]]' in r, r with h.push_context(M.Neighborhood.query.get(name='Projects').neighborhood_project._id): r = g.markdown_wiki.convert('[[projects]]') assert '<div class="border card">' in r, r r = g.markdown.convert('[[include ref=Home id=foo]]') assert '<div id="foo">' in r, r assert 'href="../foo"' in g.markdown.convert('[My foo](foo)') assert 'href="..' not in g.markdown.convert('[My foo](./foo)') h.set_context('--init--', 'wiki', neighborhood='Projects') r = g.markdown_wiki.convert('[[neighborhood_feeds tool_name=Wiki]]') assert 'WikiPage Home modified by Test Admin' in r, r g.markdown.convert("<class 'foo'>") # should not raise an exception assert '<br>' not in g.markdown.convert('''# Header Some text in a regular paragraph :::python for i in range(10): print i ''') assert 'http://localhost/' in g.forge_markdown(email=True).convert('[Home]') assert 'class="codehilite"' in g.markdown.convert(''' ~~~~ def foo(): pass ~~~~''')
def sendsimplemail(fromaddr, toaddr, text, reply_to, subject, message_id, in_reply_to=None): from allura import model as M if fromaddr is None: fromaddr = u'*****@*****.**' elif '@' not in fromaddr: log.warning('Looking up user with fromaddr %s', fromaddr) user = M.User.query.get(_id=ObjectId(fromaddr)) if not user: log.warning('Cannot find user with ID %s', fromaddr) fromaddr = u'*****@*****.**' else: fromaddr = user.email_address_header() plain_msg = mail_util.encode_email_part(text, 'plain') html_text = g.forge_markdown(email=True).convert(text) html_msg = mail_util.encode_email_part(html_text, 'html') multi_msg = mail_util.make_multipart_message(plain_msg, html_msg) smtp_client.sendmail([toaddr], fromaddr, reply_to, subject, message_id, in_reply_to, multi_msg)
def sendmail(fromaddr, destinations, text, reply_to, subject, message_id, in_reply_to=None): from allura import model as M addrs_plain = [] addrs_html = [] addrs_multi = [] if fromaddr is None: fromaddr = u'*****@*****.**' elif '@' not in fromaddr: log.warning('Looking up user with fromaddr %s', fromaddr) user = M.User.query.get(_id=ObjectId(fromaddr)) if not user: log.warning('Cannot find user with ID %s', fromaddr) fromaddr = u'*****@*****.**' else: fromaddr = user.email_address_header() # Divide addresses based on preferred email formats for addr in destinations: if mail_util.isvalid(addr): addrs_plain.append(addr) else: try: user = M.User.query.get(_id=ObjectId(addr)) if not user: log.warning('Cannot find user with ID %s', addr) continue except: log.exception('Error looking up user with ID %r' % addr) continue addr = user.email_address_header() if not addr and user.email_addresses: addr = user.email_addresses[0] log.warning( 'User %s has not set primary email address, using %s', user._id, addr) if not addr: log.error( "User %s (%s) has not set any email address, can't deliver", user._id, user.username) continue if user.get_pref('email_format') == 'plain': addrs_plain.append(addr) elif user.get_pref('email_format') == 'html': addrs_html.append(addr) else: addrs_multi.append(addr) plain_msg = mail_util.encode_email_part(text, 'plain') html_text = g.forge_markdown(email=True).convert(text) html_msg = mail_util.encode_email_part(html_text, 'html') multi_msg = mail_util.make_multipart_message(plain_msg, html_msg) smtp_client.sendmail(addrs_multi, fromaddr, reply_to, subject, message_id, in_reply_to, multi_msg) smtp_client.sendmail(addrs_plain, fromaddr, reply_to, subject, message_id, in_reply_to, plain_msg) smtp_client.sendmail(addrs_html, fromaddr, reply_to, subject, message_id, in_reply_to, html_msg)