Пример #1
0
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
Пример #2
0
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
Пример #3
0
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)
Пример #4
0
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)	
Пример #5
0
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
Пример #6
0
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