text: """
  homeassistant.components.notify.mail
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  
  Mail notification service.
  
  Configuration:
  
  To use the Mail notifier you will need to add something like the following
  to your config/configuration.yaml
  
  notify:
    platform: mail
    server: MAIL_SERVER
    port: YOUR_SMTP_PORT
    sender: SENDER_EMAIL_ADDRESS
    starttls: 1 or 0
    username: YOUR_SMTP_USERNAME
    password: YOUR_SMTP_PASSWORD
    recipient: YOUR_RECIPIENT
  
  Variables:
  
  server
  *Required
  SMTP server which is used to end the notifications. For Google Mail, eg.
  smtp.gmail.com. Keep in mind that Google has some extra layers of protection
  which need special attention (Hint: 'Less secure apps').
  
  port
  *Required
  The port that the SMTP server is using, eg. 587 for Google Mail and STARTTLS
  or 465/993 depending on your SMTP servers.
  
  sender
  *Required
  E-Mail address of the sender.
  
  starttls
  *Optional
  Enables STARTTLS, eg. 1 or 0.
  
  username
  *Required
  Username for the SMTP account.
  
  password
  *Required
  Password for the SMTP server that belongs to the given username. If the
  password contains a colon it need to be wrapped in apostrophes.
  
  recipient
  *Required
  Recipient of the notification.
  """
  import logging
  import smtplib
  from email.mime.text import MIMEText
  
  from homeassistant.helpers import validate_config
  from homeassistant.components.notify import (
      DOMAIN, ATTR_TITLE, BaseNotificationService)
  
  _LOGGER = logging.getLogger(__name__)
  
  
  def get_service(hass, config):
      """ Get the mail notification service. """
  
      if not validate_config(config,
                             {DOMAIN: ['server',
                                       'port',
                                       'sender',
                                       'username',
                                       'password',
                                       'recipient']},
                             _LOGGER):
          return None
  
      smtp_server = config[DOMAIN]['server']
      port = int(config[DOMAIN]['port'])
      username = config[DOMAIN]['username']
      password = config[DOMAIN]['password']
  
      server = None
      try:
          server = smtplib.SMTP(smtp_server, port)
          server.ehlo()
          if int(config[DOMAIN]['starttls']) == 1:
              server.starttls()
              server.ehlo()
  
          try:
              server.login(username, password)
  
          except (smtplib.SMTPException, smtplib.SMTPSenderRefused) as error:
              _LOGGER.exception(error,
                                "Please check your settings.")
  
              return None
  
      except smtplib.socket.gaierror:
          _LOGGER.exception(
              "SMTP server not found. "
              "Please check the IP address or hostname of your SMTP server.")
  
          return None
  
      except smtplib.SMTPAuthenticationError:
          _LOGGER.exception(
              "Login not possible. "
              "Please check your setting and/or your credentials.")
  
          return None
  
      if server:
          server.quit()
  
      return MailNotificationService(
          config[DOMAIN]['server'],
          config[DOMAIN]['port'],
          config[DOMAIN]['sender'],
          config[DOMAIN]['starttls'],
          config[DOMAIN]['username'],
          config[DOMAIN]['password'],
          config[DOMAIN]['recipient']
          )
  
  
  # pylint: disable=too-few-public-methods, too-many-instance-attributes
  class MailNotificationService(BaseNotificationService):
      """ Implements notification service for E-Mail messages. """
  
      # pylint: disable=too-many-arguments
      def __init__(self, server, port, sender, starttls, username,
                   password, recipient):
          self._server = server
          self._port = port
          self._sender = sender
          self.starttls = int(starttls)
          self.username = username
          self.password = password
          self.recipient = recipient
  
          self.mail = smtplib.SMTP(self._server, self._port)
          self.mail.ehlo_or_helo_if_needed()
          if self.starttls == 1:
              self.mail.starttls()
              self.mail.ehlo()
  
          self.mail.login(self.username, self.password)
  
      def send_message(self, message="", **kwargs):
          """ Send a message to a user. """
  
          subject = kwargs.get(ATTR_TITLE)
  
          msg = MIMEText(message)
          msg['Subject'] = subject
          msg['To'] = self.recipient
          msg['From'] = self._sender
          msg['X-Mailer'] = 'HomeAssistant'
  
          self.mail.sendmail(self._sender, self.recipient, msg.as_string())
  