[email] changes in email_account api
diff --git a/erpnext/crm/doctype/lead/lead.py b/erpnext/crm/doctype/lead/lead.py
index 0fb8d48..b523416 100644
--- a/erpnext/crm/doctype/lead/lead.py
+++ b/erpnext/crm/doctype/lead/lead.py
@@ -11,14 +11,12 @@
 from erpnext.controllers.selling_controller import SellingController
 from erpnext.utilities.address_and_contact import load_address_and_contact
 
+sender_field = "email_id"
+
 class Lead(SellingController):
 	def get_feed(self):
 		return '{0}: {1}'.format(_(self.status), self.lead_name)
 
-	def set_sender(self, sender):
-		"""Will be called by **Communication** when a Lead is created from an incoming email."""
-		self.email_id = sender
-
 	def onload(self):
 		customer = frappe.db.get_value("Customer", {"lead_name": self.name})
 		self.get("__onload").is_customer = customer
diff --git a/erpnext/crm/doctype/opportunity/opportunity.py b/erpnext/crm/doctype/opportunity/opportunity.py
index e185254..08d413f 100644
--- a/erpnext/crm/doctype/opportunity/opportunity.py
+++ b/erpnext/crm/doctype/opportunity/opportunity.py
@@ -9,25 +9,10 @@
 
 from erpnext.utilities.transaction_base import TransactionBase
 
+subject_field = "title"
+sender_field = "contact_email"
+
 class Opportunity(TransactionBase):
-	def set_sender(self, email_id):
-		"""Set lead against new opportunity"""
-		lead_name = frappe.db.get_value("Lead", {"email_id": email_id})
-		if not lead_name:
-			lead = frappe.get_doc({
-				"doctype": "Lead",
-				"email_id": email_id,
-				"lead_name": email_id
-			})
-			lead.insert(ignore_permissions=True)
-			lead_name = lead.name
-
-		self.enquiry_from = "Lead"
-		self.lead = lead_name
-
-	def set_subject(self, subject):
-		self.title = subject
-
 	def after_insert(self):
 		if self.lead:
 			frappe.get_doc("Lead", self.lead).set_status(update=True)
@@ -40,6 +25,8 @@
 				(not cint(self.get("__islocal"))) else None,
 		})
 
+		self.make_new_lead_if_required()
+
 		if not self.enquiry_from:
 			frappe.throw(_("Opportunity From field is mandatory"))
 
@@ -55,6 +42,22 @@
 		from erpnext.accounts.utils import validate_fiscal_year
 		validate_fiscal_year(self.transaction_date, self.fiscal_year, _("Opportunity Date"), self)
 
+	def make_new_lead_if_required(self):
+		"""Set lead against new opportunity"""
+		if not self.lead or self.customer:
+			lead_name = frappe.db.get_value("Lead", {"email_id": self.contact_email})
+			if not lead_name:
+				lead = frappe.get_doc({
+					"doctype": "Lead",
+					"email_id": self.contact_email,
+					"lead_name": self.contact_email
+				})
+				lead.insert(ignore_permissions=True)
+				lead_name = lead.name
+
+			self.enquiry_from = "Lead"
+			self.lead = lead_name
+
 	def declare_enquiry_lost(self,arg):
 		if not self.has_quotation():
 			frappe.db.set(self, 'status', 'Lost')
diff --git a/erpnext/hr/doctype/job_applicant/job_applicant.py b/erpnext/hr/doctype/job_applicant/job_applicant.py
index 5fb1160..b0482cd 100644
--- a/erpnext/hr/doctype/job_applicant/job_applicant.py
+++ b/erpnext/hr/doctype/job_applicant/job_applicant.py
@@ -9,12 +9,14 @@
 from frappe import _
 from frappe.utils import comma_and
 
+sender_field = "email_id"
+
 class JobApplicant(Document):
 	def onload(self):
 		offer_letter = frappe.get_all("Offer Letter", filters={"job_applicant": self.name})
 		if offer_letter:
 			self.get("__onload").offer_letter = offer_letter[0].name
-	
+
 	def autoname(self):
 		keys = filter(None, (self.applicant_name, self.email_id))
 		if not keys:
@@ -31,6 +33,3 @@
 
 			if names:
 				frappe.throw(_("Email id must be unique, already exists for {0}").format(comma_and(names)), frappe.DuplicateEntryError)
-
-	def set_sender(self, sender):
-		self.email_id = sender
diff --git a/erpnext/support/doctype/issue/issue.py b/erpnext/support/doctype/issue/issue.py
index be23ff7..0ab03cb 100644
--- a/erpnext/support/doctype/issue/issue.py
+++ b/erpnext/support/doctype/issue/issue.py
@@ -10,14 +10,12 @@
 from frappe.utils import now
 from frappe.utils.user import is_website_user
 
+sender_field = "raised_by"
+
 class Issue(Document):
 	def get_feed(self):
 		return "{0}: {1}".format(_(self.status), self.subject)
 
-	def set_sender(self, sender):
-		"""Will be called by **Communication** when the Issue is created from an incoming email."""
-		self.raised_by = sender
-
 	def validate(self):
 		self.update_status()
 		self.set_lead_contact(self.raised_by)