1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
|
#------------------------------------------------------------------------------
# Copyright (c) 2005, Enthought, Inc.
# All rights reserved.
#
# This software is provided without warranty under the terms of the BSD
# license included in enthought/LICENSE.txt and may be redistributed only
# under the conditions described in the aforementioned license. The license
# is also available online at http://www.enthought.com/licenses/BSD.txt
# Thanks for using Enthought open source!
#
# Author: Enthought, Inc.
# Description: <Enthought logger package component>
#------------------------------------------------------------------------------
# Standard library imports.
import logging
import os
# Enthought library imports.
from enthought.util.home_directory import get_home_directory
# Setup a logger for this module.
logger = logging.getLogger(__name__)
def create_email_message(fromaddr, toaddrs, ccaddrs, subject, priority,
include_project=False, stack_trace="", comments=""):
# format a message suitable to be sent to the Roundup bug tracker
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from email.MIMEBase import MIMEBase
message = MIMEMultipart()
message['Subject'] = "%s [priority=%s]" % (subject, priority)
message['To'] = ', '.join(toaddrs)
message['Cc'] = ', '.join(ccaddrs)
message['From'] = fromaddr
message.preamble = 'You will not see this in a MIME-aware mail reader.\n'
message.epilogue = ' ' # To guarantee the message ends with a newline
# First section is simple ASCII data ...
m = []
m.append("Bug Report")
m.append("==============================")
m.append("")
if len(comments) > 0:
m.append("Comments:")
m.append("========")
m.append(comments)
m.append("")
if len(stack_trace) > 0:
m.append("Stack Trace:")
m.append("===========")
m.append(stack_trace)
m.append("")
msg = MIMEText('\n'.join(m))
message.attach(msg)
# Include the log file ...
if True:
try:
log = os.path.join(get_home_directory(), 'envisage.log')
f = open(log, 'r')
entries = f.readlines()
f.close()
ctype = 'application/octet-stream'
maintype, subtype = ctype.split('/', 1)
msg = MIMEBase(maintype, subtype)
msg = MIMEText(''.join(entries))
msg.add_header('Content-Disposition', 'attachment', filename='logfile.txt')
message.attach(msg)
except:
logger.exception('Failed to include log file with message')
# Include the environment variables ...
if True:
"""
Transmit the user's environment settings as well. Main purpose is to
work out the user name to help with following up on bug reports and
in future we should probably send less data.
"""
try:
entries = []
for key, value in os.environ.iteritems():
entries.append('%30s : %s\n' % (key, value))
ctype = 'application/octet-stream'
maintype, subtype = ctype.split('/', 1)
msg = MIMEBase(maintype, subtype)
msg = MIMEText(''.join(entries))
msg.add_header('Content-Disposition', 'attachment', filename='environment.txt')
message.attach(msg)
except:
logger.exception('Failed to include environment variables with message')
# FIXME: no project plugins exist for Envisage 3, yet, and this isn't the right
# way to do it, either. See the docstring of attachments.py.
# # Attach the project if requested ...
# if include_project:
# from attachments import Attachments
# try:
# attachments = Attachments(message)
# attachments.package_any_relevant_files()
# except:
# logger.exception('Failed to include workspace files with message')
return message
|