Subversion Repositories SmartDukaan

Rev

Rev 18923 | Rev 18925 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
16561 amit.gupta 1
from datetime import datetime
17233 amit.gupta 2
from email import encoders
3
from email.mime.base import MIMEBase
4
from email.mime.multipart import MIMEMultipart
5
from email.mime.text import MIMEText
16561 amit.gupta 6
from paramiko.client import SSHClient
14843 amit.gupta 7
import StringIO
8
import base64
9
import gzip
16561 amit.gupta 10
import logging
11
import os
12
import paramiko
14843 amit.gupta 13
import pymongo
16561 amit.gupta 14
import random
17233 amit.gupta 15
import smtplib
16561 amit.gupta 16
import socket
13572 kshitij.so 17
import time
14843 amit.gupta 18
import urllib
14736 kshitij.so 19
import urllib2
15906 kshitij.so 20
import urlparse
18092 manas 21
from Crypto.Hash import MD5
22
from Crypto.Cipher import DES
23
import string
18895 amit.gupta 24
from shop2020.clients.CRMClient import CRMClient
18709 manas 25
from shop2020.clients.UserClient import UserClient
26
from shop2020.thriftpy.crm.ttypes import SearchFilter, TicketCategory, Ticket, \
27
     Activity, TicketPriority, TicketStatus, ActivityType
18923 manas 28
from dtr.utils.MailSender import Email
14705 kshitij.so 29
#TODO Need to add messy stuff to conf.
17233 amit.gupta 30
 
31
 
32
SENDER = "cnc.center@shop2020.in"
33
PASSWORD = "5h0p2o2o"
34
SMTP_SERVER = "smtp.gmail.com"
35
SMTP_PORT = 587    
36
 
18092 manas 37
_password = 'dtr18Feb2015'
38
_salt = '\xA9\x9B\xC8\x32\x56\x35\xE3\x03'
39
_iterations = 19
17233 amit.gupta 40
 
18092 manas 41
ALPHABET = string.ascii_uppercase + string.ascii_lowercase + \
42
           string.digits + '-_'
43
ALPHABET_REVERSE = dict((c, i) for (i, c) in enumerate(ALPHABET))
44
BASE = len(ALPHABET)
45
SIGN_CHARACTER = '$'
17233 amit.gupta 46
 
14708 kshitij.so 47
con=None
18257 manas 48
conDtrData = None
14736 kshitij.so 49
headers = { 
50
            'User-agent':'Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36',
51
            'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',      
52
            'Accept-Language' : 'en-US,en;q=0.8',                     
53
            'Accept-Charset' : 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
54
            'Connection':'keep-alive',
55
            'Accept-Encoding' : 'gzip,deflate,sdch'
56
        }
17340 kshitij.so 57
PROXY_MESH_LIVE = "ch.proxymesh.com:31280"
18153 kshitij.so 58
PROXY_MESH_GENERAL = "de.proxymesh.com:31280"
17273 kshitij.so 59
PROXY_FLIPKART = "117.240.187.35:3128"
15152 kshitij.so 60
 
14843 amit.gupta 61
PUSH_NOTIFICATION_URL='http://api.profittill.com/admin/users/push'
62
DTR_API_BASIC_AUTH = base64.encodestring('%s:%s' % ("dtr", "dtr18Feb2015")).replace('\n', '')
18871 manas 63
EMAIL_CRM_PUSH_URL = 'http://staging.profittill.com/feedbacks/crm_mail'
16371 amit.gupta 64
statusMap = {1:'Active',2:'EOL',3:'In Process',4:'Exclusive'}
17041 manish.sha 65
SOURCE_MAP = {'AMAZON':1,'FLIPKART':2,'SNAPDEAL':3,'SAHOLIC':4, 'SHOPCLUES.COM':5,'PAYTM.COM':6, 'HOMESHOP18.COM':7}
14747 kshitij.so 66
 
16398 amit.gupta 67
CB_INIT = 'Waiting Confirmation'
68
CB_PENDING = 'Pending'
69
CB_CREDIT_IN_PROCESS = 'Credit in process'
70
CB_CREDITED = 'Credited to wallet'
71
CB_NA = 'Not Applicable'
72
CB_APPROVED = 'Approved'
73
CB_REJECTED = 'Rejected'
74
CB_ONHOLD = 'On hold'
75
CB_CANCELLED = 'Cancelled'
76
 
16399 amit.gupta 77
ORDER_PLACED = 'Order Placed'
78
ORDER_DELIVERED = 'Delivered'
79
ORDER_SHIPPED = 'Shipped' #Lets see if we can make use of it
80
ORDER_CANCELLED = 'Cancelled'
16398 amit.gupta 81
 
16538 kshitij.so 82
AFFILIATE_OFFER_API= {1:"https://www.spicesafar.com/FreeBapp/fetchOffersSM?deviceId=%s&retailerCode=%d"}
83
AFFILIATE_OFFER_DESC_API = {1:"https://www.spicesafar.com/FreeBapp/individualOffersSM?deviceId=%s&offerId=%s&retailerCode=%d"}
16736 amit.gupta 84
CREDIT_TYPE_ORDER = "Order"
85
CREDIT_TYPE_APP = "App"
17873 kshitij.so 86
SUB_CATEGORY_MAP = {7:'Memory Card',8:'Cable',9:'USB Lights',10:"Screen Magnifier",11:"Car Charger",12:"Power Bank",13:"Pendrive",14:"Combo",15:"Charger",16:"Bluetooth Headset",17:"Speaker", \
18648 kshitij.so 87
                    18:"Adapter",19:"Cases",20:"Screen Guard",21:"Earphone",22:"Card Reader",23:"Mobile Holder",24:"AUX Cable",25:"OTG Cable",26:"Selfie Stick",27:"Back Cover",28:"Tempered Glass",29:"Battery", \
18568 kshitij.so 88
                    30:"Usb Hub",31:"Portable Music Player"}
16399 amit.gupta 89
 
14705 kshitij.so 90
def get_mongo_connection(host='localhost', port=27017):
91
    global con
92
    if con is None:
93
        print "Establishing connection %s host and port %d" %(host,port)
94
        try:
95
            con = pymongo.MongoClient(host, port)
96
        except Exception, e:
97
            print e
98
            return None
99
    return con
100
 
18257 manas 101
def get_mongo_connection_dtr_data(host='45.33.50.227', port=27017):
102
    global conDtrData
103
    if conDtrData is None:
104
        print "Establishing connection %s host and port %d" %(host,port)
105
        try:
106
            conDtrData = pymongo.MongoClient(host, port)
107
        except Exception, e:
108
            print e
109
            return None
110
    return conDtrData
111
 
13572 kshitij.so 112
def to_java_date(py_timestamp):
113
    try:
114
        java_date =  int(time.mktime(py_timestamp.timetuple())) * 1000 + py_timestamp.microsecond / 1000
115
        return java_date
116
    except:
14705 kshitij.so 117
        return None
16631 manish.sha 118
 
119
def to_py_date(java_timestamp):
16658 manish.sha 120
    try:
16660 manish.sha 121
        date = datetime.fromtimestamp(java_timestamp / 1e3)
16658 manish.sha 122
    except:
123
        return None
124
 
16631 manish.sha 125
    return date
14705 kshitij.so 126
 
127
def getCashBack(skuId, source_id, category_id, mc, mongoHost):
17605 kshitij.so 128
    if mc.get("category_cash_back") is None or not bool(mc.get("category_cash_back")):
14705 kshitij.so 129
        populateCashBack(mc, mongoHost)
130
    itemCashBackMap = mc.get("item_cash_back")
131
    itemCashBack = itemCashBackMap.get(skuId)
132
    if itemCashBack is not None:
133
        return itemCashBack
134
    cashBackMap = mc.get("category_cash_back")
135
    sourceCashBack = cashBackMap.get(source_id)
136
    if sourceCashBack is not None and len(sourceCashBack) > 0:
137
        for cashBack in sourceCashBack:
138
            if cashBack.get(category_id) is None:
139
                continue
140
            else:
141
                return cashBack.get(category_id)
142
    else:
143
        return {}
144
 
145
def populateCashBack(mc, mongoHost):
146
    print "Populating cashback"
147
    cashBackMap = {}
148
    itemCashBackMap = {}
149
    cashBack = list(get_mongo_connection(host=mongoHost).Catalog.CategoryCashBack.find())
150
    for row in cashBack:
151
        temp_map = {}
152
        temp_list = []
153
        if cashBackMap.has_key(row['source_id']):
154
            arr = cashBackMap.get(row['source_id'])
155
            for val in arr:
156
                temp_list.append(val)
157
            temp_map[row['category_id']] = row
158
            temp_list.append(temp_map)
159
            cashBackMap[row['source_id']] = temp_list 
160
        else:
161
            temp_map[row['category_id']] = row
162
            temp_list.append(temp_map)
163
            cashBackMap[row['source_id']] = temp_list
164
    itemCashBack = list(get_mongo_connection(host=mongoHost).Catalog.ItemCashBack.find())
165
    for row in itemCashBack:
166
        if not itemCashBackMap.has_key(row['skuId']):
167
            itemCashBackMap[row['skuId']] = row
168
    mc.set("item_cash_back", itemCashBackMap, 24 * 60 * 60)
169
    mc.set("category_cash_back", cashBackMap, 24 * 60 * 60)
170
 
14736 kshitij.so 171
def ungzipResponse(r):
172
    headers = r.info()
173
    if headers.get('Content-Encoding')=='gzip':
174
        url_f = StringIO.StringIO(r.read())
175
        gz = gzip.GzipFile(fileobj=url_f)
176
        html = gz.read()
177
        gz.close()
178
        return html
179
    return r.read()
180
 
181
 
17267 kshitij.so 182
def fetchResponseUsingProxy(url, headers=headers, livePricing=None, proxy=True, flipkart=False):
17041 manish.sha 183
    if livePricing is None:
184
        PROXY_URL = PROXY_MESH_GENERAL
17267 kshitij.so 185
    elif flipkart:
186
        PROXY_URL = PROXY_FLIPKART
17041 manish.sha 187
    else:
188
        PROXY_URL = PROXY_MESH_LIVE
189
    if proxy:
190
        print PROXY_URL
191
        proxy = urllib2.ProxyHandler({'http': PROXY_URL})
192
        opener = urllib2.build_opener(proxy)
193
        urllib2.install_opener(opener)
14736 kshitij.so 194
    req = urllib2.Request(url,headers=headers)
195
    response = urllib2.urlopen(req)
196
    response_data = ungzipResponse(response)
197
    response.close()
198
    return response_data
199
 
14948 amit.gupta 200
def getCurrTimeStamp():
201
    return toTimeStamp(datetime.now())
202
 
203
def toTimeStamp(dateTimeObj):
204
    return int(time.mktime(dateTimeObj.timetuple()))
14987 amit.gupta 205
def fromTimeStamp(timestamp):
15166 amit.gupta 206
    return datetime.fromtimestamp(timestamp)
207
 
16499 kshitij.so 208
def getNlcPoints(deal):
209
    if not(deal.get('minNlc') and deal.get('maxNlc')):
210
        print "Raising exception minNlc, maxNlc not found for %d"%(deal.get('_id'))
15182 kshitij.so 211
        raise
16499 kshitij.so 212
    if deal.get('status') == 2:
15182 kshitij.so 213
        eolWeight = .60
214
    else:
215
        eolWeight = 1.0
16499 kshitij.so 216
    if deal.get('category_id') == 3:
15182 kshitij.so 217
        basePointPercentage = 5.0
218
        maxNlcPoints = 200
16499 kshitij.so 219
    elif deal.get('category_id') == 5:
15182 kshitij.so 220
        basePointPercentage = 8.0
221
        maxNlcPoints = 150
222
    else:
223
        basePointPercentage = 10.0
224
        maxNlcPoints = 150
16499 kshitij.so 225
    discFromMinNlc = float((deal.get('minNlc') - (deal.get('available_price'))))/(deal.get('available_price')) *100
226
    discFromMaxNlc = float((deal.get('maxNlc') - (deal.get('available_price'))))/(deal.get('available_price')) *100
15182 kshitij.so 227
    print discFromMinNlc
228
    print discFromMaxNlc
229
    if discFromMinNlc > 0:
230
        nlcPoints = 100/basePointPercentage * discFromMinNlc
231
    elif discFromMinNlc < 0 and discFromMaxNlc > 0:
232
        nlcPoints = 0
233
    else:
234
        nlcPoints = 100/basePointPercentage * discFromMinNlc
235
    if (min(nlcPoints,maxNlcPoints)) > 0:
236
        nlcPoints = (min(nlcPoints,maxNlcPoints)) * eolWeight
237
    else:
238
        nlcPoints = (min(nlcPoints,maxNlcPoints))
239
 
240
    return nlcPoints
241
 
15166 amit.gupta 242
def getLogger(filePath):
243
    lgr = logging.getLogger()
244
    lgr.setLevel(logging.DEBUG)
245
    fh = logging.FileHandler(filePath)
246
    fh.setLevel(logging.INFO)
247
    frmt = logging.Formatter('%(asctime)s - %(name)s - %(message)s')
248
    fh.setFormatter(frmt)
249
    lgr.addHandler(fh)
250
    return lgr
15868 kshitij.so 251
 
252
def removePriceFormatting(price_string):
253
    return price_string.strip().replace('Rs.', '').replace('Rs', '').replace(',', '').replace(' ', '').replace('&nbsp;', '').split('.')[0]
15906 kshitij.so 254
 
15950 kshitij.so 255
def transformUrl(url,source_id):
15906 kshitij.so 256
    if source_id == 5:
257
        finalUrl = urlparse.urlparse(url)
258
        return finalUrl._replace(netloc=finalUrl.netloc.replace(finalUrl.hostname, 'm.shopclues.com')).geturl()
15950 kshitij.so 259
    elif source_id ==1:
260
        return url
261
    elif source_id == 2:
262
        finalUrl = urlparse.urlparse(url)
263
        return finalUrl._replace(netloc=finalUrl.netloc.replace(finalUrl.hostname, socket.gethostbyname(finalUrl.hostname))).geturl()
17013 manish.sha 264
    elif source_id == 7:
265
        productId = url.split('product:')[1].split('/')[0]
266
        finalUrl = 'http://m.homeshop18.com/product.mobi?productId='+str(productId)
267
        return finalUrl
15906 kshitij.so 268
 
269
 
16421 amit.gupta 270
 
271
 
272
def find_between( s, first, last ):
273
    try:
274
        start = s.find( first ) + len( first )
275
        end = s.rfind( last, start )
276
        if start ==-1 or end ==-1:
277
            return ""
278
        return s[start:end]
279
    except ValueError:
280
        return ""
15950 kshitij.so 281
 
15906 kshitij.so 282
if __name__ == '__main__':
15950 kshitij.so 283
    print transformUrl("http://www.flipkart.com/redmi-2/p/itme8ygtcfax6w39",2)
17233 amit.gupta 284
 
285
def sendmail(email, message, title, *varargs):
286
    if email == "":
287
        return
288
    mailServer = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
289
    mailServer.ehlo()
290
    mailServer.starttls()
291
    mailServer.ehlo()
15906 kshitij.so 292
 
17233 amit.gupta 293
    # Create the container (outer) email message.
294
    msg = MIMEMultipart()
295
    msg['Subject'] = title
296
    msg.preamble = title
297
    html_msg = MIMEText(message, 'html')
298
    msg.attach(html_msg)
15906 kshitij.so 299
 
17233 amit.gupta 300
    #snapdeal more to be added here
301
    for fileName in varargs:
302
        snapdeal = MIMEBase('application', 'vnd.ms-excel')
303
        snapdeal.set_payload(file(fileName).read())
304
        encoders.encode_base64(snapdeal)
305
        snapdeal.add_header('Content-Disposition', 'attachment;filename=' + fileName)
306
        msg.attach(snapdeal)
307
 
308
 
309
    MAILTO = email 
310
    mailServer.login(SENDER, PASSWORD)
311
    mailServer.sendmail(PASSWORD, MAILTO, msg.as_string())
312
 
313
 
16561 amit.gupta 314
def readSSh(fileName):
315
    try:
316
        str1 = open(fileName).read()
317
        return str1
318
    except:
319
        ssh_client = SSHClient()
320
        str1 = ""
321
        ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
322
        ssh_client.connect('dtr', 22, 'root', 'ecip$dtrMay2014')
323
        sftp_client = ssh_client.open_sftp()
324
        try:
325
            if not os.path.exists(os.path.dirname(fileName)):
326
                os.makedirs(os.path.dirname(fileName))
327
            sftp_client.get(fileName, fileName)
328
            try:
329
                str1 = open(fileName).read()
330
                return str1
331
            finally:
332
                pass
333
        except:
334
            "could not read"
335
        return str1
18134 kshitij.so 336
 
18092 manas 337
def encryptMessage(plaintext_to_encrypt1):
338
    hasher = MD5.new()
339
    hasher.update(_password)
340
    hasher.update(_salt)
341
    result = hasher.digest()
342
    for i in range(1, _iterations):
343
        hasher = MD5.new()
344
        hasher.update(result)
345
        result = hasher.digest()
346
 
347
    padding = 8 - len(plaintext_to_encrypt1) % 8
348
    plaintext_to_encrypt1 += chr(padding) * padding
349
    encoder = DES.new(result[:8], DES.MODE_CBC, result[8:16])
350
    encrypted = encoder.encrypt(plaintext_to_encrypt1)
351
 
352
    check1 =  encrypted.encode('base64')
353
    return check1
354
 
355
def decryptMessage(encryptedData):
356
    padding = 8 - len(encryptedData) % 8
357
    encryptedData += chr(padding) * padding
358
    hasher = MD5.new()
359
    hasher.update(_password)
360
    hasher.update(_salt)
361
    result = hasher.digest()
362
    for i in range(1, _iterations):
363
        hasher = MD5.new()
364
        hasher.update(result)
365
        result = hasher.digest()
366
 
367
    encoder2 = DES.new(result[:8], DES.MODE_CBC, result[8:16])
368
    decodeString =  encoder2.decrypt(encryptedData.decode('base64'))
18094 manas 369
    return ''.join(e for e in decodeString if e.isalnum() or e is '/' or e is ':' or e is ',' or e is '.' or e is '=' or e is '?' or e is '_')
18092 manas 370
 
371
def num_encode(n):
372
    if n < 0:
373
        return SIGN_CHARACTER + num_encode(-n)
374
    s = []
375
    while True:
376
        n, r = divmod(n, BASE)
377
        s.append(ALPHABET[r])
378
        if n == 0: break
379
    return ''.join(reversed(s))
380
 
381
def num_decode(s):
382
    if s[0] == SIGN_CHARACTER:
383
        return -num_decode(s[1:])
384
    n = 0
385
    for c in s:
386
        n = n * BASE + ALPHABET_REVERSE[c]
387
    return n    
18156 amit.gupta 388
 
389
def todict(obj, classkey=None):
390
    if isinstance(obj, dict):
391
        data = {}
392
        for (k, v) in obj.items():
393
            data[k] = todict(v, classkey)
394
        return data
395
    elif hasattr(obj, "_ast"):
396
        return todict(obj._ast())
397
    elif hasattr(obj, "__iter__"):
398
        return [todict(v, classkey) for v in obj]
399
    elif hasattr(obj, "__dict__"):
400
        data = dict([(key, todict(value, classkey)) 
401
            for key, value in obj.__dict__.iteritems() 
402
            if not callable(value) and not key.startswith('_')])
403
        if classkey is not None and hasattr(obj, "__class__"):
404
            data[classkey] = obj.__class__.__name__
405
        return data
406
    else:
18440 amit.gupta 407
        return obj
408
 
409
def getSkuData(storeId, identifier):
410
    if storeId in (1,2,4,5,6):
411
        skuData = get_mongo_connection().Catalog.MasterData.find_one({'identifier':identifier, 'source_id':storeId})
412
    elif storeId == 3:
413
        skuData = get_mongo_connection().Catalog.MasterData.find_one({'secondaryIdentifier':identifier, 'source_id':storeId})
414
    return skuData
18630 manas 415
 
18636 manas 416
def sendCrmProjectMail(userId,disposition_description,disposition_comments):
417
    parameters = ("user_id", userId),("subject", disposition_description),("message",disposition_comments)
418
    parameters = urllib.urlencode(parameters)
18667 manas 419
    emailpushrequest = urllib2.Request(EMAIL_CRM_PUSH_URL, parameters, headers=headers)
420
    emailpushrequest.add_header("Authorization", "Basic %s" % DTR_API_BASIC_AUTH)
18860 manas 421
    connection = urllib2.urlopen(emailpushrequest)
422
    connection.close()
18709 manas 423
 
424
def generateCrmTicket(customerFeedBack):
18923 manas 425
    sendCrmProjectMailByDtr(customerFeedBack)
18845 kshitij.so 426
    crmServiceClient = CRMClient().get_client() 
427
    userServiceClient = UserClient().get_client()   
18709 manas 428
    ticket = Ticket()
429
    activity = Activity()
430
    ticket.creatorId = 1
431
    user = userServiceClient.getUserByEmail(customerFeedBack.get('email'))
432
    if 'Return or replacement pending' in customerFeedBack.get('subject'):
433
        ticket.category = TicketCategory.PROFITMANDI_REFUND_PROBLEM
434
        ticket.priority = TicketPriority.HIGH
435
    elif 'Product Quality issue' in customerFeedBack.get('subject'):
436
        ticket.category = TicketCategory.PROFITMANDI_PRODUCT_ISSUE
437
        ticket.priority = TicketPriority.HIGH
438
    elif 'Delayed Delivery' in customerFeedBack.get('subject'):
439
        ticket.category = TicketCategory.PROFITMANDI_DELAYED_DELIVERY
440
        ticket.priority = TicketPriority.HIGH
441
    elif 'Technical issue at Profitmandi' in customerFeedBack.get('subject'):
442
        ticket.category = TicketCategory.PROFITMANDI_TECHNICAL_PROBLEM
443
        ticket.priority = TicketPriority.HIGH
444
    else:
445
        ticket.category = TicketCategory.PROFITMANDI_OTHER
446
        ticket.priority = TicketPriority.MEDIUM
447
 
448
    ticket.description = 'User Specified Subject :- '+ customerFeedBack.get('subject') + ' | ' +  customerFeedBack.get('message')
449
    ticket.customerEmailId = customerFeedBack.get('email')
450
    if user is not None and user.userId !=-1:
451
        ticket.customerId = user.userId
18871 manas 452
    ticket.assigneeId=57
18709 manas 453
    ticket.status = TicketStatus.OPEN
18714 manas 454
    ticket.openDate = to_java_date(customerFeedBack.get('created'))
18709 manas 455
    ticket.customerMobileNumber = customerFeedBack.get('mobile_number')
456
    ticket.customerName = customerFeedBack.get('customer_name')  
457
    activity.creatorId = 1
458
    activity.ticketAssigneeId = ticket.assigneeId
459
    activity.type = ActivityType.PROFITMANDI_CRM_APP_TICKET
460
    activity.description = 'User Specified Subject :- '+ customerFeedBack.get('subject') + ' | ' +  customerFeedBack.get('message')
461
 
462
    activity.ticketCategory = ticket.category
463
    activity.ticketDescription = ticket.description
464
    activity.ticketPriority = ticket.priority
465
    activity.ticketStatus = ticket.status
466
    activity.customerEmailId = customerFeedBack.get('email')
467
    if user is not None and user.userId !=-1:
468
        activity.customerId  = user.userId
469
    activity.customerName = customerFeedBack.get('customer_name')
470
    activity.customerMobileNumber = customerFeedBack.get('mobile_number')
18715 manas 471
    activity.creationTimestamp = ticket.openDate
18709 manas 472
    activity.customerEmailId= customerFeedBack.get('email')
473
 
474
    if not crmServiceClient.isAlive():
18845 kshitij.so 475
        crmServiceClient = CRMClient().get_client()
18709 manas 476
 
477
    ticketId = crmServiceClient.insertTicket(ticket, activity)
478
 
479
    if ticketId > 0:
480
        return True
481
    else:
18923 manas 482
        return False
483
 
484
def sendCrmProjectMailByDtr(customerFeedback):
485
    mailServer = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
486
    mailServer.ehlo()
487
    mailServer.starttls()
488
    mailServer.ehlo()
489
    title=customerFeedback.get('subject')    
490
    msg = MIMEMultipart()
491
    msg['Subject'] = title
492
    msg.preamble = title
493
    message="User Id :" + str(customerFeedback.get('user_id'))
494
    message1="Email :" + str(customerFeedback.get('email'))
495
    message2="Mobile Number : " + str(customerFeedback.get('mobile_number'))
496
    message3="Subject : " + str(customerFeedback.get('subject'))
497
    message4="Message : " + str(customerFeedback.get('message'))
498
    html_msg = MIMEText(message+"<br>"+message1+"<br>"+message2+"<br>"+message3+"<br>"+message4, 'html')
18924 manas 499
    msg.attach(html_msg)
18923 manas 500
 
501
    #MAILTO = ['amit.sirohi@shop2020.in','rajneesh.arora@saholic.com', 'shailesh.kumar@shop2020.in','chaitnaya.vats@shop2020.in','manas.kapoor@shop2020.in']
502
    MAILTO = ['manas.kapoor@saholic.com']
503
    mailServer.login(SENDER, PASSWORD)
504
    try:
505
        mailServer.sendmail(SENDER, MAILTO, msg.as_string())
506
    except:
507
        m = Email('localhost')
508
        mFrom = "dtr@shop2020.in"
509
        m.setFrom(mFrom)
510
        for receipient in MAILTO:
511
            m.addRecipient(receipient)
512
        m.setSubject(title)
513
        m.send()
514
    return