diff --git a/bt5/erp5_crm/SkinTemplateItem/portal_skins/erp5_crm/Base_getPersonListFromFromHeader.xml b/bt5/erp5_crm/SkinTemplateItem/portal_skins/erp5_crm/Base_getPersonListFromFromHeader.xml new file mode 100644 index 0000000000000000000000000000000000000000..ca1fa72a278303e041539adcd6406636dadce399 --- /dev/null +++ b/bt5/erp5_crm/SkinTemplateItem/portal_skins/erp5_crm/Base_getPersonListFromFromHeader.xml @@ -0,0 +1,163 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <tuple> + <global name="PythonScript" module="Products.PythonScripts.PythonScript"/> + <tuple/> + </tuple> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>Python_magic</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>Script_magic</string> </key> + <value> <int>3</int> </value> + </item> + <item> + <key> <string>__ac_local_roles__</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>_bind_names</string> </key> + <value> + <object> + <klass> + <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/> + </klass> + <tuple/> + <state> + <dictionary> + <item> + <key> <string>_asgns</string> </key> + <value> + <dictionary> + <item> + <key> <string>name_container</string> </key> + <value> <string>container</string> </value> + </item> + <item> + <key> <string>name_context</string> </key> + <value> <string>context</string> </value> + </item> + <item> + <key> <string>name_m_self</string> </key> + <value> <string>script</string> </value> + </item> + <item> + <key> <string>name_subpath</string> </key> + <value> <string>traverse_subpath</string> </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </state> + </object> + </value> + </item> + <item> + <key> <string>_body</string> </key> + <value> <string encoding="cdata"><![CDATA[ + +getResultValue = context.portal_catalog.getResultValue\n +\n +result = []\n +for recipient in text.split(\',\'):\n + if "<" in recipient:\n + recipient = recipient[recipient.find(\'<\') + 1:]\n + recipient = recipient[:recipient.find(\'>\')]\n + if recipient:\n + email = getResultValue(url_string=recipient, portal_type="Email")\n + if email is not None:\n + result.append(email.getParentValue())\n +return result\n + + +]]></string> </value> + </item> + <item> + <key> <string>_code</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>_filepath</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>_params</string> </key> + <value> <string>text</string> </value> + </item> + <item> + <key> <string>errors</string> </key> + <value> + <tuple/> + </value> + </item> + <item> + <key> <string>func_code</string> </key> + <value> + <object> + <klass> + <global name="FuncCode" module="Shared.DC.Scripts.Signature"/> + </klass> + <tuple/> + <state> + <dictionary> + <item> + <key> <string>co_argcount</string> </key> + <value> <int>1</int> </value> + </item> + <item> + <key> <string>co_varnames</string> </key> + <value> + <tuple> + <string>text</string> + <string>_getattr_</string> +<string>context</string> + <string>getResultValue</string> + <string>result</string> + <string>_getiter_</string> + <string>recipient</string> + <string>_getitem_</string> + <string>email</string> + <string>None</string> + </tuple> + </value> + </item> + </dictionary> + </state> + </object> + </value> + </item> + <item> + <key> <string>func_defaults</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>Base_getPersonListFromFromHeader</string> </value> + </item> + <item> + <key> <string>warnings</string> </key> + <value> + <tuple/> + </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_crm/SkinTemplateItem/portal_skins/erp5_crm/Event_finishIngestion.xml b/bt5/erp5_crm/SkinTemplateItem/portal_skins/erp5_crm/Event_finishIngestion.xml index 9f322ac2406c0e53a1554ba78e3a48f6b9efd943..76b7a3a7153b6fe7c1346f1dc59023fda19c983e 100644 --- a/bt5/erp5_crm/SkinTemplateItem/portal_skins/erp5_crm/Event_finishIngestion.xml +++ b/bt5/erp5_crm/SkinTemplateItem/portal_skins/erp5_crm/Event_finishIngestion.xml @@ -71,6 +71,38 @@ are marked as \'New\' and appear in the worklist.\n """\n context.receive()\n +\n +# Forwarded mail\n +forwarded_mail = False\n +subject = context.getContentInformation().get(\'Subject\')\n +forwarded_mark_list = (\'Fwd\', \'Fw\', \'Tr\',)\n +if subject is not None and \':\' in subject:\n + if subject[0]==\'[\':# some email client enclose subject with \'[]\'\n + subject = subject[1:]\n + for mark in forwarded_mark_list:\n + if subject.startswith(mark+\':\'):\n + forwarded_mail = True\n + break\n +if forwarded_mail is True:\n + # find original recipient\n + source = context.getSource()\n + if source is not None:\n + context.setDestination(source)\n +\n + # find original sender\n + body = context.getTextContent()\n + from_header = \'From: \'\n + from_header_length = len(from_header)\n + Base_getPersonListFromFromHeader = context.Base_getPersonListFromFromHeader\n + line = \'\'\n + for line in body.split(\'\\n\'):\n + if line.startswith(from_header):\n + break\n + if line:\n + from_text = line[from_header_length:]\n + person_list = Base_getPersonListFromFromHeader(from_text)\n + if person_list:\n + context.setSource(person_list[0].getRelativeUrl())\n </string> </value> </item> <item> @@ -120,7 +152,25 @@ context.receive()\n <value> <tuple> <string>_getattr_</string> -<string>context</string> + <string>context</string> + <string>False</string> + <string>forwarded_mail</string> + <string>subject</string> + <string>forwarded_mark_list</string> + <string>None</string> + <string>_getitem_</string> + <string>_getiter_</string> + <string>mark</string> + <string>True</string> + <string>source</string> + <string>body</string> + <string>from_header</string> + <string>len</string> + <string>from_header_length</string> + <string>Base_getPersonListFromFromHeader</string> + <string>line</string> + <string>from_text</string> + <string>person_list</string> </tuple> </value> </item> diff --git a/bt5/erp5_crm/SkinTemplateItem/portal_skins/erp5_crm/Event_getPropertyDictFromContent.xml b/bt5/erp5_crm/SkinTemplateItem/portal_skins/erp5_crm/Event_getPropertyDictFromContent.xml index d4544c2ba03307859643782cf34ba69ae501ab9a..5daca475ca750ba76dfb2c951a4064618e783db7 100644 --- a/bt5/erp5_crm/SkinTemplateItem/portal_skins/erp5_crm/Event_getPropertyDictFromContent.xml +++ b/bt5/erp5_crm/SkinTemplateItem/portal_skins/erp5_crm/Event_getPropertyDictFromContent.xml @@ -65,9 +65,7 @@ </item> <item> <key> <string>_body</string> </key> - <value> <string encoding="cdata"><![CDATA[ - -"""\n + <value> <string>"""\n This script is called during the metadata discovery process\n for each event which has been ingested through the email interface\n by portal contributions. It tries to analyse the text content \n @@ -82,18 +80,10 @@ """\n \n getResultValue = context.getPortalObject().portal_catalog.getResultValue\n -\n -def getPersonList(information_text):\n - result = []\n - for recipient in information_text.split(\',\'):\n - if "<" in recipient:\n - recipient = recipient[recipient.find(\'<\') + 1:]\n - recipient = recipient[:recipient.find(\'>\')]\n - if recipient:\n - email = getResultValue(url_string=recipient, portal_type="Email")\n - if email is not None:\n - result.append(email.getParentValue().getRelativeUrl())\n - return result\n +Base_getPersonListFromFromHeader = context.Base_getPersonListFromFromHeader\n +def getPersonList(text):\n + return [person.getRelativeUrl()\n + for person in Base_getPersonListFromFromHeader(text)]\n \n content_information = context.getContentInformation()\n sender_list = getPersonList(content_information.get(\'From\', \'\'))\n @@ -138,9 +128,7 @@ if portal_type is not None:\n result[\'portal_type\'] = portal_type\n \n return result\n - - -]]></string> </value> +</string> </value> </item> <item> <key> <string>_code</string> </key> @@ -191,6 +179,7 @@ return result\n <string>_getattr_</string> <string>context</string> <string>getResultValue</string> + <string>Base_getPersonListFromFromHeader</string> <string>getPersonList</string> <string>content_information</string> <string>sender_list</string> diff --git a/bt5/erp5_crm/bt/change_log b/bt5/erp5_crm/bt/change_log index 826b31e8ba91319d11958b10a33c2f89701b4e00..fe5d0eb2d530ca81834777a25ca5d28cdc2905ba 100644 --- a/bt5/erp5_crm/bt/change_log +++ b/bt5/erp5_crm/bt/change_log @@ -1,3 +1,6 @@ +2008-4-1 yusei +* When receive forwarded mail, update recipient and sender automatically. + 2008-03-31 yusei * Add a type based method for rewriting mail message. diff --git a/bt5/erp5_crm/bt/revision b/bt5/erp5_crm/bt/revision index b7c52fb1813fefa7feb43758b4c9d2ca8f65a681..cc4f7f3feba9cb8765296f4ce390a79adf482e95 100644 --- a/bt5/erp5_crm/bt/revision +++ b/bt5/erp5_crm/bt/revision @@ -1 +1 @@ -212 \ No newline at end of file +218 \ No newline at end of file