def sendEmail(text, email_class, identity_dict, email_dict, state, solved_pq = False): retries, count = 3, 0 while count < retries: try: message = composeMessage(text, email_class, identity_dict, email_dict, state, solved_pq) own_addr = identity_dict['Email'] own_name = ' '.join([identity_dict['First_name'], identity_dict['Last_name']]) destination_addr = email_dict['Reply-To'] text_subtype = 'plain' mime_msg = MIMEText(message, text_subtype) mime_msg['Subject'] = composeSubject(email_dict) mime_msg['From'] = own_name + '<' + own_addr + '>' if destination_addr in getIdentityEmails(): break mime_msg['To'] = destination_addr server_addr = identity_dict['SMTP'] conn = SMTP_SSL(server_addr) conn.set_debuglevel(False) conn.login(identity_dict['Username'], identity_dict['Password']) try: conn.sendmail(own_addr, destination_addr, mime_msg.as_string()) finally: print "Send email!" conn.close() syncGuardian(mime_msg, identity_dict) except Exception: count += 1 continue pq_status, pq_result = hasPQ(text), None if pq_status: pq_result = hasPQ(text).values()[0] return {'Date': time.ctime(), 'Sender': own_addr, 'Receiver': destination_addr, 'Subject': composeSubject(email_dict), 'Body': message, 'First_name': identity_dict['First_name'], 'Last_name': identity_dict['Last_name'], 'Origin': 'SYSTEM', 'PQ': pq_result} return None
def sendEmail(text, email_class, identity_dict, email_dict, state, solved_pq=False): retries, count = 3, 0 while count < retries: try: message = composeMessage(text, email_class, identity_dict, email_dict, state, solved_pq) own_addr = identity_dict['Email'] own_name = ' '.join( [identity_dict['First_name'], identity_dict['Last_name']]) destination_addr = email_dict['Reply-To'] text_subtype = 'plain' mime_msg = MIMEText(message, text_subtype) mime_msg['Subject'] = composeSubject(email_dict) mime_msg['From'] = own_name + '<' + own_addr + '>' if destination_addr in getIdentityEmails(): break mime_msg['To'] = destination_addr server_addr = identity_dict['SMTP'] conn = SMTP_SSL(server_addr) conn.set_debuglevel(False) conn.login(identity_dict['Username'], identity_dict['Password']) try: conn.sendmail(own_addr, destination_addr, mime_msg.as_string()) finally: print "Send email!" conn.close() syncGuardian(mime_msg, identity_dict) except Exception: count += 1 continue pq_status, pq_result = hasPQ(text), None if pq_status: pq_result = hasPQ(text).values()[0] return { 'Date': time.ctime(), 'Sender': own_addr, 'Receiver': destination_addr, 'Subject': composeSubject(email_dict), 'Body': message, 'First_name': identity_dict['First_name'], 'Last_name': identity_dict['Last_name'], 'Origin': 'SYSTEM', 'PQ': pq_result } return None
def sendRequest(conv_store): for key in conv_store: message = random.choice(['Hello', 'Hi']) message += '\n' message += '\n' message += 'I am interested to find out more about this. Please send me the full details.' message += '\n' message += 'Thanks,' message += '\n' message += 'Peter' own_addr = '*****@*****.**' own_name = 'Peter Smith' bucket = conv_store[key]['Bucket'] mime_msg = MIMEText(message, 'plain') mime_msg['From'] = own_name + ' <' + own_addr + '>' if not bucket: continue else: destination_addr = bucket[0] for email_addr in bucket: if email_addr not in getIdentityEmails(): mime_msg['To'] = email_addr if conv_store[key]['Messages'][0]['Subject']: mime_msg[ 'Subject'] = "Re: " + conv_store[key]['Messages'][0]['Subject'] else: mime_msg['Subject'] = "Re: " server_addr = 'smtp.mail.yahoo.com' conn = SMTP_SSL(server_addr) conn.set_debuglevel(True) conn.login(own_addr, 'test123') try: print "Preview:\n" print mime_msg.as_string() conn.sendmail(own_addr, destination_addr, mime_msg.as_string()) finally: print "Send email!" conn.close() time.sleep(10)
def sendRequest(conv_store): for key in conv_store: message = random.choice(['Hello', 'Hi']) message += '\n' message += '\n' message += 'I am interested to find out more about this. Please send me the full details.' message += '\n' message += 'Thanks,' message += '\n' message += 'Peter' own_addr = '*****@*****.**' own_name = 'Peter Smith' bucket = conv_store[key]['Bucket'] mime_msg = MIMEText(message, 'plain') mime_msg['From'] = own_name + ' <' + own_addr + '>' if not bucket: continue else: destination_addr = bucket[0] for email_addr in bucket: if email_addr not in getIdentityEmails(): mime_msg['To'] = email_addr if conv_store[key]['Messages'][0]['Subject']: mime_msg['Subject'] = "Re: " + conv_store[key]['Messages'][0]['Subject'] else: mime_msg['Subject'] = "Re: " server_addr = 'smtp.mail.yahoo.com' conn = SMTP_SSL(server_addr) conn.set_debuglevel(True) conn.login(own_addr, 'test123') try: print "Preview:\n" print mime_msg.as_string() conn.sendmail(own_addr, destination_addr, mime_msg.as_string()) finally: print "Send email!" conn.close() time.sleep(10)
def theLoop(): supported_msgs = ['lottery', 'orphans', 'mystery_shopper'] safe_origins = ['IDENTITY', 'MBOX'] while True: wait_flag = False hashes, conv_store = init() msg_dict = {} current_msg = getMessage() if current_msg: origin, content = current_msg['Origin'], current_msg['Content'] bounce = detectBounce(content, origin, safe_origins) if bounce: conv_store = closeThreads(conv_store, bounce) current_bucket = getEmails(content) identity_emails = getIdentityEmails() conv_id = getConvIDByBucket(current_bucket, conv_store, identity_emails) print "Candidate bucket", current_bucket if conv_id != None and bounce == None and conv_store[conv_id]['State'] != 'CLOSED': print "Thread detected as", conv_id conv_store[conv_id]['Bucket'] = updateBucket(current_bucket, conv_store[conv_id]['Bucket'], identity_emails) identity_dict = getIdentityByID(conv_store[conv_id]['Identity_ID']) list_of_email_dicts = extractInfo(content, True, identity_dict) for email_dict in list_of_email_dicts: if (conv_store[conv_id]['Class'] in supported_msgs): conv_store[conv_id]['Messages'][getNextKey(conv_store[conv_id]['Messages'])] = {'Date': email_dict['Date'], 'Body': email_dict['Body'], 'Sender': email_dict['Reply-To'], 'Receiver': email_dict['To'], 'Subject': email_dict['Subject'], 'First_name': email_dict['First_name'], 'Last_name': email_dict['Last_name'], 'Origin': origin, 'PQ': None} sent_email_dict = sendEmail(email_dict['Body'], conv_store[conv_id]['Class'], identity_dict, email_dict, conv_store[conv_id]['State'] + 1, solvedPQ(conv_store[conv_id]['Messages'])) if sent_email_dict: conv_store[conv_id]['Messages'][getNextKey(conv_store[conv_id]['Messages'])] = sent_email_dict wait_flag = True conv_store[conv_id]['State'] += 1 if conv_id == None and bounce == None: print "No bucket detected!" conv, conv['Messages'], conv['Class'], conv['State'], conv['PQ'] = {}, {}, '', -1, False conv['Bucket'] = updateBucket(current_bucket, [], identity_emails) conv['Identity_ID'], identity_dict = getRandomIdentity() list_of_email_dicts = extractInfo(current_msg['Content']) msg_dict, email_class = {}, None for email_dict in list_of_email_dicts: class_candidate = classify(email_dict['Body']) if class_candidate: email_class = class_candidate.values()[0] else: continue hash_value = getHash(email_dict['Body']) if (email_class in supported_msgs) and (hash_value not in hashes): msg_dict[getNextKey(msg_dict)] = {'Date': email_dict['Date'], 'Body': email_dict['Body'], 'Sender': email_dict['Reply-To'], 'Receiver': email_dict['To'], 'Subject': email_dict['Subject'], 'First_name': email_dict['First_name'], 'Last_name': email_dict['Last_name'], 'Origin': origin, 'PQ': None} conv['State'] = 0 sent_email_dict = sendEmail(email_dict['Body'], email_class, identity_dict, email_dict, conv['State']) if sent_email_dict: msg_dict[getNextKey(msg_dict)] = sent_email_dict wait_flag = True if msg_dict[getNextKey(msg_dict) - 1]: hashes.append(hash_value) else: if hash_value not in hashes: saveUnsupported(email_dict) conv['Class'] = email_class conv['State'] = 1 conv['Messages'] = msg_dict for elem in msg_dict: if msg_dict[elem]['PQ']: conv['PQ'] = True conv_store[getNextKey(conv_store)] = conv else: print "Idle. Nothing to do." conv_store = removeEmptyThreads(conv_store) save(hashes, conv_store) if wait_flag: idle = 60 + random.choice([x for x in range(10, 101) if not x%10]) time.sleep(idle) print "Waiting %d secs." % (idle) else: time.sleep(1.5) return
def theLoop(): supported_msgs = ['lottery', 'orphans', 'mystery_shopper'] safe_origins = ['IDENTITY', 'MBOX'] while True: wait_flag = False hashes, conv_store = init() msg_dict = {} current_msg = getMessage() if current_msg: origin, content = current_msg['Origin'], current_msg['Content'] bounce = detectBounce(content, origin, safe_origins) if bounce: conv_store = closeThreads(conv_store, bounce) current_bucket = getEmails(content) identity_emails = getIdentityEmails() conv_id = getConvIDByBucket(current_bucket, conv_store, identity_emails) print "Candidate bucket", current_bucket if conv_id != None and bounce == None and conv_store[conv_id][ 'State'] != 'CLOSED': print "Thread detected as", conv_id conv_store[conv_id]['Bucket'] = updateBucket( current_bucket, conv_store[conv_id]['Bucket'], identity_emails) identity_dict = getIdentityByID( conv_store[conv_id]['Identity_ID']) list_of_email_dicts = extractInfo(content, True, identity_dict) for email_dict in list_of_email_dicts: if (conv_store[conv_id]['Class'] in supported_msgs): conv_store[conv_id]['Messages'][getNextKey( conv_store[conv_id]['Messages'])] = { 'Date': email_dict['Date'], 'Body': email_dict['Body'], 'Sender': email_dict['Reply-To'], 'Receiver': email_dict['To'], 'Subject': email_dict['Subject'], 'First_name': email_dict['First_name'], 'Last_name': email_dict['Last_name'], 'Origin': origin, 'PQ': None } sent_email_dict = sendEmail( email_dict['Body'], conv_store[conv_id]['Class'], identity_dict, email_dict, conv_store[conv_id]['State'] + 1, solvedPQ(conv_store[conv_id]['Messages'])) if sent_email_dict: conv_store[conv_id]['Messages'][getNextKey( conv_store[conv_id] ['Messages'])] = sent_email_dict wait_flag = True conv_store[conv_id]['State'] += 1 if conv_id == None and bounce == None: print "No bucket detected!" conv, conv['Messages'], conv['Class'], conv['State'], conv[ 'PQ'] = {}, {}, '', -1, False conv['Bucket'] = updateBucket(current_bucket, [], identity_emails) conv['Identity_ID'], identity_dict = getRandomIdentity() list_of_email_dicts = extractInfo(current_msg['Content']) msg_dict, email_class = {}, None for email_dict in list_of_email_dicts: class_candidate = classify(email_dict['Body']) if class_candidate: email_class = class_candidate.values()[0] else: continue hash_value = getHash(email_dict['Body']) if (email_class in supported_msgs) and (hash_value not in hashes): msg_dict[getNextKey(msg_dict)] = { 'Date': email_dict['Date'], 'Body': email_dict['Body'], 'Sender': email_dict['Reply-To'], 'Receiver': email_dict['To'], 'Subject': email_dict['Subject'], 'First_name': email_dict['First_name'], 'Last_name': email_dict['Last_name'], 'Origin': origin, 'PQ': None } conv['State'] = 0 sent_email_dict = sendEmail(email_dict['Body'], email_class, identity_dict, email_dict, conv['State']) if sent_email_dict: msg_dict[getNextKey(msg_dict)] = sent_email_dict wait_flag = True if msg_dict[getNextKey(msg_dict) - 1]: hashes.append(hash_value) else: if hash_value not in hashes: saveUnsupported(email_dict) conv['Class'] = email_class conv['State'] = 1 conv['Messages'] = msg_dict for elem in msg_dict: if msg_dict[elem]['PQ']: conv['PQ'] = True conv_store[getNextKey(conv_store)] = conv else: print "Idle. Nothing to do." conv_store = removeEmptyThreads(conv_store) save(hashes, conv_store) if wait_flag: idle = 60 + random.choice( [x for x in range(10, 101) if not x % 10]) time.sleep(idle) print "Waiting %d secs." % (idle) else: time.sleep(1.5) return