Esempio n. 1
0
	def handle_bad_emails(self,email_server,uid,raw,reason):
		if cint(email_server.settings.use_imap):
			import email
			try:
				mail = email.message_from_string(raw)

				unique_id = get_unique_id(mail)
				message_id = mail.get('Message-ID')
			except Exception:
				message_id = "can't be parsed"

			unhandled_email = frappe.get_doc({
				"doctype": "Unhandled Emails",
				"email_account": email_server.settings.email_account,
				"uid": uid,
				"message_id": message_id,
				"unique_id":unique_id,
				"reason":reason
			})
			unhandled_email.save();
			frappe.db.commit();
Esempio n. 2
0
def execute():
	frappe.reload_doctype("Communication")
	frappe.reload_doctype("Unhandled Emails")
	for email_account in frappe.get_list("Email Account", filters={"awaiting_password": 0}):
		email_acc = frappe.get_doc("Email Account", email_account)
		try:
			email_server = email_acc.get_server(in_receive=True)
			email_server.imap.select("Inbox")
			#messages =email_server.imap.uid('fetch', "1:*", '(BODY.PEEK[HEADER.FIELDS (FROM TO ENVELOPE-TO DATE RECEIVED)])')
			messages = email_server.imap.uid('fetch', "1:*",'(BODY.PEEK[HEADER])')
			comms = frappe.db.sql("""select uid,name from `tabCommunication`
					where email_account=%(email_account)s""",{"email_account":email_account.name},as_dict=1 )
			unhandled = frappe.db.sql("""select uid,name from `tabUnhandled Emails`
					where email_account=%(email_account)s""",{"email_account":email_account.name},as_dict=1 )
			count =0;
			for i, item in enumerate(messages[1]):
				if isinstance(item, tuple):

					# check for uid appended to the end
					uid = re.search(r'UID [0-9]*', messages[1][i + 1], re.U | re.I)
					if uid:
						uid = uid.group()[4:]
					else:
						uid = ""

					# check for uid at start
					if not uid:
						# for m in item:
						uid = re.search(r'UID [0-9]*', messages[1][i][0], re.U | re.I)
						if uid:
							uid = uid.group()[4:]
						else:
							uid = ""
							continue
					mail = email.message_from_string(item[1])
					unique_id = get_unique_id(mail)

					#unique_id = hashlib.md5((mail.get("X-Original-From") or mail["From"])+(mail.get("To") or mail.get("Envelope-to"))+(mail.get("Received") or mail["Date"])).hexdigest()
					found =False
					for comm in comms:
						if comm.uid == uid:
							found =True
							frappe.db.sql("""update `tabCommunication`
	                                           set unique_id = %(unique_id)s
	                                       where  name = %(name)s
	                                       """, {"unique_id": unique_id,
					                            "name":comm.name})

					if not found:
						for comm in unhandled:
							if comm.uid == uid:
								found = True
								frappe.db.sql("""update `tabUnhandled Emails`
	                                                   set unique_id = %(unique_id)s
	                                               where  name = %(name)s
	                                               """, {"unique_id": unique_id,
		                                                 "name": comm.name})
					if found:
						count += 1

					#frappe.db.sql("""update `tabCommunication`
                    #                    set unique_id = %(unique_id)s
                    #                where  email_account= %(email_account)s and uid = %(uid)s
                    #                """, {"unique_id": h,
                    #                      "email_account":email_account.name,
                    #                      "uid": uid})
			print email_account.name,count
		except Exception, e:
			print e
		finally: