diff --git a/core/modules/field/modules/email/email.info b/core/modules/field/modules/email/email.info
new file mode 100644
index 0000000..5c3d3ff
--- /dev/null
+++ b/core/modules/field/modules/email/email.info
@@ -0,0 +1,7 @@
+name = E-mail
+description = Defines a field type for e-mail addresses.
+package = Core
+version = VERSION
+core = 8.x
+dependencies[] = field
+dependencies[] = text
diff --git a/core/modules/field/modules/email/email.install b/core/modules/field/modules/email/email.install
new file mode 100644
index 0000000..9af9b9a
--- /dev/null
+++ b/core/modules/field/modules/email/email.install
@@ -0,0 +1,28 @@
+<?php
+
+/**
+ * @file
+ * Install, update and uninstall functions for the E-mail module.
+ */
+
+/**
+ * Implements hook_field_schema().
+ */
+function email_field_schema($field) {
+  $columns = array(
+    'value' => array(
+      'type' => 'varchar',
+      // The maximum length of an e-mail address is 254 characters. RFC 3696
+      // specifies a total length of 320 characters, but mentions that
+      // addresses longer than 256 characters are not normally useful. Erratum
+      // 1690 was then released which corrected this value to 254 characters.
+      // @see http://tools.ietf.org/html/rfc3696#section-3
+      // @see http://www.rfc-editor.org/errata_search.php?rfc=3696&eid=1690
+      'length' => 254,
+      'not null' => FALSE,
+    ),
+  );
+  return array(
+    'columns' => $columns,
+  );
+}
diff --git a/core/modules/field/modules/email/email.module b/core/modules/field/modules/email/email.module
new file mode 100644
index 0000000..22ad60a
--- /dev/null
+++ b/core/modules/field/modules/email/email.module
@@ -0,0 +1,85 @@
+<?php
+
+/**
+ * @file
+ * Defines a simple e-mail field type.
+ */
+
+/**
+ * Implements hook_field_info().
+ */
+function email_field_info() {
+  return array(
+    'email' => array(
+      'label' => t('E-mail'),
+      'description' => t('This field stores an e-mail address in the database.'),
+      'default_widget' => 'email_default',
+      'default_formatter' => 'text_plain',
+    ),
+  );
+}
+
+/**
+ * Implements hook_field_widget_info().
+ */
+function email_field_widget_info() {
+  return array(
+    'email_default' => array(
+      'label' => t('E-mail'),
+      'field types' => array('email'),
+    ),
+  );
+}
+
+/**
+ * Implements hook_field_widget_form().
+ */
+function email_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) {
+  $element['value'] = $element + array(
+    '#type' => 'email',
+    '#default_value' => isset($items[$delta]['value']) ? $items[$delta]['value'] : NULL,
+  );
+  return $element;
+
+}
+
+/**
+ * Implements hook_field_is_empty().
+ */
+function email_field_is_empty($item, $field) {
+  return !isset($item['value']) || $item['value'] === '';
+}
+
+/**
+ * Implements hook_field_formatter_info_alter().
+ */
+function email_field_formatter_info_alter(&$info) {
+  $info['text_plain']['field types'][] = 'email';
+}
+
+/**
+ * Implements hook_field_formatter_info().
+ */
+function email_field_formatter_info() {
+  return array(
+    'email_mailto' => array(
+      'label' => t('Mailto link'),
+      'field types' => array('email'),
+    ),
+  );
+}
+
+/**
+ * Implements hook_field_formatter_view().
+ */
+function email_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
+  $element = array();
+  foreach ($items as $delta => $item) {
+    $element[$delta] = array(
+      '#type' => 'link',
+      '#title' => $item['value'],
+      '#href' => 'mailto:' . $item['value'],
+    );
+  }
+  return $element;
+}
