我们目前正在使用我之前在网上找到的超级基本Python脚本,通过部门电子邮件地址的HTML发送错误报告。但是,就目前情况而言,它会将的电子邮件从我们的电子邮件地址发送到我们的电子邮件地址。我希望可能有某种方式从当前用户的地址发送电子邮件。这是我们得到的:
def sendMail(sender, recipient, subject, html, text):
import MimeWriter, mimetools, cStringIO
import smtplib
out = cStringIO.StringIO()
htmlin = cStringIO.StringIO(html)
txtin = cStringIO.StringIO(text)
writer = MimeWriter.MimeWriter(out)
writer.addheader("From", sender)
writer.addheader("To", recipient)
writer.addheader("Subject", subject)
writer.addheader("MIME-Version", "1.0")
writer.startmultipartbody("alternative")
writer.flushheaders()
subpart = writer.nextpart()
subpart.addheader("Content-Transfer-Encoding", "quoted-printable")
pout = subpart.startbody("text/plain", [("charset", 'us-ascii')])
mimetools.encode(txtin, pout, 'quoted-printable')
txtin.close()
subpart = writer.nextpart()
subpart.addheader("Content-Transfer-Encoding", "quoted-printable")
pout = subpart.startbody("text/html", [("charset", 'us-ascii')])
mimetools.encode(htmlin, pout, 'quoted-printable')
htmlin.close()
writer.lastpart()
msg = out.getvalue()
server = smtplib.SMTP('smtp.office365.com',587)
server.ehlo()
server.starttls()
server.ehlo()
server.login("sample@email.com","sample")
server.sendmail(sender, recipient, msg)
server.quit()
然后我们使用一个简单的try / except execfile脚本来运行以下所有内容:
try:
execfile('\\\\path.py')
except:
print 'ATTENTION: An error has been detected in a script process.'
traceback.print_exc(file=sys.stdout)
import sys, cgitb
recipient =
['sample@email.com','sample2@email.com','sample3@email.com','sample4@email.com']
for rec in recipient:
Utils.sendMail('sample@email.com',
rec,
'ATTENTION: An error has been detected in a script process...',
cgitb.html(sys.exc_info()),
cgitb.text(sys.exc_info()))
sys.exit()
我们在这里定义我们发送的地址:
for rec in recipient:
Utils.sendMail('sample@email.com',
rec,
'ATTENTION: An error has been detected in a script process...',
cgitb.html(sys.exc_info()),
cgitb.text(sys.exc_info()))
sys.exit()
我们可以在这里实现某种AD脚本吗?我们有大约30人使用我们的流程,因此每当弹出错误时,我们得到的是一封错误的电子邮件,而不是它所属的人。
答案 0 :(得分:0)
听起来您需要将收件人分组,即您可以拥有工程师,质量保证,业务开发,管理等小组。 其中每个组由电子邮件地址列表表示。
这种方式发生错误时,您可以向质量保证小组发送描述问题的人类可读电子邮件。
对于工程师,您可能希望发送更具技术性的电子邮件,其中不仅包含人类可读的错误描述,还包含额外的堆栈跟踪。当工程师尝试更多地排除错误消息时,会更好。
至于业务发展和管理小组,他们可能不应该收到有关失败的电子邮件。
希望有所帮助。答案 1 :(得分:0)
在Python中使用AD并不容易,如果不安装任何第三方模块,它就更难了。
添加在电子邮件正文或主题中运行脚本的用户名是否足够?:
import getpass
user = getpass.getuser()
然后在execfile脚本中:
Utils.sendMail(
'sample@email.com',
rec,
'ATTENTION: %s has run a script which has errored...' % user,
cgitb.html(sys.exc_info()),
cgitb.text(sys.exc_info())
)
重要的是要注意,这不应该用于任何合法的身份验证目的,因为它不能防止用户欺骗等等。