title: lmtp seemingly unsupported by postfix
body: <p>I'm setting up my mail server and I followed that tutorial <a href="https://www.linode.com/docs/email/postfix/email-with-postfix-dovecot-and-mysql" rel="nofollow">https://www.linode.com/docs/email/postfix/email-with-postfix-dovecot-and-mysql</a> to help me doing so. Everything went fine during the setup and configuration but when it went to test problem started. From what I've tested I can log in just fine and the logs shows me that the connection has been accepted, but when I want to receive or to send a email I start to see errors like the following line : </p>
  
  <blockquote>
    <p>server postfix/smtpd[28557]: error: unsupported dictionary type: lmtp</p>
  </blockquote>
  
  <p>I searched a lot online but I can't seems to find any resources about that specific error. Running postconf -m doesn't show me "lmtp" but I'm not sure if it's normal or not.</p>
  
  <p>Would anyone have any suggestions? </p>
  
  <p>Here are my configuration files : </p>
  
  <p>main.cf</p>
  
  <pre><code># See /usr/share/postfix/main.cf.dist for a commented, more complete version
  
  
  # Debian specific:  Specifying a file name will cause the first
  # line of that file to be used as the name.  The Debian default
  # is /etc/mailname.
  #myorigin = /etc/mailname
  
  smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
  biff = no
  
  # appending .domain is the MUA's job.
  append_dot_mydomain = no
  
  # Uncomment the next line to generate "delayed mail" warnings
  #delay_warning_time = 4h
  
  readme_directory = no
  
  # TLS parameters
  #smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
  #smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
  #smtpd_use_tls=yes
  #smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
  #smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
  
  smtpd_tls_cert_file=/etc/dovecot/dovecot.pem
  smtpd_tls_key_file=/etc/dovecot/private/dovecot.pem
  smtpd_use_tls=yes
  smtpd_tls_auth_only = yes
  
  #Enabling SMTP for authenticated users, and handing off authentication to Dovecot
  smtpd_sasl_type = dovecot
  smtpd_sasl_path = private/auth
  smtpd_sasl_auth_enable = yes
  
  smtpd_recipient_restrictions =
          permit_sasl_authenticated,
          permit_mynetworks,
            reject_unauth_destination
  
    #Handing off local delivery to Dovecot's LMTP, and telling it where to store mail
    virtual_transport = lmtp:unix:private/dovecot-lmtp
  
    #Virtual domains, users, and aliases
    virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
    virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
    virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf
  
  # See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
  # information on enabling SSL in the smtp client.
  
  smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
  myhostname = server.brunodelor.info
  alias_maps = hash:/etc/aliases
  alias_database = hash:/etc/aliases
  myorigin = /etc/mailname
  mydestination = localhost
  relayhost = 
  #mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
  mynetworks = 127.0.0.0/8
  mailbox_size_limit = 0
  recipient_delimiter = +
  inet_interfaces = all
  </code></pre>
  
  <p>master.cf</p>
  
  <pre><code>#
  # Postfix master process configuration file.  For details on the format
  # of the file, see the master(5) manual page (command: "man 5 master" or
  # on-line: http://www.postfix.org/master.5.html).
  #
  # Do not forget to execute "postfix reload" after editing this file.
  #
  # ==========================================================================
  # service type  private unpriv  chroot  wakeup  maxproc command + args
  #               (yes)   (yes)   (yes)   (never) (100)
  # ==========================================================================
  smtp      inet  n       -       -       -       -       smtpd
  #smtp      inet  n       -       -       -       1       postscreen
  #smtpd     pass  -       -       -       -       -       smtpd
  #dnsblog   unix  -       -       -       -       0       dnsblog
  #tlsproxy  unix  -       -       -       -       0       tlsproxy
  submission inet n       -       -       -       -       smtpd
  #  -o syslog_name=postfix/submission
  #  -o smtpd_tls_security_level=encrypt
  #  -o smtpd_sasl_auth_enable=yes
  #  -o smtpd_reject_unlisted_recipient=no
  #  -o smtpd_client_restrictions=$mua_client_restrictions
  #  -o smtpd_helo_restrictions=$mua_helo_restrictions
  #  -o smtpd_sender_restrictions=$mua_sender_restrictions
  #  -o smtpd_recipient_restrictions=
  #  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
  #  -o milter_macro_daemon_name=ORIGINATING
  smtps     inet  n       -       -       -       -       smtpd
  #  -o syslog_name=postfix/smtps
  #  -o smtpd_tls_wrappermode=yes
  #  -o smtpd_sasl_auth_enable=yes
  #  -o smtpd_reject_unlisted_recipient=no
  #  -o smtpd_client_restrictions=$mua_client_restrictions
  #  -o smtpd_helo_restrictions=$mua_helo_restrictions
  #  -o smtpd_sender_restrictions=$mua_sender_restrictions
  #  -o smtpd_recipient_restrictions=
  #  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
  #  -o milter_macro_daemon_name=ORIGINATING
  #628       inet  n       -       -       -       -       qmqpd
  pickup    unix  n       -       -       60      1       pickup
  cleanup   unix  n       -       -       -       0       cleanup
  qmgr      unix  n       -       n       300     1       qmgr
  #qmgr     unix  n       -       n       300     1       oqmgr
  tlsmgr    unix  -       -       -       1000?   1       tlsmgr
  rewrite   unix  -       -       -       -       -       trivial-rewrite
  bounce    unix  -       -       -       -       0       bounce
  defer     unix  -       -       -       -       0       bounce
  trace     unix  -       -       -       -       0       bounce
  verify    unix  -       -       -       -       1       verify
  flush     unix  n       -       -       1000?   0       flush
  proxymap  unix  -       -       n       -       -       proxymap
  proxywrite unix -       -       n       -       1       proxymap
  smtp      unix  -       -       -       -       -       smtp
  relay     unix  -       -       -       -       -       smtp
  #       -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
  showq     unix  n       -       -       -       -       showq
  error     unix  -       -       -       -       -       error
  retry     unix  -       -       -       -       -       error
  discard   unix  -       -       -       -       -       discard
  local     unix  -       n       n       -       -       local
  virtual   unix  -       n       n       -       -       virtual
  lmtp      unix  -       -       n       -       -       lmtp
  anvil     unix  -       -       -       -       1       anvil
  scache    unix  -       -       -       -       1       scache
  #
  # ====================================================================
  # Interfaces to non-Postfix software. Be sure to examine the manual
  # pages of the non-Postfix software to find out what options it wants.
  #
  # Many of the following services use the Postfix pipe(8) delivery
  # agent.  See the pipe(8) man page for information about ${recipient}
  # and other message envelope options.
  # ====================================================================
  #
  # maildrop. See the Postfix MAILDROP_README file for details.
  # Also specify in main.cf: maildrop_destination_recipient_limit=1
  #
  maildrop  unix  -       n       n       -       -       pipe
    flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}
  #
  # ====================================================================
  #
  # Recent Cyrus versions can use the existing "lmtp" master.cf entry.
  #
  # Specify in cyrus.conf:
  #   lmtp    cmd="lmtpd -a" listen="localhost:lmtp" proto=tcp4
  #
  # Specify in main.cf one or more of the following:
  #  mailbox_transport = lmtp:inet:localhost
  #  virtual_transport = lmtp:inet:localhost
  #
  # ====================================================================
  #
  # Cyrus 2.1.5 (Amos Gouaux)
  # Also specify in main.cf: cyrus_destination_recipient_limit=1
  #
  #cyrus     unix  -       n       n       -       -       pipe
  #  user=cyrus argv=/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}
  #
  # ====================================================================
  # Old example of delivery via Cyrus.
  #
  #old-cyrus unix  -       n       n       -       -       pipe
  #  flags=R user=cyrus argv=/cyrus/bin/deliver -e -m ${extension} ${user}
  #
  # ====================================================================
  #
  # See the Postfix UUCP_README file for configuration details.
  #
  uucp      unix  -       n       n       -       -       pipe
    flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
  #
  # Other external delivery methods.
  #
  ifmail    unix  -       n       n       -       -       pipe
    flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
  bsmtp     unix  -       n       n       -       -       pipe
    flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipient
  scalemail-backend unix  -   n   n   -   2   pipe
    flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}
  mailman   unix  -       n       n       -       -       pipe
    flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py
    ${nexthop} ${user}
  </code></pre>
  
  <p>dovecot.conf</p>
  
  <pre><code>## Dovecot configuration file
  
  
  # Enable installed protocols
  !include_try /usr/share/dovecot/protocols.d/*.protocol
  protocols = imap lmtp
  
  
  
  ##
  ## Dictionary server settings
  ##
  
  
  dict {
    #quota = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext
    #expire = sqlite:/etc/dovecot/dovecot-dict-sql.conf.ext
  }
  
  # Most of the actual configuration gets included below. The filenames are
  # first sorted by their ASCII value and parsed in that order. The 00-prefixes
  # in filenames are intended to make it easier to understand the ordering.
  !include conf.d/*.conf
  
  # A config file can also tried to be included without giving an error if
  # it's not found:
  !include_try local.conf
  </code></pre>
  
  <p>10-master.conf</p>
  
  <pre><code>service imap-login {
    inet_listener imap {
      port = 0
    }
    inet_listener imaps {
      #port = 993
      #ssl = yes
    }
  </code></pre>
  
  <p>}</p>
  
  <pre><code>service pop3-login {
    inet_listener pop3 {
      port = 0
    }
    inet_listener pop3s {
      #port = 995
      #ssl = yes
    }
  }
  
  service lmtp {
    unix_listener /var/spool/postfix/private/dovecot-lmtp {
      mode = 0600
      user = postfix
      group = postfix
    }
  
    # Create inet listener only if you can't use the above UNIX socket
    #inet_listener lmtp {
      # Avoid making LMTP visible for the entire internet
      #address =
      #port = 
    #}
  }
  
  service imap {
    # Most of the memory goes to mmap()ing files. You may need to increase this
    # limit if you have huge mailboxes.
    #vsz_limit = $default_vsz_limit
  
    # Max. number of IMAP processes (connections)
    #process_limit = 1024
  }
  
  service pop3 {
    # Max. number of POP3 processes (connections)
    #process_limit = 1024
  }
  
  service auth {
    # permissions (e.g. 0777 allows everyone full permissions).
    unix_listener /var/spool/postfix/private/auth {
      mode = 0666
      user = postfix
      group = postfix
    }
  
    unix_listener auth-userdb {
      mode = 0600
      user = vmail 
      #group = vmail
    }
  
    # Postfix smtp-auth
    #unix_listener /var/spool/postfix/private/auth {
    #  mode = 0666
    #}
  
    # Auth process is run as this user.
    user = dovecot
  }
  
  service auth-worker {
    # Auth worker process is run as root by default, so that it can access
    # /etc/shadow. If this isn't necessary, the user should be changed to
    # $default_internal_user.
    user = vmail
  }
  
  service dict {
    # If dict proxy is used, mail processes should have access to its socket.
    # For example: mode=0660, group=vmail and global mail_access_groups=vmail
    unix_listener dict {
      #mode = 0600
      #user = 
      #group = 
    }
  }
  </code></pre>
  
  <p>10-mail.conf</p>
  
  <pre><code>##
  ## Mailbox locations and namespaces
  ##
  
  # Location for users' mailboxes. The default is empty, which means that Dovecot
  # tries to find the mailboxes automatically. This won't work if the user
  # doesn't yet have any mail, so you should explicitly tell Dovecot the full
  # location.
  #
  mail_location = maildir:/var/mail/vhosts/%d/%n
  
  # If you need to set multiple mailbox locations or want to change default
  # namespace settings, you can do it by defining namespace sections.
  #
  # You can have private, shared and public namespaces. Private namespaces
  # are for user's personal mails. Shared namespaces are for accessing other
  # users' mailboxes that have been shared. Public namespaces are for shared
  # mailboxes that are managed by sysadmin. If you create any shared or public
  # namespaces you'll typically want to enable ACL plugin also, otherwise all
  # users can access all the shared mailboxes, assuming they have permissions
  # on filesystem level to do so.
  namespace inbox {
    # Namespace type: private, shared or public
    #type = private
  
    # Hierarchy separator to use. You should use the same separator for all
    # namespaces or some clients get confused. '/' is usually a good one.
    # The default however depends on the underlying mail storage format.
    #separator = 
  
    # Prefix required to access this namespace. This needs to be different for
    # all namespaces. For example "Public/".
    #prefix = 
  
    # Physical location of the mailbox. This is in same format as
    # mail_location, which is also the default for it.
    #location =
  
    # There can be only one INBOX, and this setting defines which namespace
    # has it.
    inbox = yes
  
  }
  </code></pre>
  
  <p>Thanks for reading :)</p>