2012-04-14 29 views
13

Tôi đã tạo một kịch bản shutdown.py tắt máy tính của mình khi được thực hiện. Tôi cũng đã tạo ra một quy tắc trong Microsoft Outlook thực hiện kịch bản Python của tôi khi tôi nhận được một email có% BLAHBLAHBLAH% trong chủ đề. Tôi đã thử nghiệm nó ra và nó hoạt động hoàn hảo; tuy nhiên, câu hỏi của tôi cho tất cả các bạn là: có thể truyền dòng chủ đề của email vào tập lệnh Python trước khi thực hiện nó không? Về cơ bản, tôi muốn có một từ khóa trong dòng chủ đề sẽ thực thi một kịch bản nhất định nhưng cũng có thể "chuyển" các tham số vào dòng tiêu đề của email mà kịch bản Python sẽ sử dụng. Ví dụ nếu tôi đã gửi% shutdown30% tập lệnh python của tôi sẽ có thể phân tích cú pháp chuỗi% shutdown30% và sử dụng 30 làm tham số để tắt máy tính trong 30 phút.Microsoft Outlook Tạo Quy tắc Chạy Ứng dụng/Tập lệnh Python

Cảm ơn trước cho bất kỳ lời khuyên/ý kiến ​​/ góp ý/câu trả lời :)

+0

Tôi không biết Outlook có thể làm gì nhưng python chắc chắn có thể lấy đối số dòng lệnh. Kiểm tra sys.argv http://docs.python.org/library/sys.html#sys.argv Nếu bạn có thể làm cho triển vọng làm một cái gì đó như python shutdown.py% subject% thì sys.argv sẽ hoạt động. – joshcartme

+0

Cảm ơn, nhưng đó không thực sự là những gì tôi đang tìm kiếm. Outlook cho phép bạn tạo quy tắc. Bạn có thể tạo quy tắc cho biết chạy ứng dụng này nếu bạn nhận được email có "BLAH" trong chủ đề. Vì vậy, các email nhận được với các chủ đề quy định gây nên kịch bản python, câu hỏi là có cách nào để cung cấp cho python cảnh của –

+0

nhận được chủ đề. Tôi đoán không, nhưng có lẽ ai đó nhận thức được điều gì đó tôi không. Cảm ơn phản ứng của bạn mặc dù! –

Trả lời

32

Tại sao tạo ra một quy tắc trong quan điểm rằng chạy một kịch bản nếu một email được nhận, khi bạn chỉ có thể làm tất cả từ python.

Sử dụng Python để theo dõi triển vọng cho tất cả email đến và sau đó thực thi một số mã nếu email, với% BLAHBLAH% trong chủ đề, được nhận là có thể. Dưới đây là ví dụ:

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

Tài nguyên tuyệt vời! Tôi không có ý tưởng rằng Outlook có thể được sử dụng theo cách này. Điều này mở ra vô số cơ hội. –

+2

Vâng, điều này thật tuyệt vời. Làm thế nào một trong những đi về nền tảng này, có thể là một dịch vụ hoặc một cái gì đó? Vì vậy, nó không chiếm một cửa sổ lệnh. – Sushisource

+1

Điều này có vẻ rất thú vị, nhưng bất cứ ai có thể vui lòng giải thích thêm về những gì DispatchWithEvents làm (và làm thế nào nó khác với Dispatch), và làm thế nào mỗi phần của kịch bản trên hoạt động? Tôi tìm thấy ít trên Google cho DispatchWithEvents trong cách hướng dẫn, vì vậy bất kỳ trợ giúp sẽ là tuyệt vời! – wardw123

Các vấn đề liên quan