[email] many fixes, newsletter, unsubscribe
diff --git a/erpnext/config/crm.py b/erpnext/config/crm.py
index 74909c4..48b8b2f 100644
--- a/erpnext/config/crm.py
+++ b/erpnext/config/crm.py
@@ -82,6 +82,11 @@
 				},
 				{
 					"type": "doctype",
+					"name": "Newsletter List",
+					"description": _("Newsletter Mailing List"),
+				},
+				{
+					"type": "doctype",
 					"name": "SMS Settings",
 					"description": _("Setup SMS gateway settings")
 				},
diff --git a/erpnext/crm/doctype/lead/lead.json b/erpnext/crm/doctype/lead/lead.json
index 2f6a293..2f5be34 100644
--- a/erpnext/crm/doctype/lead/lead.json
+++ b/erpnext/crm/doctype/lead/lead.json
@@ -54,6 +54,7 @@
    "label": "Email Id", 
    "oldfieldname": "email_id", 
    "oldfieldtype": "Data", 
+   "options": "Email", 
    "permlevel": 0, 
    "reqd": 0, 
    "search_index": 1
@@ -331,7 +332,7 @@
  ], 
  "icon": "icon-user", 
  "idx": 1, 
- "modified": "2015-02-20 05:07:57.739910", 
+ "modified": "2015-03-18 07:06:34.330943", 
  "modified_by": "Administrator", 
  "module": "CRM", 
  "name": "Lead", 
diff --git a/erpnext/crm/doctype/newsletter/__init__.py b/erpnext/crm/doctype/newsletter/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/erpnext/crm/doctype/newsletter/__init__.py
diff --git a/erpnext/support/doctype/newsletter/newsletter.js b/erpnext/crm/doctype/newsletter/newsletter.js
similarity index 95%
rename from erpnext/support/doctype/newsletter/newsletter.js
rename to erpnext/crm/doctype/newsletter/newsletter.js
index 07ef866..77eecac 100644
--- a/erpnext/support/doctype/newsletter/newsletter.js
+++ b/erpnext/crm/doctype/newsletter/newsletter.js
@@ -3,7 +3,7 @@
 
 cur_frm.cscript.onload = function(doc) {
 	return frappe.call({
-		method: "erpnext.support.doctype.newsletter.newsletter.get_lead_options",
+		method: "erpnext.crm.doctype.newsletter.newsletter.get_lead_options",
 		type: "GET",
 		callback: function(r) {
 			set_field_options("lead_source", r.message.sources.join("\n"))
diff --git a/erpnext/crm/doctype/newsletter/newsletter.json b/erpnext/crm/doctype/newsletter/newsletter.json
new file mode 100644
index 0000000..b17a386
--- /dev/null
+++ b/erpnext/crm/doctype/newsletter/newsletter.json
@@ -0,0 +1,104 @@
+{
+ "autoname": "field:subject", 
+ "creation": "2013-01-10 16:34:31", 
+ "description": "Create and Send Newsletters", 
+ "docstatus": 0, 
+ "doctype": "DocType", 
+ "document_type": "Other", 
+ "fields": [
+  {
+   "fieldname": "newsletter_list", 
+   "fieldtype": "Link", 
+   "label": "Newsletter List", 
+   "options": "Newsletter List", 
+   "permlevel": 0, 
+   "precision": "", 
+   "reqd": 1
+  }, 
+  {
+   "fieldname": "subject", 
+   "fieldtype": "Small Text", 
+   "in_list_view": 0, 
+   "label": "Subject", 
+   "permlevel": 0, 
+   "reqd": 1
+  }, 
+  {
+   "description": "", 
+   "fieldname": "send_from", 
+   "fieldtype": "Data", 
+   "label": "Sender", 
+   "no_copy": 1, 
+   "permlevel": 0, 
+   "reqd": 1
+  }, 
+  {
+   "fieldname": "email_sent", 
+   "fieldtype": "Check", 
+   "in_list_view": 0, 
+   "label": "Email Sent?", 
+   "no_copy": 1, 
+   "permlevel": 0, 
+   "read_only": 1
+  }, 
+  {
+   "fieldname": "newsletter_content", 
+   "fieldtype": "Section Break", 
+   "label": "", 
+   "permlevel": 0
+  }, 
+  {
+   "fieldname": "message", 
+   "fieldtype": "Text Editor", 
+   "label": "Message", 
+   "permlevel": 0, 
+   "reqd": 0
+  }, 
+  {
+   "description": "", 
+   "fieldname": "test_the_newsletter", 
+   "fieldtype": "Section Break", 
+   "label": "", 
+   "permlevel": 0
+  }, 
+  {
+   "description": "A Lead with this email id should exist", 
+   "fieldname": "test_email_id", 
+   "fieldtype": "Data", 
+   "label": "Test Email Id", 
+   "permlevel": 0
+  }, 
+  {
+   "fieldname": "test_send", 
+   "fieldtype": "Button", 
+   "label": "Test", 
+   "options": "test_send", 
+   "permlevel": 0
+  }
+ ], 
+ "icon": "icon-envelope", 
+ "idx": 1, 
+ "modified": "2015-03-18 08:19:24.393173", 
+ "modified_by": "Administrator", 
+ "module": "CRM", 
+ "name": "Newsletter", 
+ "owner": "Administrator", 
+ "permissions": [
+  {
+   "cancel": 0, 
+   "create": 1, 
+   "delete": 1, 
+   "email": 1, 
+   "export": 1, 
+   "permlevel": 0, 
+   "print": 1, 
+   "read": 1, 
+   "report": 1, 
+   "role": "Newsletter Manager", 
+   "share": 1, 
+   "submit": 0, 
+   "write": 1
+  }
+ ], 
+ "title_field": "subject"
+}
\ No newline at end of file
diff --git a/erpnext/support/doctype/newsletter/newsletter.py b/erpnext/crm/doctype/newsletter/newsletter.py
similarity index 62%
rename from erpnext/support/doctype/newsletter/newsletter.py
rename to erpnext/crm/doctype/newsletter/newsletter.py
index 556f202..66fd264 100644
--- a/erpnext/support/doctype/newsletter/newsletter.py
+++ b/erpnext/crm/doctype/newsletter/newsletter.py
@@ -5,7 +5,6 @@
 
 import frappe
 import frappe.utils
-from frappe.utils import cstr
 from frappe import throw, _
 from frappe.model.document import Document
 import erpnext.tasks
@@ -19,7 +18,6 @@
 
 	def test_send(self, doctype="Lead"):
 		self.recipients = self.test_email_id.split(",")
-		self.send_to_doctype = "Lead"
 		self.send_bulk()
 		frappe.msgprint(_("Scheduled to send to {0}").format(self.test_email_id))
 
@@ -44,46 +42,8 @@
 		frappe.db.set(self, "email_sent", 1)
 
 	def get_recipients(self):
-		self.email_field = None
-		if self.send_to_type=="Contact":
-			self.send_to_doctype = "Contact"
-			if self.contact_type == "Customer":
-				return frappe.db.sql_list("""select email_id from tabContact
-					where ifnull(email_id, '') != '' and ifnull(customer, '') != ''""")
-
-			elif self.contact_type == "Supplier":
-				return frappe.db.sql_list("""select email_id from tabContact
-					where ifnull(email_id, '') != '' and ifnull(supplier, '') != ''""")
-
-		elif self.send_to_type=="Lead":
-			self.send_to_doctype = "Lead"
-			conditions = []
-			if self.lead_source and self.lead_source != "All":
-				conditions.append(" and source='%s'" % self.lead_source.replace("'", "\'"))
-			if self.lead_status and self.lead_status != "All":
-				conditions.append(" and status='%s'" % self.lead_status.replace("'", "\'"))
-
-			if conditions:
-				conditions = "".join(conditions)
-
-			return frappe.db.sql_list("""select email_id from tabLead
-				where ifnull(email_id, '') != '' %s""" % (conditions or ""))
-
-		elif self.send_to_type=="Employee":
-			self.send_to_doctype = "Employee"
-			self.email_field = "company_email"
-
-			return frappe.db.sql_list("""select
-				if(ifnull(company_email, '')!='', company_email, personal_email) as email_id
-				from `tabEmployee` where status='Active'""")
-
-		elif self.email_list:
-			email_list = [cstr(email).strip() for email in self.email_list.split(",")]
-			for email in email_list:
-				create_lead(email)
-
-			self.send_to_doctype = "Lead"
-			return email_list
+		"""Get recipients from Newsletter List"""
+		return frappe.db.get_all("Newsletter List Subscriber", ["email"], {"unsubscribed": 0})
 
 	def send_bulk(self):
 		if not self.get("recipients"):
@@ -101,8 +61,8 @@
 
 		send(recipients = self.recipients, sender = sender,
 			subject = self.subject, message = self.message,
-			doctype = self.send_to_doctype, email_field = self.get("email_field") or "email_id",
-			ref_doctype = self.doctype, ref_docname = self.name)
+			ref_doctype = self.doctype, ref_docname = self.name,
+			unsubscribe_url = "/api/method/erpnext.crm.doctype.newsletter.newsletter.unsubscribe?name=%s&email={email}" % self.name)
 
 		if not frappe.flags.in_test:
 			frappe.db.auto_commit_on_many_writes = False
@@ -121,6 +81,18 @@
 	}
 
 
+@frappe.whitelist(allow_guest=True)
+def unsubscribe(email, name):
+	from frappe.email.bulk import return_unsubscribed_page
+
+	name = frappe.db.get_value("Newsletter List Subscriber", {"email": email, "newsletter_list": name})
+	if name:
+		subscriber = frappe.get_doc("Newsletter List Subscriber", name)
+		subscriber.unsubscribe = 1
+		subscriber.save(ignore_permissions=True)
+
+	return_unsubscribed_page(email)
+
 def create_lead(email_id):
 	"""create a lead if it does not exist"""
 	from email.utils import parseaddr
diff --git a/erpnext/support/doctype/newsletter/newsletter_list.js b/erpnext/crm/doctype/newsletter/newsletter_list.js
similarity index 100%
rename from erpnext/support/doctype/newsletter/newsletter_list.js
rename to erpnext/crm/doctype/newsletter/newsletter_list.js
diff --git a/erpnext/support/doctype/newsletter/test_newsletter.py b/erpnext/crm/doctype/newsletter/test_newsletter.py
similarity index 100%
rename from erpnext/support/doctype/newsletter/test_newsletter.py
rename to erpnext/crm/doctype/newsletter/test_newsletter.py
diff --git a/erpnext/support/doctype/newsletter/test_records.json b/erpnext/crm/doctype/newsletter/test_records.json
similarity index 100%
rename from erpnext/support/doctype/newsletter/test_records.json
rename to erpnext/crm/doctype/newsletter/test_records.json
diff --git a/erpnext/crm/doctype/newsletter_list/__init__.py b/erpnext/crm/doctype/newsletter_list/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/erpnext/crm/doctype/newsletter_list/__init__.py
diff --git a/erpnext/crm/doctype/newsletter_list/newsletter_list.js b/erpnext/crm/doctype/newsletter_list/newsletter_list.js
new file mode 100644
index 0000000..8843769
--- /dev/null
+++ b/erpnext/crm/doctype/newsletter_list/newsletter_list.js
@@ -0,0 +1,30 @@
+frappe.ui.form.on("Newsletter List", "refresh", function(frm) {
+	if(!frm.is_new()) {
+		frm.add_custom_button(__("View Subscribers"), function() {
+			frappe.route_options = {"newsletter_list": frm.doc.name};
+			frappe.set_route("Report", "Newsletter List Subscriber");
+		});
+
+		frm.add_custom_button(__("Import Subscribers"), function() {
+			frappe.prompt({fieldtype:"Select", options: frm.doc.__onload.import_types,
+				label:__("Import Email From"), fieldname:"doctype", reqd:1}, function(data) {
+					frappe.call({
+						method: "erpnext.crm.doctype.newsletter_list.newsletter_list.import_from",
+						args: {
+							"name": frm.doc.name,
+							"doctype": data.doctype
+						},
+						callback: function(r) {
+							frm.set_value("total_subscribers", r.message);
+						}
+					})
+				}, __("Import Subscribers"), __("Import"));
+		});
+
+		frm.add_custom_button(__("New Newsletter"), function() {
+			frappe.route_options = {"newsletter_list": frm.doc.name};
+			new_doc("Newsletter");
+		});
+
+	}
+});
diff --git a/erpnext/crm/doctype/newsletter_list/newsletter_list.json b/erpnext/crm/doctype/newsletter_list/newsletter_list.json
new file mode 100644
index 0000000..3fa7f65
--- /dev/null
+++ b/erpnext/crm/doctype/newsletter_list/newsletter_list.json
@@ -0,0 +1,79 @@
+{
+ "allow_copy": 0, 
+ "allow_import": 1, 
+ "allow_rename": 0, 
+ "autoname": "field:title", 
+ "creation": "2015-03-18 06:08:32.729800", 
+ "custom": 0, 
+ "docstatus": 0, 
+ "doctype": "DocType", 
+ "document_type": "Master", 
+ "fields": [
+  {
+   "allow_on_submit": 0, 
+   "fieldname": "title", 
+   "fieldtype": "Data", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Title", 
+   "no_copy": 0, 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "read_only": 0, 
+   "report_hide": 0, 
+   "reqd": 1, 
+   "search_index": 0, 
+   "set_only_once": 0
+  }, 
+  {
+   "default": "0", 
+   "fieldname": "total_subscribers", 
+   "fieldtype": "Int", 
+   "label": "Total Subscribers", 
+   "permlevel": 0, 
+   "precision": "", 
+   "read_only": 1
+  }
+ ], 
+ "hide_heading": 0, 
+ "hide_toolbar": 0, 
+ "in_create": 0, 
+ "in_dialog": 0, 
+ "is_submittable": 0, 
+ "issingle": 0, 
+ "istable": 0, 
+ "modified": "2015-03-18 08:08:37.692367", 
+ "modified_by": "Administrator", 
+ "module": "CRM", 
+ "name": "Newsletter List", 
+ "name_case": "", 
+ "owner": "Administrator", 
+ "permissions": [
+  {
+   "amend": 0, 
+   "apply_user_permissions": 0, 
+   "cancel": 0, 
+   "create": 1, 
+   "delete": 1, 
+   "email": 1, 
+   "export": 1, 
+   "import": 1, 
+   "permlevel": 0, 
+   "print": 1, 
+   "read": 1, 
+   "report": 1, 
+   "role": "Newsletter Manager", 
+   "set_user_permissions": 0, 
+   "share": 1, 
+   "submit": 0, 
+   "write": 1
+  }
+ ], 
+ "read_only": 0, 
+ "read_only_onload": 0, 
+ "sort_field": "modified", 
+ "sort_order": "DESC"
+}
\ No newline at end of file
diff --git a/erpnext/crm/doctype/newsletter_list/newsletter_list.py b/erpnext/crm/doctype/newsletter_list/newsletter_list.py
new file mode 100644
index 0000000..583798d
--- /dev/null
+++ b/erpnext/crm/doctype/newsletter_list/newsletter_list.py
@@ -0,0 +1,52 @@
+# -*- coding: utf-8 -*-
+# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and contributors
+# For license information, please see license.txt
+
+from __future__ import unicode_literals
+import frappe
+from frappe.model.document import Document
+
+class NewsletterList(Document):
+	def onload(self):
+		singles = [d.name for d in frappe.db.get_all("DocType", "name", {"issingle": 1})]
+		self.get("__onload").import_types = [d.parent \
+			for d in frappe.db.get_all("DocField", "parent", {"options": "Email"}) if d.parent not in singles]
+
+	def import_from(self, doctype):
+		"""Extract email ids from given doctype and add them to the current list"""
+		meta = frappe.get_meta(doctype)
+		email_field = [d.fieldname for d in meta.fields if d.fieldtype in ("Data", "Small Text") and d.options=="Email"][0]
+		unsubscribed_field = "unsubscribed" if meta.get_field("unsubscribed") else None
+		added = 0
+
+		for user in frappe.db.get_all(doctype, [email_field, unsubscribed_field or "name"]):
+			try:
+				if user.get(email_field):
+					frappe.get_doc({
+						"doctype": "Newsletter List Subscriber",
+						"newsletter_list": self.name,
+						"email": user.get(email_field),
+						"unsubscribed": user.get(unsubscribed_field) if unsubscribed_field else 0
+					}).insert(ignore_permissions=True)
+
+					added += 1
+			except Exception, e:
+				# already added, ignore
+				if e.args[0]!=1062:
+					raise
+
+		frappe.msgprint(frappe._("{0} subscribers added").format(added))
+
+		return self.update_total_subscribers()
+
+	def update_total_subscribers(self):
+		self.total_subscribers = frappe.db.sql("""select count(*) from `tabNewsletter List Subscriber`
+			where newsletter_list=%s""", self.name)[0][0]
+		self.db_update()
+		return self.total_subscribers
+
+@frappe.whitelist()
+def import_from(name, doctype):
+	nlist = frappe.get_doc("Newsletter List", name)
+	if nlist.has_permission("write"):
+		return nlist.import_from(doctype)
diff --git a/erpnext/crm/doctype/newsletter_list/test_newsletter_list.py b/erpnext/crm/doctype/newsletter_list/test_newsletter_list.py
new file mode 100644
index 0000000..686c571
--- /dev/null
+++ b/erpnext/crm/doctype/newsletter_list/test_newsletter_list.py
@@ -0,0 +1,12 @@
+# -*- coding: utf-8 -*-
+# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and Contributors
+# See license.txt
+from __future__ import unicode_literals
+
+import frappe
+import unittest
+
+# test_records = frappe.get_test_records('Newletter List')
+
+class TestNewletterList(unittest.TestCase):
+	pass
diff --git a/erpnext/crm/doctype/newsletter_list_subscriber/__init__.py b/erpnext/crm/doctype/newsletter_list_subscriber/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/erpnext/crm/doctype/newsletter_list_subscriber/__init__.py
diff --git a/erpnext/crm/doctype/newsletter_list_subscriber/newsletter_list_subscriber.json b/erpnext/crm/doctype/newsletter_list_subscriber/newsletter_list_subscriber.json
new file mode 100644
index 0000000..51bdcb0
--- /dev/null
+++ b/erpnext/crm/doctype/newsletter_list_subscriber/newsletter_list_subscriber.json
@@ -0,0 +1,109 @@
+{
+ "allow_copy": 0, 
+ "allow_import": 1, 
+ "allow_rename": 0, 
+ "autoname": "hash", 
+ "creation": "2015-03-18 06:15:59.321619", 
+ "custom": 0, 
+ "docstatus": 0, 
+ "doctype": "DocType", 
+ "document_type": "Transaction", 
+ "fields": [
+  {
+   "allow_on_submit": 0, 
+   "fieldname": "newsletter_list", 
+   "fieldtype": "Link", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "in_filter": 0, 
+   "in_list_view": 1, 
+   "label": "Newsletter List", 
+   "no_copy": 0, 
+   "options": "Newsletter List", 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "read_only": 0, 
+   "report_hide": 0, 
+   "reqd": 1, 
+   "search_index": 0, 
+   "set_only_once": 0
+  }, 
+  {
+   "allow_on_submit": 0, 
+   "fieldname": "email", 
+   "fieldtype": "Data", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "in_filter": 0, 
+   "in_list_view": 1, 
+   "label": "Email", 
+   "no_copy": 0, 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "read_only": 0, 
+   "report_hide": 0, 
+   "reqd": 1, 
+   "search_index": 0, 
+   "set_only_once": 0
+  }, 
+  {
+   "allow_on_submit": 0, 
+   "fieldname": "unsubscribed", 
+   "fieldtype": "Check", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "in_filter": 0, 
+   "in_list_view": 1, 
+   "label": "Unsubscribed", 
+   "no_copy": 0, 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "read_only": 0, 
+   "report_hide": 0, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0
+  }
+ ], 
+ "hide_heading": 0, 
+ "hide_toolbar": 0, 
+ "in_create": 0, 
+ "in_dialog": 0, 
+ "is_submittable": 0, 
+ "issingle": 0, 
+ "istable": 0, 
+ "modified": "2015-03-18 08:07:24.748431", 
+ "modified_by": "Administrator", 
+ "module": "CRM", 
+ "name": "Newsletter List Subscriber", 
+ "name_case": "", 
+ "owner": "Administrator", 
+ "permissions": [
+  {
+   "amend": 0, 
+   "apply_user_permissions": 0, 
+   "cancel": 0, 
+   "create": 1, 
+   "delete": 1, 
+   "email": 1, 
+   "export": 1, 
+   "import": 1, 
+   "permlevel": 0, 
+   "print": 1, 
+   "read": 1, 
+   "report": 1, 
+   "role": "Newsletter Manager", 
+   "set_user_permissions": 0, 
+   "share": 1, 
+   "submit": 0, 
+   "write": 1
+  }
+ ], 
+ "read_only": 0, 
+ "read_only_onload": 0, 
+ "sort_field": "modified", 
+ "sort_order": "DESC"
+}
\ No newline at end of file
diff --git a/erpnext/crm/doctype/newsletter_list_subscriber/newsletter_list_subscriber.py b/erpnext/crm/doctype/newsletter_list_subscriber/newsletter_list_subscriber.py
new file mode 100644
index 0000000..1539553
--- /dev/null
+++ b/erpnext/crm/doctype/newsletter_list_subscriber/newsletter_list_subscriber.py
@@ -0,0 +1,13 @@
+# -*- coding: utf-8 -*-
+# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and contributors
+# For license information, please see license.txt
+
+from __future__ import unicode_literals
+import frappe
+from frappe.model.document import Document
+
+class NewsletterListSubscriber(Document):
+	pass
+
+def after_doctype_insert():
+	frappe.db.add_unique("Newsletter List Subscriber", ("name", "email"))
diff --git a/erpnext/crm/doctype/newsletter_list_subscriber/test_newsletter_list_subscriber.py b/erpnext/crm/doctype/newsletter_list_subscriber/test_newsletter_list_subscriber.py
new file mode 100644
index 0000000..24a0788
--- /dev/null
+++ b/erpnext/crm/doctype/newsletter_list_subscriber/test_newsletter_list_subscriber.py
@@ -0,0 +1,12 @@
+# -*- coding: utf-8 -*-
+# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and Contributors
+# See license.txt
+from __future__ import unicode_literals
+
+import frappe
+import unittest
+
+# test_records = frappe.get_test_records('Newsletter List Subscriber')
+
+class TestNewsletterListSubscriber(unittest.TestCase):
+	pass
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index 1b78b10..8c4b7ab 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -133,3 +133,4 @@
 erpnext.patches.v5_0.update_time_log_title
 erpnext.patches.v4_2.repost_reserved_qty
 erpnext.patches.v4_2.repost_sle_for_si_with_no_warehouse
+erpnext.patches.v5_0.newsletter
diff --git a/erpnext/patches/v5_0/newsletter.py b/erpnext/patches/v5_0/newsletter.py
new file mode 100644
index 0000000..a1c480f
--- /dev/null
+++ b/erpnext/patches/v5_0/newsletter.py
@@ -0,0 +1,30 @@
+# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
+# License: GNU General Public License v3. See license.txt
+
+import frappe
+import frappe.permisssions
+
+def execute():
+	frappe.reload_doctype("User")
+	frappe.reload_doctype("Lead")
+	frappe.reload_doctype("Contact")
+
+	frappe.reload_doc('crm', 'doctype', 'newsletter_list')
+	frappe.reload_doc('crm', 'doctype', 'newsletter_list_subscriber')
+	frappe.reload_doc('crm', 'doctype', 'newsletter')
+
+	frappe.permisssions.reset_perms("Newsletter")
+
+	if not frappe.db.exists("Role", "Newsletter Manager"):
+		frappe.get_doc({"doctype": "Role", "role": "Newsletter Manager"}).insert()
+
+	for userrole in frappe.get_all("UserRole", "parent", {"role": "Sales Manager"}):
+		user = frappe.get_doc("User", userrole.parent)
+		user.add_roles("Newsletter Manager")
+
+	# create default lists
+	general = frappe.new_doc("Newsletter List")
+	general.title = "General"
+	general.insert()
+	general.import_from("Lead")
+	general.import_from("Contact")
diff --git a/erpnext/support/doctype/newsletter/README.md b/erpnext/support/doctype/newsletter/README.md
deleted file mode 100644
index a1a0cf4..0000000
--- a/erpnext/support/doctype/newsletter/README.md
+++ /dev/null
@@ -1 +0,0 @@
-Newsletter to be sent to Leads / Contacts.
\ No newline at end of file
diff --git a/erpnext/support/doctype/newsletter/__init__.py b/erpnext/support/doctype/newsletter/__init__.py
deleted file mode 100644
index baffc48..0000000
--- a/erpnext/support/doctype/newsletter/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/erpnext/support/doctype/newsletter/newsletter.json b/erpnext/support/doctype/newsletter/newsletter.json
deleted file mode 100644
index 007f20f..0000000
--- a/erpnext/support/doctype/newsletter/newsletter.json
+++ /dev/null
@@ -1,169 +0,0 @@
-{
- "autoname": "naming_series:", 
- "creation": "2013-01-10 16:34:31", 
- "description": "Create and Send Newsletters", 
- "docstatus": 0, 
- "doctype": "DocType", 
- "document_type": "Other", 
- "fields": [
-  {
-   "description": "Select who you want to send this newsletter to", 
-   "fieldname": "send_to", 
-   "fieldtype": "Section Break", 
-   "label": "Send To", 
-   "permlevel": 0
-  }, 
-  {
-   "default": "NL-", 
-   "fieldname": "naming_series", 
-   "fieldtype": "Select", 
-   "label": "Series", 
-   "options": "NL-", 
-   "permlevel": 0, 
-   "reqd": 1
-  }, 
-  {
-   "fieldname": "send_to_type", 
-   "fieldtype": "Select", 
-   "label": "Send To Type", 
-   "options": "Lead\nContact\nEmployee\nCustom", 
-   "permlevel": 0
-  }, 
-  {
-   "fieldname": "column_break1", 
-   "fieldtype": "Column Break", 
-   "permlevel": 0
-  }, 
-  {
-   "depends_on": "eval:doc.send_to_type==\"Lead\"", 
-   "fieldname": "lead_source", 
-   "fieldtype": "Select", 
-   "label": "Lead Source", 
-   "permlevel": 0
-  }, 
-  {
-   "depends_on": "eval:doc.send_to_type==\"Lead\"", 
-   "fieldname": "lead_status", 
-   "fieldtype": "Select", 
-   "label": "Lead Status", 
-   "permlevel": 0
-  }, 
-  {
-   "depends_on": "eval:doc.send_to_type==\"Contact\"", 
-   "fieldname": "contact_type", 
-   "fieldtype": "Select", 
-   "label": "Contact Type", 
-   "options": "Customer\nSupplier", 
-   "permlevel": 0
-  }, 
-  {
-   "depends_on": "eval:doc.send_to_type==\"Custom\"", 
-   "description": "Comma separated list of email addresses", 
-   "fieldname": "email_list", 
-   "fieldtype": "Text", 
-   "label": "Send to this list", 
-   "permlevel": 0
-  }, 
-  {
-   "fieldname": "newsletter_content", 
-   "fieldtype": "Section Break", 
-   "label": "Newsletter Content", 
-   "permlevel": 0
-  }, 
-  {
-   "description": "If specified, send the newsletter using this email address", 
-   "fieldname": "send_from", 
-   "fieldtype": "Data", 
-   "label": "Send From", 
-   "no_copy": 1, 
-   "permlevel": 0
-  }, 
-  {
-   "fieldname": "subject", 
-   "fieldtype": "Small Text", 
-   "in_list_view": 0, 
-   "label": "Subject", 
-   "permlevel": 0, 
-   "reqd": 1
-  }, 
-  {
-   "fieldname": "message", 
-   "fieldtype": "Text Editor", 
-   "label": "Message", 
-   "permlevel": 0, 
-   "reqd": 0
-  }, 
-  {
-   "description": "Check how the newsletter looks in an email by sending it to your email.", 
-   "fieldname": "test_the_newsletter", 
-   "fieldtype": "Section Break", 
-   "label": "Test the Newsletter", 
-   "permlevel": 0
-  }, 
-  {
-   "description": "A Lead with this email id should exist", 
-   "fieldname": "test_email_id", 
-   "fieldtype": "Data", 
-   "label": "Test Email Id", 
-   "permlevel": 0
-  }, 
-  {
-   "fieldname": "test_send", 
-   "fieldtype": "Button", 
-   "label": "Test", 
-   "options": "test_send", 
-   "permlevel": 0
-  }, 
-  {
-   "fieldname": "newsletter_status", 
-   "fieldtype": "Section Break", 
-   "label": "Newsletter Status", 
-   "permlevel": 0
-  }, 
-  {
-   "fieldname": "email_sent", 
-   "fieldtype": "Check", 
-   "in_list_view": 0, 
-   "label": "Email Sent?", 
-   "no_copy": 1, 
-   "permlevel": 0, 
-   "read_only": 1
-  }
- ], 
- "icon": "icon-envelope", 
- "idx": 1, 
- "modified": "2015-01-08 10:45:54.106948", 
- "modified_by": "Administrator", 
- "module": "Support", 
- "name": "Newsletter", 
- "owner": "Administrator", 
- "permissions": [
-  {
-   "cancel": 0, 
-   "create": 1, 
-   "delete": 1, 
-   "email": 0, 
-   "permlevel": 0, 
-   "print": 0, 
-   "read": 1, 
-   "report": 0, 
-   "role": "Sales Manager", 
-   "submit": 0, 
-   "write": 1
-  }, 
-  {
-   "cancel": 0, 
-   "create": 1, 
-   "delete": 1, 
-   "email": 0, 
-   "permlevel": 0, 
-   "print": 0, 
-   "read": 1, 
-   "report": 0, 
-   "role": "Support Manager", 
-   "submit": 0, 
-   "write": 1
-  }
- ], 
- "title_field": "subject"
-}
\ No newline at end of file
diff --git a/erpnext/utilities/doctype/contact/contact.json b/erpnext/utilities/doctype/contact/contact.json
index 186432e..c71ed60 100644
--- a/erpnext/utilities/doctype/contact/contact.json
+++ b/erpnext/utilities/doctype/contact/contact.json
@@ -53,6 +53,7 @@
    "label": "Email Id", 
    "oldfieldname": "email_id", 
    "oldfieldtype": "Data", 
+   "options": "Email", 
    "permlevel": 0, 
    "reqd": 0, 
    "search_index": 1
@@ -176,7 +177,7 @@
  "idx": 1, 
  "in_create": 0, 
  "in_dialog": 0, 
- "modified": "2015-02-20 05:07:55.636970", 
+ "modified": "2015-03-18 07:06:43.906702", 
  "modified_by": "Administrator", 
  "module": "Utilities", 
  "name": "Contact",