2012-04-14 89 views
13

He creado un script shutdown.py que apaga mi computadora cuando se ejecuta. También he creado una regla en Microsoft Outlook que ejecuta mi secuencia de comandos de Python cuando recibo un correo electrónico que tiene% BLAHBLAHBLAH% en el asunto. Lo he probado y funciona sin problemas; sin embargo, mi pregunta para todos ustedes es: ¿es posible pasar el asunto del correo electrónico al guión de Python antes de ejecutarlo? Básicamente, quiero tener una palabra clave en la línea de asunto que ejecute una determinada secuencia de comandos, pero también podrá "pasar" parámetros en la línea de asunto del correo electrónico que la secuencia de comandos de Python utilizará. Por ejemplo, si envié% shutdown30%, mi script de python podría analizar la cadena% shutdown30% y usar 30 como parámetro para apagar la computadora en 30 minutos.Microsoft Outlook Crear regla Ejecutar aplicación/script Python

Gracias de antemano por cualquier consejo/comentarios/sugerencias/respuestas :)

+0

No sé lo que Outlook puede hacer, pero python ciertamente puede tomar argumentos de línea de comandos. Consulte sys.argv http://docs.python.org/library/sys.html#sys.argv Si puede hacer que outlook haga algo como python shutdown.py% subject%, entonces sys.argv funcionaría. – joshcartme

+0

Gracias, pero eso no es realmente lo que estoy buscando. Outlook te permite crear reglas. Puede crear una regla que diga ejecutar esta aplicación si recibe un correo electrónico con "BLAH" en el asunto. Entonces, el correo electrónico recibido con el asunto especificado activa el script de python, la pregunta es si hay alguna forma de darle a python la vista del sujeto recibido –

+0

. Supongo que no, pero tal vez alguien sepa algo que yo no soy. ¡Gracias de todos modos por tu respuesta! –

Respuesta

32

Por qué crear una regla en Outlook que se ejecuta una secuencia de comandos si se recibe un correo electrónico, cuando simplemente puede hacerlo todo desde pitón.

El uso de Python para supervisar las perspectivas de todos los correos electrónicos entrantes y luego ejecutar algún código si se recibe un correo electrónico, con% BLAHBLAH% en el asunto, es posible. Aquí hay un ejemplo:

import win32com.client 
import pythoncom 
import re 

class Handler_Class(object): 
    def OnNewMailEx(self, receivedItemsIDs): 
     # RecrivedItemIDs is a collection of mail IDs separated by a ",". 
     # You know, sometimes more than 1 mail is received at the same moment. 
     for ID in receivedItemsIDs.split(","): 
      mail = outlook.Session.GetItemFromID(ID) 
      subject = mail.Subject 
      try: 
       # Taking all the "BLAHBLAH" which is enclosed by two "%". 
       command = re.search(r"%(.*?)%", subject).group(1) 

       print command # Or whatever code you wish to execute. 
      except: 
       pass 


outlook = win32com.client.DispatchWithEvents("Outlook.Application", Handler_Class) 

#and then an infinit loop that waits from events. 
pythoncom.PumpMessages() 
+1

Fantástico recurso! No tenía idea de que Outlook se podría usar de esta manera. Esto abre innumerables oportunidades. –

+2

Sí, esto es increíblemente genial. ¿Cómo va uno a respaldar esto, tal vez como un servicio o algo así? Entonces no está ocupando una ventana de comando. – Sushisource

+1

Esto parece muy bueno, pero ¿podría alguien explicar más sobre lo que hace DispatchWithEvents (y cómo difiere de Dispatch), y cómo funciona cada parte del script anterior? Encontré poco en Google para DispatchWithEvents en forma de tutoriales, ¡así que cualquier ayuda sería genial! – wardw123

Cuestiones relacionadas