~openerp-commiter/openobject-addons/trunk-extra-addons

« back to all changes in this revision

Viewing changes to dm_emailvision/dm_emailvision_api.py

  • Committer: Olivier Laurent
  • Date: 2009-06-29 08:53:20 UTC
  • mfrom: (3735.6.12 trunk-extra-addons)
  • Revision ID: olt@tinyerp.com-20090629085320-ktjwm6n4ndu9wyj0
[MERGE]

Show diffs side-by-side

added added

removed removed

Lines of Context:
23
23
from osv import fields
24
24
from osv import osv
25
25
import pooler
 
26
 
26
27
from lxml import etree
27
28
import httplib
28
29
import base64
29
 
 
 
30
import time
 
31
from dm_email.dm_email_document import set_image_email
 
32
from email.MIMEMultipart import MIMEMultipart
 
33
from email.MIMEText import MIMEText
 
34
from email.MIMEImage import MIMEImage
30
35
 
31
36
class dm_mail_service(osv.osv):
32
37
     _inherit = "dm.mail_service"
42
47
    }
43
48
dm_mail_service()
44
49
 
45
 
 
 
50
def _email_body(body):
 
51
    msgRoot = MIMEMultipart('related')
 
52
    msgRoot.preamble = 'This is a multi-part message in MIME format.'
 
53
 
 
54
    msg = MIMEMultipart('alternative')
 
55
    msgRoot.attach(msg)
 
56
 
 
57
    set_image_email(body,msgRoot)
 
58
    msgText = MIMEText(etree.tostring(body), 'html')
 
59
    msg.attach(msgText)
 
60
    return  msgRoot.as_string()
46
61
def send_email(cr,uid,obj,context):
47
62
 
48
63
    """ Get Emailmvision connection infos """
51
66
    ev_encrypt = obj.mail_service_id.ev_encrypt
52
67
    ev_random = obj.mail_service_id.ev_random
53
68
 
54
 
    email_dest = obj.address_id.email
55
 
    email_subject = obj.document_id.subject
 
69
    email_dest = obj.address_id.email or ''
 
70
    email_reply = obj.segment_id.campaign_id.trademark_id.email or ''
 
71
    email_subject = obj.document_id.subject or ''
 
72
    name_from = obj.segment_id.campaign_id.trademark_id.name or ''
 
73
    name_reply = obj.segment_id.campaign_id.trademark_id.name or ''
56
74
 
57
75
    pool = pooler.get_pool(cr.dbname)
58
76
    ir_att_obj = pool.get('ir.attachment')
59
77
    ir_att_ids = ir_att_obj.search(cr,uid,[('res_model','=','dm.campaign.document'),('res_id','=',obj.id),('file_type','=','html')])
60
78
    for attach in ir_att_obj.browse(cr,uid,ir_att_ids):
61
79
        message = base64.decodestring(attach.datas)
 
80
        root = etree.HTML(message)
 
81
        body = root.find('body')
 
82
 
62
83
        print "message :", message
63
84
 
64
 
        html_content = etree.HTML(message)
 
85
#        html_content = ''.join([ etree.tostring(x) for x in body.getchildren()])
 
86
#        print "body :", html_content
 
87
        html_content = _email_body(body)
65
88
        text_content = "This is a test"
 
89
        print "Test"
66
90
 
67
91
        "Composing XML"
68
92
        msg = etree.Element("MultiSendRequest")
69
93
        sendrequest = etree.SubElement(msg, "sendrequest")
70
 
 
71
94
        dyn = etree.SubElement(sendrequest, "dyn")
 
95
 
72
96
        dynentry1 = etree.SubElement(dyn, "entry")
73
97
        dynkey1 = etree.SubElement(dynentry1, "key")
74
98
        dynkey1.text = "EMAIL_DEST"
75
99
        dynvalue1 = etree.SubElement(dynentry1, "value")
76
100
        dynvalue1.text = email_dest
 
101
 
77
102
        dynentry2 = etree.SubElement(dyn, "entry")
78
103
        dynkey2 = etree.SubElement(dynentry2, "key")
79
104
        dynkey2.text = "SUBJECT"
80
105
        dynvalue2 = etree.SubElement(dynentry2, "value")
81
106
        dynvalue2.text = email_subject
82
107
 
 
108
        dynentry3 = etree.SubElement(dyn, "entry")
 
109
        dynkey3 = etree.SubElement(dynentry3, "key")
 
110
        dynkey3.text = "EMAIL_REPLY"
 
111
        dynvalue3 = etree.SubElement(dynentry3, "value")
 
112
        dynvalue3.text = email_reply
 
113
 
 
114
        dynentry4 = etree.SubElement(dyn, "entry")
 
115
        dynkey4 = etree.SubElement(dynentry4, "key")
 
116
        dynkey4.text = "NAME_FROM"
 
117
        dynvalue4 = etree.SubElement(dynentry4, "value")
 
118
        dynvalue4.text = name_from
 
119
 
 
120
        dynentry5 = etree.SubElement(dyn, "entry")
 
121
        dynkey5 = etree.SubElement(dynentry5, "key")
 
122
        dynkey5.text = "NAME_REPLY"
 
123
        dynvalue5 = etree.SubElement(dynentry5, "value")
 
124
        dynvalue5.text = name_reply
 
125
 
 
126
 
83
127
        content = etree.SubElement(sendrequest, "content")
84
128
        entry1 = etree.SubElement(content, "entry")
85
129
        key1 = etree.SubElement(entry1, "key")
86
130
        key1.text = "1"
87
131
        value1 = etree.SubElement(entry1, "value")
88
 
        value1.text = etree.CDATA(etree.tostring(html_content))
 
132
        value1.text = etree.CDATA(html_content)
89
133
        entry2 = etree.SubElement(content, "entry")
90
134
        key2 = etree.SubElement(entry2, "key")
91
135
        key2.text = "2"
99
143
        random = etree.SubElement(sendrequest, "random")
100
144
        random.text = ev_random
101
145
        senddate = etree.SubElement(sendrequest, "senddate")
102
 
        senddate.text = "2008-05-06T00:00:00.000+01:00"
 
146
        senddate.text = time.strftime('%Y-%m-%dT%H:%M:%S')
103
147
        synchrotype = etree.SubElement(sendrequest, "synchrotype")
104
148
        synchrotype.text = "NOTHING"
105
149
 
107
151
 
108
152
        xml_msg = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + etree.tostring(msg, encoding="utf-8")
109
153
 
110
 
 
111
154
        "Sending to Emailvision NMSXML API"
112
 
        ev_api = httplib.HTTP(ev_host +":80")
 
155
        ev_api = httplib.HTTP( ev_host +":80")
113
156
        ev_api.putrequest("POST", "/" + ev_service)
114
157
        ev_api.putheader("Content-type", "text/xml; charset=\"UTF-8\"")
115
158
        ev_api.putheader("Content-length", str(len(xml_msg)))
116
159
        ev_api.endheaders()
117
160
        ev_api.send(xml_msg)
118
 
 
 
161
    
119
162
        "Get Emailvision Reply"
120
163
        statuscode, statusmessage, header = ev_api.getreply()
121
164
        res = ev_api.getfile().read()
122
 
 
 
165
    
123
166
        if statuscode != 200:
 
167
            print "E"*50
124
168
            error_msg = "This document cannot be sent to Emailvision NMS API\nStatus Code : " + str(statuscode) + "\nStatus Message : " + statusmessage + "\nHeader : " + str(header) + "\nResult : " + res
125
169
            pool.get('dm.campaign.document').write(cr, uid, [obj.id], {'state':'error','error_msg':error_msg})
126
170
            return False