implemented first version of outlook.py for MailCrawling

added configuration management for ui using agent.config

folder mails is a proposal how to store mails (contains some samples)

git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@1887 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
scrat 2007-08-08 17:18:44 +00:00
parent 740aeca367
commit 874d96c94b
21 changed files with 1070 additions and 115 deletions

232
agent/.loops.agent.cfg Normal file
View file

@ -0,0 +1,232 @@
crawl[0].content_format = 'text'
crawl[0].filter_criteria = 'sender'
crawl[0].filter_pattern = 'MAIL1'
crawl[0].folder = 'Inbox'
crawl[0].getsubfolder = 'No'
crawl[0].include_attachements = 'Yes'
crawl[0].interval = 'oneTime'
crawl[0].jobid = 'outlook0'
crawl[0].latest = ''
crawl[0].state = 'completed'
crawl[0].type = 'OutlookMail'
crawl[10].content_format = 'text'
crawl[10].filter_criteria = 'sender'
crawl[10].filter_pattern = ''
crawl[10].folder = 'Inbox'
crawl[10].getsubfolder = 'Yes'
crawl[10].include_attachements = 'Yes'
crawl[10].interval = 'oneTime'
crawl[10].jobid = 'outlook10'
crawl[10].latest = ''
crawl[10].state = 'completed'
crawl[10].type = 'OutlookMail'
crawl[11].content_format = 'text'
crawl[11].filter_criteria = 'sender'
crawl[11].filter_pattern = ''
crawl[11].folder = 'Inbox'
crawl[11].getsubfolder = 'Yes'
crawl[11].include_attachements = 'Yes'
crawl[11].interval = 'oneTime'
crawl[11].jobid = 'outlook11'
crawl[11].latest = ''
crawl[11].state = 'completed'
crawl[11].type = 'OutlookMail'
crawl[12].content_format = 'text'
crawl[12].filter_criteria = 'sender'
crawl[12].filter_pattern = ''
crawl[12].folder = 'Inbox'
crawl[12].getsubfolder = 'Yes'
crawl[12].include_attachements = 'Yes'
crawl[12].interval = 'oneTime'
crawl[12].jobid = 'outlook12'
crawl[12].latest = ''
crawl[12].state = 'completed'
crawl[12].type = 'OutlookMail'
crawl[13].content_format = 'text'
crawl[13].filter_criteria = 'sender'
crawl[13].filter_pattern = ''
crawl[13].folder = 'Inbox'
crawl[13].getsubfolder = 'Yes'
crawl[13].include_attachements = 'Yes'
crawl[13].interval = 'oneTime'
crawl[13].jobid = 'outlook13'
crawl[13].latest = ''
crawl[13].state = 'completed'
crawl[13].type = 'OutlookMail'
crawl[14].content_format = 'text'
crawl[14].filter_criteria = 'sender'
crawl[14].filter_pattern = ''
crawl[14].folder = 'Inbox'
crawl[14].getsubfolder = 'Yes'
crawl[14].include_attachements = 'Yes'
crawl[14].interval = 'oneTime'
crawl[14].jobid = 'outlook14'
crawl[14].latest = ''
crawl[14].state = 'completed'
crawl[14].type = 'OutlookMail'
crawl[15].content_format = 'text'
crawl[15].filter_criteria = 'sender'
crawl[15].filter_pattern = ''
crawl[15].folder = 'Inbox'
crawl[15].getsubfolder = 'Yes'
crawl[15].include_attachements = 'Yes'
crawl[15].interval = 'oneTime'
crawl[15].jobid = 'outlook15'
crawl[15].latest = ''
crawl[15].state = 'completed'
crawl[15].type = 'OutlookMail'
crawl[16].content_format = 'text'
crawl[16].filter_criteria = 'sender'
crawl[16].filter_pattern = ''
crawl[16].folder = 'Inbox'
crawl[16].getsubfolder = 'Yes'
crawl[16].include_attachements = 'Yes'
crawl[16].interval = 'oneTime'
crawl[16].jobid = 'outlook16'
crawl[16].latest = ''
crawl[16].state = 'completed'
crawl[16].type = 'OutlookMail'
crawl[17].content_format = 'text'
crawl[17].filter_criteria = 'sender'
crawl[17].filter_pattern = ''
crawl[17].folder = 'Inbox'
crawl[17].getsubfolder = 'Yes'
crawl[17].include_attachements = 'Yes'
crawl[17].interval = 'oneTime'
crawl[17].jobid = 'outlook17'
crawl[17].latest = ''
crawl[17].state = 'completed'
crawl[17].type = 'OutlookMail'
crawl[18].content_format = 'text'
crawl[18].filter_criteria = 'sender'
crawl[18].filter_pattern = ''
crawl[18].folder = 'Inbox'
crawl[18].getsubfolder = 'Yes'
crawl[18].include_attachements = 'Yes'
crawl[18].interval = 'oneTime'
crawl[18].jobid = 'outlook18'
crawl[18].latest = ''
crawl[18].state = 'completed'
crawl[18].type = 'OutlookMail'
crawl[19].content_format = 'text'
crawl[19].filter_criteria = 'sender'
crawl[19].filter_pattern = ''
crawl[19].folder = 'Inbox'
crawl[19].getsubfolder = 'Yes'
crawl[19].include_attachements = 'Yes'
crawl[19].interval = 'oneTime'
crawl[19].jobid = 'outlook19'
crawl[19].latest = ''
crawl[19].state = 'completed'
crawl[19].type = 'OutlookMail'
crawl[1].content_format = 'text'
crawl[1].filter_criteria = 'subject'
crawl[1].filter_pattern = 'MAIL2'
crawl[1].folder = 'Inbox'
crawl[1].getsubfolder = 'No'
crawl[1].include_attachements = 'Yes'
crawl[1].interval = 'oneTime'
crawl[1].jobid = 'outlook1'
crawl[1].latest = ''
crawl[1].state = 'completed'
crawl[1].type = 'OutlookMail'
crawl[20].content_format = 'text'
crawl[20].filter_criteria = 'sender'
crawl[20].filter_pattern = ''
crawl[20].folder = 'Inbox'
crawl[20].getsubfolder = 'Yes'
crawl[20].include_attachements = 'Yes'
crawl[20].interval = 'oneTime'
crawl[20].jobid = 'outlook20'
crawl[20].latest = ''
crawl[20].state = 'completed'
crawl[20].type = 'OutlookMail'
crawl[2].content_format = 'text'
crawl[2].filter_criteria = 'receiver'
crawl[2].filter_pattern = 'Project'
crawl[2].folder = 'Inbox'
crawl[2].getsubfolder = 'No'
crawl[2].include_attachements = 'Yes'
crawl[2].interval = 'oneTime'
crawl[2].jobid = 'outlook2'
crawl[2].latest = ''
crawl[2].state = 'completed'
crawl[2].type = 'OutlookMail'
crawl[3].content_format = 'text'
crawl[3].filter_criteria = 'sender'
crawl[3].filter_pattern = 'Test'
crawl[3].folder = 'Inbox'
crawl[3].getsubfolder = 'Yes'
crawl[3].include_attachements = 'Yes'
crawl[3].interval = 'oneTime'
crawl[3].jobid = 'outlook3'
crawl[3].latest = ''
crawl[3].state = 'completed'
crawl[3].type = 'OutlookMail'
crawl[4].content_format = 'text'
crawl[4].filter_criteria = 'subject'
crawl[4].filter_pattern = 'savetoFile'
crawl[4].folder = 'Inbox'
crawl[4].getsubfolder = 'No'
crawl[4].include_attachements = 'Yes'
crawl[4].interval = 'oneTime'
crawl[4].jobid = 'outlook4'
crawl[4].latest = ''
crawl[4].state = 'completed'
crawl[4].type = 'OutlookMail'
crawl[5].content_format = 'text'
crawl[5].filter_criteria = 'subject'
crawl[5].filter_pattern = 'savetoFile'
crawl[5].folder = 'Inbox'
crawl[5].getsubfolder = 'No'
crawl[5].include_attachements = 'Yes'
crawl[5].interval = 'oneTime'
crawl[5].jobid = 'outlook5'
crawl[5].latest = ''
crawl[5].state = 'completed'
crawl[5].type = 'OutlookMail'
crawl[6].content_format = 'text'
crawl[6].filter_criteria = 'subject'
crawl[6].filter_pattern = ''
crawl[6].folder = 'Inbox'
crawl[6].getsubfolder = 'No'
crawl[6].include_attachements = 'Yes'
crawl[6].interval = 'oneTime'
crawl[6].jobid = 'outlook6'
crawl[6].latest = ''
crawl[6].state = 'completed'
crawl[6].type = 'OutlookMail'
crawl[7].content_format = 'text'
crawl[7].filter_criteria = 'sender'
crawl[7].filter_pattern = ''
crawl[7].folder = 'Inbox'
crawl[7].getsubfolder = 'No'
crawl[7].include_attachements = 'Yes'
crawl[7].interval = 'oneTime'
crawl[7].jobid = 'outlook7'
crawl[7].latest = ''
crawl[7].state = 'completed'
crawl[7].type = 'OutlookMail'
crawl[8].content_format = 'text'
crawl[8].filter_criteria = 'sender'
crawl[8].filter_pattern = ''
crawl[8].folder = 'Inbox'
crawl[8].getsubfolder = 'Yes'
crawl[8].include_attachements = 'Yes'
crawl[8].interval = 'oneTime'
crawl[8].jobid = 'outlook8'
crawl[8].latest = ''
crawl[8].state = 'completed'
crawl[8].type = 'OutlookMail'
crawl[9].content_format = 'text'
crawl[9].filter_criteria = 'subject'
crawl[9].filter_pattern = 'MailCrawler'
crawl[9].folder = 'Inbox'
crawl[9].getsubfolder = 'Yes'
crawl[9].include_attachements = 'Yes'
crawl[9].interval = 'oneTime'
crawl[9].jobid = 'outlook9'
crawl[9].latest = ''
crawl[9].state = 'completed'
crawl[9].type = 'OutlookMail'
ui.web.usermode = 'Simple'

View file

@ -12,7 +12,7 @@ import win32com.client
from email.mime.multipart import MIMEMultipart
# DEBUG FLAGS
DEBUG = 1
DEBUG = 0
DEBUG_WRITELINE = 1
# some constants
@ -77,7 +77,7 @@ class MSOutlook:
msg['Subject'] = record['Subject'].encode('utf-8')
# sender
sender = str(record['SenderEmailAddress'].encode('utf-8'))
sender = str(record['SenderName'].encode('utf-8')) #SenderEmailAddress
msg['From'] = sender
#recipients
@ -135,7 +135,7 @@ class MSOutlook:
msg['Subject'] = record['Subject'].encode('utf-8')
# sender
sender == record['SenderEmailAddress'].encode('utf-8')
sender == record['SenderName'].encode('utf-8') #SenderEmailAddress
msg['From'] = sender
# recipients
@ -157,7 +157,7 @@ class MSOutlook:
# get Count-Attribute of _Folders class
iInboxSubfoldersCount = getattr(lInboxSubfolders, 'Count')
# the Item-Method of the _Folders class returns a MAPIFolder object
oFolder = lInboxSubfolders.Item(1)
oFolder = lInboxSubfolders.Item(0) #1
print 'Count of Inbox-SubFolders:', iInboxSubfoldersCount
print 'Inbox sub folders (Folder/Mails):'
@ -183,15 +183,16 @@ if __name__ == '__main__':
sys.exit(1)
fieldsMail = ['Body',
'BodyFormat',
'HTMLBody',
'CC',
'SenderEmailAddress',
'SenderName',
'Recipients',
'To',
'Attachments',
'Subject'
]
# 'BodyFormat', removed BodyFormat temporarily because it is not available in Outlook.9 (Office2000)
# 'SenderEmailAddress', replaced by SenderName
if DEBUG:
import time
@ -199,10 +200,13 @@ if __name__ == '__main__':
startTime = time.time()
mails = oOutlook.loadInbox(fieldsMail)
for elem in mails:
print str(elem)
if DEBUG_WRITELINE:
print '***Back in main() with some emails in a list....***'
print 'Mails fetched from MSOutlook inbox folder:', mails.__len__()
if DEBUG:
print 'loading took %f seconds' % (time.time() - startTime)
print 'loading took %f seconds' % (time.time() - startTime)

79
agent/mails/Mail0 Normal file
View file

@ -0,0 +1,79 @@
From nobody Wed Aug 08 17:38:02 2007
Content-Type: multipart/mixed; boundary="===============1611091771=="
MIME-Version: 1.0
Subject: Willkommen bei Microsoft Outlook 2000!
From: Microsoft Outlook 2000
To:
<http://outlook/outlook9/specs/welcomemsg/icons.gif>
<http://outlook/outlook9/specs/welcomemsg/yellowbg.gif>
<http://outlook/outlook9/specs/welcomemsg/olicon.GIF>
Willkommen bei
Microsoft Outlook 2000
Das Fenster zu Ihrer Informationswelt
  Microsoft(R) Outlook(R) 2000  <http://www.microsoft.com/germany/office/outlook>ist die führende Clientsoftware für Kommunikation und Zusammenarbeit, mit der Sie Ihre Arbeitsabläufe optimieren können. Outlook kombiniert auf führendem Leistungsniveau
E-Mail-Funktionen (Internet- und Microsoft Exchange Server-Standards) mit integrierten Managementfunktionen für Aufgaben, Kontakte und den Kalender.
In Outlook werden Informationen in Ordnern organisiert. Beim Starten von Outlook wird der Ordner “Posteingang” geöffnet. Verwenden Sie den Posteingang, um E-Mail-Nachrichten sowie Besprechungs- und Aufgabenanfragen zu lesen und zu senden.
Um eine neue Nachricht zu erstellen, zeigen Sie im Menü "Datei" auf "Neu", und klicken Sie dann auf "Nachricht". Tragen Sie in den Feldern "An" und "Cc" die Namen der Empfänger ein, im Feld "Betreff" das Thema der Nachricht, und verfassen Sie die Nachricht anschließend im Textfeld. Wenn Sie die Nachricht zum Senden fertig gestellt haben, klicken Sie auf "Senden".
Um schnell zu einer anderen Outlook-Komponente zu wechseln, klicken Sie auf die entsprechende Verknüpfung auf der Outlook-Leiste, die sich links neben dem Posteingang befindet. Klicken Sie z.B. auf Kalender, um den Kalenderordner zu öffnen. Die Ordnerleiste (die horizontale Leiste oberhalb des Informationsbereichs) zeigt den Namen des geöffneten Ordners an. Um eine vollständige Liste mit allen Ordnern anzuzeigen, klicken Sie in der Ordnerleiste auf den Ordnernamen.
Hier sind einige der neuen Funktionen in Outlook 2000:
Outlook(R) Heute stellt Ihre E-Mail-, Kalender- und Aufgaben-Information in einem Fenster übersichtlich dar. Outlook Heute kann mit einem Klick auf das entsprechende Symbol auf der Outlook-Leiste gestartet werden. Sie können Outlook Heute auch als Ihr Standardfenster beim Starten von Outlook einstellen, damit Sie die Prioritäten für Ihren Arbeitstag mit einem Blick festlegen können.
In der Outlook-Leiste können Sie Verknüpfungen zu Dateien, Ordnern oder Webseiten erstellen. Sie können auf der Outlook-Leiste auf eine Verknüpfung zu einer Webseite klicken, und diese Seite dann im Outlook-Fenster auf der rechten Seite ansehen.
Senden und empfangen Sie Ihre E-Mail im HTML-Format, um Ihre Nachrichten so eindrucksvoll zu gestalten wie Webinhalt.
Nutzen Sie die Vorteile, die sich aus der Internet-Protokollunterstützung von Outlook 2000 für POP3/SMTP, IMAP4, LDAP, NNTP, S/MIME, HTML Mail, vCard, vCalendar und iCalendar ergeben. 
Das innovative Suchprogramm verwendet eine Suche im Webstil: Sie geben die Information ein, nach der gesucht wird. Auf diese Weise finden Sie schnell Nachrichten, Termine und Aufgaben.
Gestalten Sie Ihre Arbeit übersichtlicher, indem Sie die Schaltfläche "Organisieren" auf der Symbolleiste verwenden, um auf einfache Weise den Inhalt eines Ordners zu organisieren, Regeln zu erstellen und Junk-E-Mail herauszufiltern.
Mit einem einzigen Befehl können Sie nun Ihren persönlichen oder den Team-Kalender als Webseite veröffentlichen.
Erstellen und speichern Sie Ihre persönlichen Verteilerlisten zusammen mit Ihren Kontakten im Kontakteordner.
Mit der Serienbrieffunktion für E-Mail-, Fax- oder Briefversand können Sie Ihre Massenpost verwalten, wobei Sie selber entscheiden können, welche Kontakte und Kontaktfelder für die Serienbrieferstellung verwendet werden sollen.
Verwenden Sie die Registerkarte "Aktivitäten" eines Kontaktelements, um unter anderem die Nachrichten, Termine und Aufgaben eines bestimmten Kontakts dynamisch zu verfolgen und anzuzeigen.
Für weitere Informationen:
Besuchen Sie die Office Update-Website unter http://officeupdate.microsoft.com/germany/outlook <http://officeupdate.microsoft.com/office/redirect/fromOffice9/OutlookWelcome.htm?HelpLCID=1031>. Hier lernen Sie, wie Sie das Beste aus Microsoft(R) Outlook(R) 2000 herausholen können.
Erweitern Sie die Nützlichkeit von Outlook 2000 mit neuen Add-Ins, Dienstprogrammen und anderen Downloads.
Vereinfachen Sie die Verwendung von Outlook 2000 noch weiter mithilfe von zeitsparenden Tipps und Ratschlägen zur Problemlösung.
Feedback, Antworten auf häufig gestellte Fragen (FAQs) und Tipps finden Sie in unseren öffentlichen Newsgroups für Outlook 2000.
Lernen Sie, wie Sie mit Spezialangeboten und einer Vielzahl von Add-On-Produkten von Drittanbietern die Funktionalität von Outlook 2000 erweitern.
Beschaffen Sie sich eine Liste der häufigsten Support-Fragen zu Outlook 2000.
Hier finden Sie auch die aktuellsten Softwareupdates für Outlook 2000.
Wir hoffen, dass Ihnen die Arbeit mit Microsoft Outlook, einem der vollständigsten, zurzeit 
erhältlichen E-Mail-Programme, Vergnügen bereiten wird! 
- Ihr Microsoft Outlook-Team
 
Microsoft Internet Explorer <http://www.microsoft.com/windows/ie_intl/de/> Microsoft Office <http://www.microsoft.com/germany/office/> Microsoft Exchange Server <http://www.microsoft.com/germany/backoffice/exchange/> Microsoft NetMeeting <http://www.microsoft.com/windows/ie_intl/de/netmeeting/> Microsoft Windows Media Technologies <http://www.microsoft.com/windows/windowsmedia>
--===============1611091771==
--===============1611091771==--

79
agent/mails/Mail1 Normal file
View file

@ -0,0 +1,79 @@
From nobody Wed Aug 08 17:38:39 2007
Content-Type: multipart/mixed; boundary="===============1084757079=="
MIME-Version: 1.0
Subject: Willkommen bei Microsoft Outlook 2000!
From: Microsoft Outlook 2000
To:
<http://outlook/outlook9/specs/welcomemsg/icons.gif>
<http://outlook/outlook9/specs/welcomemsg/yellowbg.gif>
<http://outlook/outlook9/specs/welcomemsg/olicon.GIF>
Willkommen bei
Microsoft Outlook 2000
Das Fenster zu Ihrer Informationswelt
  Microsoft(R) Outlook(R) 2000  <http://www.microsoft.com/germany/office/outlook>ist die führende Clientsoftware für Kommunikation und Zusammenarbeit, mit der Sie Ihre Arbeitsabläufe optimieren können. Outlook kombiniert auf führendem Leistungsniveau
E-Mail-Funktionen (Internet- und Microsoft Exchange Server-Standards) mit integrierten Managementfunktionen für Aufgaben, Kontakte und den Kalender.
In Outlook werden Informationen in Ordnern organisiert. Beim Starten von Outlook wird der Ordner “Posteingang” geöffnet. Verwenden Sie den Posteingang, um E-Mail-Nachrichten sowie Besprechungs- und Aufgabenanfragen zu lesen und zu senden.
Um eine neue Nachricht zu erstellen, zeigen Sie im Menü "Datei" auf "Neu", und klicken Sie dann auf "Nachricht". Tragen Sie in den Feldern "An" und "Cc" die Namen der Empfänger ein, im Feld "Betreff" das Thema der Nachricht, und verfassen Sie die Nachricht anschließend im Textfeld. Wenn Sie die Nachricht zum Senden fertig gestellt haben, klicken Sie auf "Senden".
Um schnell zu einer anderen Outlook-Komponente zu wechseln, klicken Sie auf die entsprechende Verknüpfung auf der Outlook-Leiste, die sich links neben dem Posteingang befindet. Klicken Sie z.B. auf Kalender, um den Kalenderordner zu öffnen. Die Ordnerleiste (die horizontale Leiste oberhalb des Informationsbereichs) zeigt den Namen des geöffneten Ordners an. Um eine vollständige Liste mit allen Ordnern anzuzeigen, klicken Sie in der Ordnerleiste auf den Ordnernamen.
Hier sind einige der neuen Funktionen in Outlook 2000:
Outlook(R) Heute stellt Ihre E-Mail-, Kalender- und Aufgaben-Information in einem Fenster übersichtlich dar. Outlook Heute kann mit einem Klick auf das entsprechende Symbol auf der Outlook-Leiste gestartet werden. Sie können Outlook Heute auch als Ihr Standardfenster beim Starten von Outlook einstellen, damit Sie die Prioritäten für Ihren Arbeitstag mit einem Blick festlegen können.
In der Outlook-Leiste können Sie Verknüpfungen zu Dateien, Ordnern oder Webseiten erstellen. Sie können auf der Outlook-Leiste auf eine Verknüpfung zu einer Webseite klicken, und diese Seite dann im Outlook-Fenster auf der rechten Seite ansehen.
Senden und empfangen Sie Ihre E-Mail im HTML-Format, um Ihre Nachrichten so eindrucksvoll zu gestalten wie Webinhalt.
Nutzen Sie die Vorteile, die sich aus der Internet-Protokollunterstützung von Outlook 2000 für POP3/SMTP, IMAP4, LDAP, NNTP, S/MIME, HTML Mail, vCard, vCalendar und iCalendar ergeben. 
Das innovative Suchprogramm verwendet eine Suche im Webstil: Sie geben die Information ein, nach der gesucht wird. Auf diese Weise finden Sie schnell Nachrichten, Termine und Aufgaben.
Gestalten Sie Ihre Arbeit übersichtlicher, indem Sie die Schaltfläche "Organisieren" auf der Symbolleiste verwenden, um auf einfache Weise den Inhalt eines Ordners zu organisieren, Regeln zu erstellen und Junk-E-Mail herauszufiltern.
Mit einem einzigen Befehl können Sie nun Ihren persönlichen oder den Team-Kalender als Webseite veröffentlichen.
Erstellen und speichern Sie Ihre persönlichen Verteilerlisten zusammen mit Ihren Kontakten im Kontakteordner.
Mit der Serienbrieffunktion für E-Mail-, Fax- oder Briefversand können Sie Ihre Massenpost verwalten, wobei Sie selber entscheiden können, welche Kontakte und Kontaktfelder für die Serienbrieferstellung verwendet werden sollen.
Verwenden Sie die Registerkarte "Aktivitäten" eines Kontaktelements, um unter anderem die Nachrichten, Termine und Aufgaben eines bestimmten Kontakts dynamisch zu verfolgen und anzuzeigen.
Für weitere Informationen:
Besuchen Sie die Office Update-Website unter http://officeupdate.microsoft.com/germany/outlook <http://officeupdate.microsoft.com/office/redirect/fromOffice9/OutlookWelcome.htm?HelpLCID=1031>. Hier lernen Sie, wie Sie das Beste aus Microsoft(R) Outlook(R) 2000 herausholen können.
Erweitern Sie die Nützlichkeit von Outlook 2000 mit neuen Add-Ins, Dienstprogrammen und anderen Downloads.
Vereinfachen Sie die Verwendung von Outlook 2000 noch weiter mithilfe von zeitsparenden Tipps und Ratschlägen zur Problemlösung.
Feedback, Antworten auf häufig gestellte Fragen (FAQs) und Tipps finden Sie in unseren öffentlichen Newsgroups für Outlook 2000.
Lernen Sie, wie Sie mit Spezialangeboten und einer Vielzahl von Add-On-Produkten von Drittanbietern die Funktionalität von Outlook 2000 erweitern.
Beschaffen Sie sich eine Liste der häufigsten Support-Fragen zu Outlook 2000.
Hier finden Sie auch die aktuellsten Softwareupdates für Outlook 2000.
Wir hoffen, dass Ihnen die Arbeit mit Microsoft Outlook, einem der vollständigsten, zurzeit 
erhältlichen E-Mail-Programme, Vergnügen bereiten wird! 
- Ihr Microsoft Outlook-Team
 
Microsoft Internet Explorer <http://www.microsoft.com/windows/ie_intl/de/> Microsoft Office <http://www.microsoft.com/germany/office/> Microsoft Exchange Server <http://www.microsoft.com/germany/backoffice/exchange/> Microsoft NetMeeting <http://www.microsoft.com/windows/ie_intl/de/netmeeting/> Microsoft Windows Media Technologies <http://www.microsoft.com/windows/windowsmedia>
--===============1084757079==
--===============1084757079==--

13
agent/mails/Mail10 Normal file
View file

@ -0,0 +1,13 @@
From nobody Wed Aug 08 19:33:53 2007
Content-Type: multipart/mixed; boundary="===============0462019246=="
MIME-Version: 1.0
Subject: Just a test for subfolder mails
From:
To: ,
This mail is a plain simple text mail, stored in the subfolder.
Greetings, the programmer
--===============0462019246==
--===============0462019246==--

13
agent/mails/Mail11 Normal file
View file

@ -0,0 +1,13 @@
From nobody Wed Aug 08 19:37:00 2007
Content-Type: multipart/mixed; boundary="===============0845798496=="
MIME-Version: 1.0
Subject: Just a test for subfolder mails
From:
To: ,
This mail is a plain simple text mail, stored in the subfolder.
Greetings, the programmer
--===============0845798496==
--===============0845798496==--

13
agent/mails/Mail12 Normal file
View file

@ -0,0 +1,13 @@
From nobody Wed Aug 08 19:41:41 2007
Content-Type: multipart/mixed; boundary="===============0256854354=="
MIME-Version: 1.0
Subject: Just a test for subfolder mails
From:
To: ,
This mail is a plain simple text mail, stored in the subfolder.
Greetings, the programmer
--===============0256854354==
--===============0256854354==--

13
agent/mails/Mail13 Normal file
View file

@ -0,0 +1,13 @@
From nobody Wed Aug 08 19:43:21 2007
Content-Type: multipart/mixed; boundary="===============0997011639=="
MIME-Version: 1.0
Subject: Just a test for subfolder mails
From:
To: ,
This mail is a plain simple text mail, stored in the subfolder.
Greetings, the programmer
--===============0997011639==
--===============0997011639==--

13
agent/mails/Mail14 Normal file
View file

@ -0,0 +1,13 @@
From nobody Wed Aug 08 19:44:50 2007
Content-Type: multipart/mixed; boundary="===============2082887985=="
MIME-Version: 1.0
Subject: Just a test for subfolder mails
From:
To: ,
This mail is a plain simple text mail, stored in the subfolder.
Greetings, the programmer
--===============2082887985==
--===============2082887985==--

13
agent/mails/Mail2 Normal file
View file

@ -0,0 +1,13 @@
From nobody Wed Aug 08 18:54:16 2007
Content-Type: multipart/mixed; boundary="===============0880114339=="
MIME-Version: 1.0
Subject: Just a test for subfolder mails
From:
To: ,
This mail is a plain simple text mail, stored in the subfolder.
Greetings, the programmer
--===============0880114339==
--===============0880114339==--

13
agent/mails/Mail3 Normal file
View file

@ -0,0 +1,13 @@
From nobody Wed Aug 08 19:05:34 2007
Content-Type: multipart/mixed; boundary="===============1328191004=="
MIME-Version: 1.0
Subject: Just a test for subfolder mails
From:
To: ,
This mail is a plain simple text mail, stored in the subfolder.
Greetings, the programmer
--===============1328191004==
--===============1328191004==--

13
agent/mails/Mail4 Normal file
View file

@ -0,0 +1,13 @@
From nobody Wed Aug 08 19:24:11 2007
Content-Type: multipart/mixed; boundary="===============1905543225=="
MIME-Version: 1.0
Subject: Just a test for subfolder mails
From:
To: ,
This mail is a plain simple text mail, stored in the subfolder.
Greetings, the programmer
--===============1905543225==
--===============1905543225==--

13
agent/mails/Mail5 Normal file
View file

@ -0,0 +1,13 @@
From nobody Wed Aug 08 19:25:53 2007
Content-Type: multipart/mixed; boundary="===============1877812021=="
MIME-Version: 1.0
Subject: Just a test for subfolder mails
From:
To: ,
This mail is a plain simple text mail, stored in the subfolder.
Greetings, the programmer
--===============1877812021==
--===============1877812021==--

13
agent/mails/Mail6 Normal file
View file

@ -0,0 +1,13 @@
From nobody Wed Aug 08 19:26:37 2007
Content-Type: multipart/mixed; boundary="===============1606767652=="
MIME-Version: 1.0
Subject: Just a test for subfolder mails
From:
To: ,
This mail is a plain simple text mail, stored in the subfolder.
Greetings, the programmer
--===============1606767652==
--===============1606767652==--

13
agent/mails/Mail7 Normal file
View file

@ -0,0 +1,13 @@
From nobody Wed Aug 08 19:30:38 2007
Content-Type: multipart/mixed; boundary="===============0772292689=="
MIME-Version: 1.0
Subject: Just a test for subfolder mails
From:
To: ,
This mail is a plain simple text mail, stored in the subfolder.
Greetings, the programmer
--===============0772292689==
--===============0772292689==--

13
agent/mails/Mail8 Normal file
View file

@ -0,0 +1,13 @@
From nobody Wed Aug 08 19:31:07 2007
Content-Type: multipart/mixed; boundary="===============0682061220=="
MIME-Version: 1.0
Subject: Just a test for subfolder mails
From:
To: ,
This mail is a plain simple text mail, stored in the subfolder.
Greetings, the programmer
--===============0682061220==
--===============0682061220==--

13
agent/mails/Mail9 Normal file
View file

@ -0,0 +1,13 @@
From nobody Wed Aug 08 19:32:06 2007
Content-Type: multipart/mixed; boundary="===============1096091158=="
MIME-Version: 1.0
Subject: Just a test for subfolder mails
From:
To: ,
This mail is a plain simple text mail, stored in the subfolder.
Greetings, the programmer
--===============1096091158==
--===============1096091158==--

View file

@ -47,14 +47,35 @@
<div class="section">
<h3><a id="form-overview" name="form-overview">Overview</a></h3>
<ul class="simple">
<li><b>Mail Collection</b><div nevow:render="data" nevow:data="displayViewForm"/></li>
<li><b>Mail Collection</b><div nevow:render="data" nevow:data="displayViewForm"/></li>
</ul>
<div nevow:render="systemMessage"/>
<div align="center">
<table border="0" cellpadding="10">
<p nevow:render="displayOutlookMails">
<tr nevow:pattern="OutlookMails" nevow:render="data"/>
</p>
</table>
<table class="listing">
<thead>
<tr>
<th>
From
</th>
<th>
CC
</th>
<th>
Subject
</th>
<th>
Date
</th>
<th>
Source Folder
</th>
</tr>
</thead>
<tbody>
<p nevow:render="displayOutlookMails">
</p>
</tbody>
</table>
</div>
</div>
</div>

View file

@ -0,0 +1,190 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!--<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> //-->
<html xmlns:nevow="http://nevow.com/ns/nevow/0.1">
<!-- Outlook Mails Page for loops.agent UI Version: 0.1 //-->
<nevow:invisible nevow:render="header_fragment" />
<body>
<div class="body">
<div nevow:render="top_fragment">
</div>
<div id="menu">
<div nevow:render="navigation_fragment">
</div>
<br/>
<br/>
<div class="box">
<h4>User Mode</h4>
<div class="body">
<b>Current Mode: </b><p nevow:render="getActiveUserMode"/>
</div>
</div>
</div>
<div id="content">
<div></div>
<div></div>
<div class="content-1" id="2.body" ondblclick="">
<div class="line-block">
<div class="line"><br /></div>
</div>
<div class="section">
<h3><a id="agent-ui-startpage" name="agent-ui-startpage">Agent: Create Mail Crawl Job</a></h3>
<ul class="simple">
<li>Configuration page for Outlook Mail Crawler jobs.</li>
</ul>
</div>
<div class="section">
<h3><a id="form-overview" name="form-overview">Overview</a></h3>
<ul class="simple">
<li><b>Mail Collection</b><div nevow:render="data" nevow:data="displayViewForm"/></li>
</ul>
<div align="center">
<table border="0" cellpadding="10">
<p nevow:render="displayOutlookMails">
<tr nevow:pattern="OutlookMails" nevow:render="data"/>
</p>
</table>
<form name="OutlookCrawlForm" action="submitOutlookCrawlJob" method="POST">
<fieldset>
<legend>
Mail Crawl Settings
</legend>
<fieldset>
<legend>Folders to crawl</legend>
<table align="center">
<tr>
<td>
<label for="lblsearchFolder">Folder to search: </label>
</td>
<td>
<input id="lblsearchFolder" name="searchFolder" type="text"
size="12" maxlength="20"/>
</td>
</tr>
<tr>
<td>
<label for="lblselectSubfolder">Include subfolder: </label>
</td>
<td>
<select id="lblselectSubfolder" name="selectSubfolder">
<option>Yes</option>
<option>No</option>
</select>
</td>
</tr>
</table>
</fieldset>
<fieldset>
<legend>
Filter criteria patterns
</legend>
<table align="center">
<tr>
<td>
<label for="lblselectFilterCriteria">Filter criteria: </label>
</td>
<td>
<select id="lblselectFilterCriteria" name="selectFilterCriteria">
<option>sender</option>
<option>receiver</option>
<option>subject</option>
</select>
</td>
</tr>
<tr>
<td>
<label for="lblfilterPattern">Pattern: </label>
</td>
<td>
<input id="lblfilterPattern" name="filterPattern"
type="text" size="12" maxlength="20" />
</td>
</tr>
</table>
</fieldset>
<fieldset>
<legend>
Message parts to be stored
</legend>
<table align="center">
<tr>
<td>
<label for="lblselectContentFormat">Transfer HTML or Plain Text: </label>
</td>
<td>
<select id="lblselectContentFormat" name="selectContentFormat">
<option>text</option>
<option>html</option>
<option>both</option>
</select>
</td>
</tr>
<tr>
<td>
<label for="lblselectAttachements">Include attachements: </label>
</td>
<td>
<select id="lblselectAttachements" name="selectAttachements">
<option>Yes</option>
<option>No</option>
</select>
</td>
</tr>
</table>
</fieldset>
<fieldset>
<legend>
Job Interval
</legend>
<table align="center">
<tr>
<td>
<label for="lblmailCrawlIntervaloneTime">One Time: </label>
</td>
<td>
<input type="radio" id="lblmailCrawlIntervaloneTime" name="mailCrawlInterval"
value="oneTime" checked="checked" />
</td>
</tr>
<tr>
<td>
<label for="lblmailCrawlIntervalScheduler">Use Scheduler: </label>
</td>
<td>
<input type="radio" id="lblmailCrawlIntervalScheduler" name="mailCrawlInterval"
value="Scheduler" />
</td>
</tr>
</table>
</fieldset>
<input type="submit" name="startCrawlJob" value="Save and Start" />
</fieldset>
</form>
<div nevow:render="systemMessage"/>
</div>
</div>
</div>
</div>
<div id="sub-section" define-macro="sub-section">
</div>
<div nevow:render="footer_fragment">
</div>
</div>
</body>
</html>

View file

@ -20,6 +20,12 @@
</a>
</div>
<div class="content odd menu-3">
<a href="http://localhost:8080/viewOutlookMails" class="">
view Outlook Mails
</a>
</div>
<div class="content odd menu-3">
<a href="http://localhost:8080/addjob" class="">
add job</a>

View file

@ -10,23 +10,37 @@ from nevow import loaders, rend, static, url, inevow, tags
from nevow.inevow import IRequest
from twisted.internet import defer
"""
Import could look like this:
from loops.agent.crawl.MailCrawler import MailCrawler
"""
# ---- global definitions ---------------------------------
# THIS SECTION IS USED FOR PROJECT INTERNAL DEBUG ONLY
INIFILE = "usermode.ini"
JOBFILE = "joblist.txt"
#----------------------------------------------------------
from loops.agent.crawl.outlook import MSOutlook
from loops.agent import core
# ---- global definitions and settings ---------------------------------
os.environ['HOME'] = os.path.dirname(core.__file__)
OUTLOOK2000 = 1
JOBCONFIGS = os.path.join(os.path.expanduser('~'),'jobconf.txt')
MAIL_DIR = os.path.join(os.path.expanduser('~'),'mails')
agent = core.Agent()
config = agent.config
resourcesDirectory = 'resources'
templatesDirectory = 'templates'
#----------------------------------------------------------
def template(fn):
return loaders.xmlfile(os.path.join(templatesDirectory, fn))
def getConfigIndex(index_name, default_value, fn=None):
iterator = 0
index_used = True
#check what crawling jobs exist to create a valid job index
while index_used == True:
if config.crawl[iterator].setdefault(index_name,default_value) == default_value:
index_used = False
else:
index_used = True
iterator = iterator + 1
return iterator
# AgentHome
# root page of the Agent UI
@ -35,57 +49,52 @@ class AgentHome(rend.Page):
"""Main class that builds the root ressource for the loops agent ui.
Instance variables:
ini_dict -- stores the initialization parameters
ini_file -- path to the initialization file
usermode -- can be 'Simple' or 'Advanced'
Class methods:
At the moment all methods of this class except the __init__ although public,
are intended to be called directly or stand-alone.
__init__ -- Load the initial start-up settings from an ini file.
__init__ -- Load the initial start-up settings from config
"""
child_resources = static.File(resourcesDirectory)
docFactory = template('agent.html')
def __init__(self,ini_dict={}):
def __init__(self,first_start=1):
""" Initialize the AgentHome object.
If an empty dictionary is passed into the __init__ method it will
load the settings from the path with points to the ini-file.
If first_start = 1 then the initalization procedure is run, which mainly
loads the stored settings from the agent ini-file into instance variables of the class.
Keyword arguments:
ini_dict -- the dictionary containing the ini-settings. Defaults to {}
"""
#TODO: implement automatic reading of default ini file, or one passed via constructor
#-------- ini settings ------------------------
# THIS SECTION IS USED FOR PROJECT INTERNAL DEBUG ONLY
self.ini_file = INIFILE
self.ini_dict = ini_dict
#-----------------------------------------------
#-------- get ini settings from file --------
if self.ini_dict == {}:
file_pointer = open(self.ini_file,"r")
ini_settings = file_pointer.readlines()
for ini_line in ini_settings:
elem = ini_line.split(":")
self.ini_dict[elem[0]] = elem[1]
file_pointer.close()
print "[AgentHome] self.UserMode: ", self.ini_dict["UserMode"]
first_start -- defaults to 1
"""
print "[PAGECLASS] AgentHome"
if first_start == 1:
self.usermode = config.ui.web.setdefault('usermode','Simple')
print "[AgentHome] setting self.usermode: ", config.ui.web.usermode
"""
def locateChild(self, ctx, segments):
return self, ()
"""
# child pages
# calls to child pages
def child_joboverview(self,context):
""" User requested page from menue: 'job overview' """
return JobOverView(self.ini_dict)
return JobOverView()
def child_collectOutlookMails(self,context):
"""Display page for starting Outlook Crawler"""
return AgentOutlookMailCrawl()
def child_viewOutlookMails(self,context):
"""Display page that shows all currently collected Outlook Mails."""
return AgentOutlookMailView()
# "Startpage" methods (class AgentHome)
@ -96,40 +105,19 @@ class AgentHome(rend.Page):
change UserMode from Simple <-> Professional
"""
print "[child_changeUserMode] UserMode: ", self.ini_dict["UserMode"]
print "[child_changeUserMode] UserMode: ", config.ui.web.usermode
print "[child_changeUserMode] ----retrieving form values----"
form = IRequest(context).args
if form != {}:
for elem in form:
print "[child_changeUserMode] ", form[elem]
if self.ini_dict["UserMode"] == "Simple":
self.ini_dict["UserMode"] = "Advanced"
if config.ui.web.usermode == "Simple":
config.ui.web.usermode = "Advanced"
else:
self.ini_dict["UserMode"] = "Simple"
print "[child_changeUserMode] : ", self.ini_dict["UserMode"]
return AgentHome(self.ini_dict)
def child_collectOutlookMails(self,context):
"""Display page for starting Outlook Crawler
Returns a page object that offers possibility to start async crawling job.
"""
"""
deferred = MailCrawler.getOutlookMails()
deferred.addCallback(self.defMailCrawl,context)
deferred.addErrback(self.defMailCrawlError,context)
return deferred
"""
return AgentOutlookMailView(self.ini_dict)
def defMailCrawl(self,mail_collection,context):
"""Forward the mail collection to a page view."""
return AgentOutlookMailView(self.ini_dict,mail_collection)
def defMailCrawlError(self,ErrorMessage,context):
"""Handles errors that ocurred in the MailCrawler."""
return AgentHome(self.ini_dict)
config.ui.web.usermode = "Simple"
print "[child_changeUserMode] : ", config.ui.web.usermode
config.save()
return AgentHome(first_start=0)
# "job overview" methods (class JobOverView)
@ -141,7 +129,8 @@ class AgentHome(rend.Page):
"""
selected_job = ((IRequest(context).uri).split("?"))[1]
file_pointer = open(JOBFILE,"r")
JOBDETAILS = 'joblist.txt'
file_pointer = open(JOBDETAILS,"r")
job_details = ""
job_list = file_pointer.readlines()
for line in job_list:
@ -150,12 +139,97 @@ class AgentHome(rend.Page):
break
file_pointer.close()
job_details = job_details.split(";")
return JobOverViewDetails(self.ini_dict, job_details)
return JobOverViewDetails(job_details)
# "collect Outlook Mails" methods (class AgentOutlookMailCrawl)
def child_submitOutlookCrawlJob(self,context):
"""Initiate Outlook crawling job as requested by user."""
ag = core.Agent()
config2 = ag.config
conf = config2
crawlSubfolder = False
form = IRequest(context).args
if form != {}:
iterator = getConfigIndex('type','unused')
#save job configuration
if form['mailCrawlInterval'][0] == "oneTime":
conf.load('crawl[%i].state = "completed"' %(iterator))
else:
conf.load('crawl[%i].state = "active"' %(iterator))
conf.load('crawl[%i].jobid = "outlook%i"' %(iterator, iterator))
conf.load('crawl[%i].type = "OutlookMail"' %(iterator))
conf.load('crawl[%i].folder = "%s"'%(iterator,form["searchFolder"][0])) #always Inbox, ev. read from Outlook which folders are available?
conf.load('crawl[%i].getsubfolder = "%s"'%(iterator,form["selectSubfolder"][0]))
conf.load('crawl[%i].latest = ""'%(iterator)) #TODO: who does parsing?
conf.load('crawl[%i].filter_criteria = "%s"'%(iterator,form["selectFilterCriteria"][0]))
conf.load('crawl[%i].filter_pattern = "%s"'%(iterator,form["filterPattern"][0]))
conf.load('crawl[%i].content_format = "%s"'%(iterator,form["selectContentFormat"][0]))
conf.load('crawl[%i].include_attachements = "%s"'%(iterator,form["selectAttachements"][0]))
conf.load('crawl[%i].interval = "%s"'%(iterator,form["mailCrawlInterval"][0]))
conf.save()
if form["mailCrawlInterval"][0] == 'oneTime':
if OUTLOOK2000 == 1:
#Outlook2000 (= Outlook 9) has different attributes
fieldsMail = ['Body',
'HTMLBody',
'CC',
'SenderName',
'Recipients',
'To',
'Attachments',
'Subject'
]
else:
fieldsMail = ['Body',
'BodyFormat',
'HTMLBody',
'CC',
'SenderEmailAddress',
'Recipients',
'To',
'Attachments',
'Subject'
]
if form["selectSubfolder"][0] == 'Yes':
crawlSubfolder = True
OutlookObj = MSOutlook()
mails = OutlookObj.loadInbox(fieldsMail,crawlSubfolder)
# currently deferreds are not implemented in outlook.py
#deferred.addCallback(self.defMailCrawl,context)
#deferred.addErrback(self.defMailCrawlError,context)
#return deferred
return self.defMailCrawl(mails,context)
else:
#TODO implement forwarding to next form (scheduler)
return AgentOutlookMailCrawl("Scheduled Mail Crawling not implemented yet.")
else:
return AgentOutlookMailCrawl("An error occurred: form data has been empty.")
return AgentOutlookMailCrawl("Crawl Job settings have been saved.")
def defMailCrawl(self,mail_collection,context):
"""Save and Forward the mail collection to a page view."""
files = os.listdir(MAIL_DIR)
filename = "Mail%i" %(len(files))
print "Writing emails to files."
for elem in mail_collection:
fp = open((os.path.join(MAIL_DIR,filename)),'w')
fp.write(str(elem))
fp.close()
return AgentOutlookMailView(mail_collection)
def defMailCrawlError(self,ErrorMessage,context):
"""Handles errors that ocurred in the MailCrawler."""
return AgentHome(first_start=0)
# rendering methods of Startpage
def render_getActiveUserMode(self,context,data):
return self.ini_dict["UserMode"]
return config.ui.web.usermode
def render_getAgentVersion(self,context,data):
return "0.1 alpha"
@ -196,7 +270,7 @@ class JobOverView(rend.Page):
"""Builds page that lists all currently registered jobs.
Instance variables:
ini_settings -- stores the initialization parameters
currently none in use
Class methods:
At the moment all methods of this class except the __init__ although public,
@ -208,8 +282,8 @@ class JobOverView(rend.Page):
docFactory = template('joblisting.html')
def __init__(self, ini_dict={}):
self.ini_settings = ini_dict
def __init__(self):
print "[PAGECLASS] JobOverView"
# rendering methods of job overview
@ -217,36 +291,36 @@ class JobOverView(rend.Page):
return "Overview of all running Crawling jobs"
def render_getActiveUserMode(self,context,data):
return self.ini_settings["UserMode"]
return config.ui.web.usermode
def render_fillJobTable(self,ctx,data):
"""Build table which displays all registered jobs."""
#---- get the registered jobs from the jobfile ----
# might later be implemented by reading in a xml file or
# requesting registered jobs from database
file_jobfile = open(JOBFILE,"r")
lines = file_jobfile.readlines()
file_jobfile.close()
joblist = []
for elem in lines:
joblist.append(elem.split(";"))
iterator = 0
config.load()
while iterator < len(config.crawl):
joblist.append(dict(config.crawl[iterator].items()))
iterator = iterator + 1
for elem in joblist:
print elem
job_table = [tags.tr
[
tags.td
[
tags.a(href="ViewJobDetails?%s" %(job_details[0],))
tags.a(href="ViewJobDetails?%s" %(job_details['jobid']))
[
tags.b
[
"[" + job_details[0] +"]"
"[" + job_details['jobid'] +"]"
]
]
],
tags.td[job_details[1]],
tags.td[job_details[2]],
tags.td[job_details[3]],
tags.td[job_details[4]]
tags.td[job_details['state']],
tags.td[job_details['interval']],
tags.td[job_details['filter_criteria']],
tags.td[job_details['folder']]
]
for job_details in joblist
]
@ -270,21 +344,20 @@ class JobOverViewDetails(rend.Page):
"""Builds page that displays detailed information about a selected job.
Instance variables:
ini_settings -- stores the initialization parameters
jobdetails -- list that contains all available job information
Class methods:
At the moment all methods of this class except the __init__ although public,
are intended to be called directly or stand-alone.
__init__ -- Store inital settings and the selected job.
__init__ -- Store the selected job in member variable.
"""
docFactory = template('jobdetail.html')
def __init__(self, ini_dict={}, selectedJob=[]):
self.ini_settings = ini_dict
def __init__(self, selectedJob=[]):
print "[PAGECLASS] JobOverViewDetails"
self.jobdetails = selectedJob
# rendering methods of job view details
@ -293,14 +366,14 @@ class JobOverViewDetails(rend.Page):
return "Detailed view of crawling job."
def render_getActiveUserMode(self,context,data):
return self.ini_settings["UserMode"]
return config.ui.web.usermode
def render_displayJobDetails(self,ctx,data):
"""Build the table containing information about the selected job."""
print "*******************************************************"
print "[render_displayJobDetails] received form: ", str(self.jobdetails)
print "[render_displayJobDetails] received IniForm: ", str(self.ini_settings)
print "[render_displayJobDetails] usermode: ", config.ui.web.usermode
print "*******************************************************"
job_detail = []
job_detail = [tags.tr
@ -359,39 +432,141 @@ class AgentOutlookMailView(rend.Page):
"""Builds page that displays an overview of all collected mails.
Instance variables:
ini_dict -- stores the initialization parameters
page_message -- string that is displayed on the page
mail_collection -- collection containing all currently collected mails.
Class methods:
At the moment all methods of this class except the __init__ although public,
are intended to be called directly or stand-alone.
__init__ -- Store initial settings and the mail collection object.
__init__ -- Store the mail collection object and the pagemessage
"""
docFactory = template('mail.html')
def __init__(self, ini_dict={}, mail_collection=[]):
self.ini_dict = ini_dict
def __init__(self, mail_collection=[], pagemessage=""):
print "[PAGECLASS] AgentOutlookMailView"
self.mail_collection = mail_collection
self.page_message = pagemessage
# rendering methods of Collect Outlook Mails
def data_displayViewForm(self,context,data):
return "Detailed view of all collected Outlook Mails. [DEMO]"
return "Detailed view of all collected Outlook Mails."
def render_getActiveUserMode(self,context,data):
return self.ini_dict["UserMode"]
return config.ui.web.usermode
def render_systemMessage(self,context,data):
"""Displays messages from the system to the user."""
message = tags.b[self.page_message]
return message
def render_displayOutlookMails(self,ctx,data):
"""Builds table containing all currently collected mails."""
if self.mail_collection != []:
mail_table = [tags.tr
[
tags.td
[
tags.a(href="ViewMailDetails?%s" %(str(mailObject.get('SenderName'))))
[
tags.b
[
"[" + str(mailObject.get('SenderName')) +"]"
]
]
],
tags.td[str(mailObject.get('CC'))],
tags.td[str(mailObject.get('Subject'))],
tags.td[str(mailObject.get('To'))],
tags.td['SourceFolder']
]
for mailObject in self.mail_collection
]
return mail_table
else:
mailFiles = os.listdir(MAIL_DIR)
#TODO: read mail data from files
mail_table = [tags.tr
[
tags.td
[
tags.a(href="ViewMailDetails?%s" %(str(mail)))
[
tags.b
[
"[" + str(mail) +"]"
]
]
],
tags.td[str(mail)],
tags.td[str(mail)],
tags.td[str(mail)],
tags.td[str(mail)]
]
for mail in mailFiles
]
return mail_table
pattern_list = []
gen_pattern = inevow.IQ(ctx).patternGenerator('OutlookMails')
for elem in self.mail_collection:
pattern_list.append(gen_pattern(data=elem))
return pattern_list
def render_footer_fragment(self,context,data):
return context.tag[FooterFragment(data)]
def render_navigation_fragment(self,context,data):
return context.tag[NavigationFragment(data)]
def render_top_fragment(self,context,data):
return context.tag[TopFragment(data)]
def render_header_fragment(self,context,data):
return context.tag[HeaderFragment(data)]
class AgentOutlookMailCrawl(rend.Page):
"""Builds page where an Outlook Mail Crawler can be configured and run.
Instance variables:
page_message -- string that is displayed on the page
Class methods:
At the moment all methods of this class except the __init__ although public,
are intended to be called directly or stand-alone.
__init__ -- store pagemessage in member variable
"""
docFactory = template('mailcrawl.html')
def __init__(self, pagemessage=""):
print "[PAGECLASS] AgentOutlookMailCrawl"
self.page_message = pagemessage
# rendering methods of Collect Outlook Mails
def data_displayViewForm(self,context,data):
return "Configure your MailCrawl Job in the form below.\
You then can either choose to start it as a\
single job, or as scheduled job (further input\
for scheduler necessary). For each new collect\
procedure a filter will be added, so that just\
mails received in Outlook after the recent Crawl\
Job has been run, will be collected."
def render_getActiveUserMode(self,context,data):
return config.ui.web.usermode
def render_displayOutlookMails(self,ctx,data):
"""Currently no implementation"""
return ""
def render_systemMessage(self,context,data):
"""Displays messages from the system to the user."""
message = tags.b[self.page_message]
return message
def render_footer_fragment(self,context,data):
return context.tag[FooterFragment(data)]