2017-02-20 17 views
0

В настоящее время мы используем супер базовый сценарий Python, который я нашел в сети, чтобы отправить отчет об ошибке через HTML из электронного адреса отдела. Однако, поскольку он в настоящее время стоит, он отправляет по электронной почте от наш электронный адрес до наш адрес электронной почты. Я надеюсь, что может быть какой-то способ отправить электронное письмо с адреса текущего пользователя. Вот что у нас получилось:Как получить текущий адрес электронной почты пользователей для отчетов об ошибках Python?

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("[email protected]","sample") 
server.sendmail(sender, recipient, msg) 
server.quit() 

Тогда мы используем простую попытку/за исключением 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 = 
['[email protected]','[email protected]','[email protected]','[email protected]'] 
for rec in recipient: 
    Utils.sendMail('[email protected]', 
     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('[email protected]', 
     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

Нелегко работать с AD на Python, и это даже труднее обойтись без установки сторонних модулей.

Would добавив имя пользователя, который запускал скрипт в теле сообщения электронной почты или предмет, а не хватит ?:

import getpass 

user = getpass.getuser() 

Тогда в ExecFile сценария:

Utils.sendMail(
    '[email protected]', 
    rec, 
    'ATTENTION: %s has run a script which has errored...' % user, 
    cgitb.html(sys.exc_info()), 
    cgitb.text(sys.exc_info()) 
) 

Важно отметить, что это должно не используется для каких-либо законных целей аутентификации, поскольку он не защищает пользователя от спуфинга и т. д.

+0

Это действительно отлично работает, это то, что нам нужно! Полное имя пользователя было бы здорово, но это работает для того, что нам нужно, поскольку мы знаем фамилии всех в нашей команде. –

+0

Добро пожаловать, рад помочь! –

0

Похоже, вам нужно сгруппировать получателей, т. К. У вас может быть группа инженеров, обеспечение качества, развитие бизнеса, управление и т. Д. , где каждая группа представлена ​​списком адресов электронной почты.

Таким образом, при возникновении ошибки вы можете отправить человекообразное письмо, описывающее проблему, группе контроля качества.

Что касается инженеров, вы можете отправить более техническую электронную почту, которая не только содержит описания, доступные для чтения человеком, но и дополнительную трассировку стека. Лучше, если инженер пытается устранить сообщение об ошибке.

Что касается группы развития бизнеса и управления, они, вероятно, не должны получать электронные письма при сбоях.

надеюсь, что это поможет.

+0

Почему вы используете execfile ('\\\\ path.py') вместо импорта path.p у ?? –

+0

Ну, все - аналитик ГИС в нашей команде, но только 3 из нас, которые работают с Python, - это те, кто имеет доступ к этому конкретному адресу электронной почты. Таким образом, только 3 из нас в настоящее время получают сообщения с сообщениями об ошибках, но, поскольку это стоит, мы не знаем, к кому они приходят, пока они не отправят нам сообщение в Skype, сообщающее нам. Я использовал execfile ('\\\\ path.py') вместо того, чтобы импортировать его, потому что файл .py находится не в том же каталоге. У нас есть все наши скрипты, расположенные на отдельном диске. Execfile просто делает его немного проще и сохраняет наши папки более аккуратными. –

+0

Вы проверили заголовок сообщения? Я заметил, что вы предоставили адреса gmail.в gmail вы можете найти более низкую стрелку> показать оригинал и отобразит всю информацию, связанную с этим письмом. –