2011-08-17 1 views
4

J'essaie de créer automatiquement un ensemble de règles Outlook. J'utilise Python 2.7, win32com et Outlook 2007. Pour ce faire, je dois créer un nouvel objet Rule et spécifier un dossier pour son action de déplacement. Cependant, je ne peux pas définir la propriété Folder avec succès - il reste simplement None, même si je donne un objet du bon type.Définition d'une propriété à l'aide de win32com

import win32com.client 
from win32com.client import constants as const 

o = win32com.client.gencache.EnsureDispatch("Outlook.Application") 
rules = o.Session.DefaultStore.GetRules() 

rule = rules.Create("Python rule test", const.olRuleReceive) 
condition = rule.Conditions.MessageHeader 
condition.Text = ('Foo', 'Bar') 
condition.Enabled = True 

root_folder = o.GetNamespace('MAPI').Folders.Item(1) 
foo_folder = root_folder.Folders['Notifications'].Folders['Foo'] 

move = rule.Actions.MoveToFolder 
print foo_folder 
print move.Folder 
move.Folder = foo_folder 
print move.Folder 

# move.Enabled = True 
# rules.Save() 

Prints

 
<win32com.gen_py.Microsoft Outlook 12.0 Object Library.MAPIFolder instance at 0x51634584> 
None 
None 

J'ai regardé le code généré par makepy lors de l'utilisation win32com en mode non dynamique. La classe _MoveOrCopyRuleAction a une entrée pour 'Folder' dans sa dict _prop_map_put_, mais à part ça, je suis perplexe.

+0

J'ai ce travail avec IronPython. J'avais besoin d'utiliser: Outlook._MoveOrCopyRuleAction.Folder.SetValue (rule.Actions.MoveToFolder, dossier). Néanmoins, j'aimerais toujours voir une réponse win32com. – PAG

+0

Je reçois un objet d'erreur n'a pas d'attribut 'DefaultStore' lors de l'exécution ci-dessus. Est-ce qu'il me manque un magasin de règles? QU'en est-il un? Est-ce que l'application SetFolder() dans win32com fonctionne aussi sur les objets utilisés par IronPython? –

Répondre

2

Essayez SetFolder()

Je pense que d'une lecture superficielle de votre SetFolder try code (move, foo_folder)

win32com fait un peu de magie incroyable, mais parfois des objets COM défaite juste. lorsque l'objet ne peut pas suivre la convention pythonique, les coulisses d'un setter et getter est créé de la forme Set {name} Get {name}

voir: http://permalink.gmane.org/gmane.comp.python.windows/3231 NB - Mark Hammonds comment déboguer com n'a pas de prix - ce genre de choses est juste caché dans les groupes d'utilisation ...

+0

SetFolder sur quel objet? 'print move.SetFolder' soulève une AttributeError – PAG

Questions connexes