windows - Hvordan får man den nuværende bruger e-mail-adresse til Python fejlrapportering?

Indlæg af Hanne Mølgaard Plasc

Problem



Vi bruger i øjeblikket et superbaseret Python-script, som jeg fandt online for et stykke tid siden for at sende en fejlrapport via HTML fra ud af departementets e-mail-adresse. Men som det står i øjeblikket, sender den emailen fra vores e-mail-adresse til vores email-adresse. Jeg håber, at der kan være en måde at sende e-mailen fra den aktuelle brugeres adresse. Her er hvad vi har:


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


Så bruger vi et simpelt forsøg/undtagen execfile script til at køre alt fra:


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


Det er her, hvor vi definerer den adresse, vi sender til:


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


Er der en slags AD-script, som vi kan implementere her? Vi har ca. 30 personer, der bruger vores processer, så når der opstår en fejl, får vi kun en mail med fejlen og ingen henvisning til, hvem den tilhører.

Bedste reference


Det er ikke nemt at arbejde med AD i Python, og det er endnu sværere at gøre uden at installere nogen tredjepartsmoduler.


Ville tilføje det brugernavn, der kørte scriptet i e-mail-kropet eller emnet, være tilstrækkeligt i stedet for ?:


import getpass

user = getpass.getuser()


Så i execfile scriptet:


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


Det er vigtigt at bemærke, at dette ikke bør bruges til legitime autentificeringsformål, da det ikke beskytter mod brugernes spoofing og lignende.

Andre referencer 1


Det lyder som om du har brug for at gruppere dine modtagere, dvs. du kan have en gruppe for ingeniører, kvalitetssikring, forretningsudvikling, ledelse mv.
hvor hver gruppe er repræsenteret af en liste over e-mailadresser.


På denne måde, når der opstår en fejl, kan du sende en menneskelig læsbar email, der beskriver problemet til kvalitetssikringsgruppen.


Hvad angår ingeniørerne, kan du sende en mere teknisk e-mail, der ikke kun indeholder de menneskelige læsbare fejlbeskrivelser, men også en ekstra stakkespor. Når en ingeniør forsøger at fejlfinding en fejlmeddelelse mere, er det bedre.


Hvad angår forretningsudviklings- og ledelsesgruppen, skal de sandsynligvis ikke modtage e-mails om fejl.


håber det hjælper.