Changes

Jump to navigation Jump to search
m
Line 31: Line 31:  
==Setup==
 
==Setup==
 
====DNS====
 
====DNS====
You should know about this already: you need an “MX” record on your DNS server, and it needs to point to your main server where you’ll run your email, web, etc.
+
{| class="wikitable"
 +
|+DNS Registries required by Mail Server
 +
!Type
 +
!Host
 +
!Points to
 +
!TTL
 +
|-
 +
|A
 +
|@
 +
|54.154.227.190
 +
|1h
 +
|-
 +
|CNAME
 +
|webmail
 +
|@
 +
|1h
 +
|-
 +
|MX
 +
|@
 +
|webmail.herrerosolis.com
 +
|1h
 +
|}
 +
You need an “MX” record on your DNS server, and it needs to point to your main server where you’ll run your email, web, etc.
   −
@Goddady:
  −
Removed:
     −
A <br />
+
'''Remove''' MX registries from godaddy email forwarder:<br />MX: <br />Host: @; Apunta a:smtp.secureserver.net; Prioridad:30; TTL:1h<br />Host: @; Apunta a:mailstore1.secureserver.net; Prioridad:50; TTL:1h
Host: @; Apunta a: $ELASTIC_IP; TTL:1h
  −
 
  −
CNAME<br />
  −
Host: webmail; Apunta a: @; TTL:1h
  −
 
  −
MX<br />
  −
host: @; Apunta a: webmail.herrerosolis.com; Prioridad: 10; TTL: 1h<br />
  −
 
  −
TODO: Remove MX registries from godaddy email forwarder:<br />
  −
MX: <br />
  −
 
  −
Host: @; Apunta a:smtp.secureserver.net; Prioridad:30; TTL:1h<br />
  −
Host: @; Apunta a:mailstore1.secureserver.net; Prioridad:50; TTL:1h
      
====SPF====
 
====SPF====
TXT
+
{| class="wikitable"
 
+
|+DNS SPF Registry
Host: @; Valor TXT: v=spf1 mx ip4:54.154.227.190 ~all
+
!Type
 +
!Host
 +
!TXT Value
 +
|-
 +
|TXT
 +
|@
 +
|v=spf1 mx ip4:54.154.227.190 ~all
 +
|}
    
====DMARC====
 
====DMARC====
TXT
+
{| class="wikitable"
 
+
|+DNS DMARC Registry
Host: _dmarc
+
!Type
 
+
!Host
Valor TXT: v=DMARC1; p=none  Verification details:      mail-tester.com; dmarc=none header.from=herrerosolis.com     From Domain: herrerosolis.com     DKIM Domain:MIIBIjANBg[...]qCwPwIDAQAB
+
!TXT Value
 +
|-
 +
|TXT
 +
|_dmarc
 +
|v=DMARC1; p=none  Verification details:      mail-tester.com; dmarc=none header.from=herrerosolis.com     From Domain: herrerosolis.com     DKIM Domain:MIIBIjANBg[...]qCwPwIDAQAB
 +
|}
 +
<br />
    
====DKIM====
 
====DKIM====
TXT
+
{| class="wikitable"
 +
|+DNS DKIM Registry
 +
!Type
 +
!Host
 +
!TXT Value
 +
|-
 +
|TXT
 +
|webmail._domainkey
 +
|v=DKIM1; k=rsa; p=MIIBIjAN[...]IDAQAB
 +
|}
   −
Host: webmail._domainkey
+
* Note: DKIM Host must be {selector}._domainkey where {selector} = DKIM_SELECTOR variable from /etc/exim4/conf.d/main/000_localmacros
 
  −
Valor TXT: v=DKIM1; k=rsa; p=MIIBIjAN[...]IDAQAB
      
===Apache===
 
===Apache===
 
/etc/apache2/sites-available/webmail.conf
 
/etc/apache2/sites-available/webmail.conf
 
  <nowiki><VirtualHost *:80>
 
  <nowiki><VirtualHost *:80>
          ServerAdmin rafael@herrerosolis.com
+
            ServerAdmin rafael@herrerosolis.com
          Redirect permanent / https://webmail.herrerosolis.com/
+
            Redirect permanent / https://webmail.herrerosolis.com/
      #    DocumentRoot /var/www/rafael
+
        #    DocumentRoot /var/www/rafael
          ServerName webmail.herrerosolis.com
+
            ServerName webmail.herrerosolis.com
          ServerAlias webmail.herrerosolis.com
+
            ServerAlias webmail.herrerosolis.com
          ErrorLog /var/log/apache2/webmail/error.log
+
            ErrorLog /var/log/apache2/webmail/error.log
     
+
       
          # Posible values include: debug, info, notice, warn, error, crit.
+
            # Posible values include: debug, info, notice, warn, error, crit.
          # alert, emerg.
+
            # alert, emerg.
     
+
       
          CustomLog /var/log/apache2/webmail/access.log combined
+
            CustomLog /var/log/apache2/webmail/access.log combined
      </virtualHost>
+
        </virtualHost>
     
+
       
      <VirtualHost *:443>
+
        <VirtualHost *:443>
          ServerAdmin rafael@herrerosolis.com
+
            ServerAdmin rafael@herrerosolis.com
          DocumentRoot /var/lib/roundcube
+
            DocumentRoot /var/lib/roundcube
          ServerName webmail.herrerosolis.com
+
            ServerName webmail.herrerosolis.com
          ServerAlias webmail.herrerosolis.com
+
            ServerAlias webmail.herrerosolis.com
     
+
       
          ErrorLog /var/log/apache2/webmail/error.log
+
            ErrorLog /var/log/apache2/webmail/error.log
     
+
       
          # Posible values include: debug, info, notice, warn, error, crit.
+
            # Posible values include: debug, info, notice, warn, error, crit.
          # alert, emerg.
+
            # alert, emerg.
          CustomLog /var/log/apache2/webmail/access.log combined
+
            CustomLog /var/log/apache2/webmail/access.log combined
          SSLEngine on
+
            SSLEngine on
          SSLCertificateFile /etc/ssl/certs/herrerosolis.crt
+
            SSLCertificateFile /etc/ssl/certs/herrerosolis.crt
          SSLCertificateKeyFile /etc/ssl/private/herrerosolis.key
+
            SSLCertificateKeyFile /etc/ssl/private/herrerosolis.key
      </virtualHost>
+
        </virtualHost>
      </nowiki>
+
        </nowiki>
    
===OPTIONAL: Remove TinyMCE===
 
===OPTIONAL: Remove TinyMCE===
Line 109: Line 136:     
  <nowiki>Comment out these lines:
 
  <nowiki>Comment out these lines:
      #<Directory "/usr/share/tinymce/www/">
+
        #<Directory "/usr/share/tinymce/www/">
      #      Options Indexes MultiViews FollowSymLinks
+
        #      Options Indexes MultiViews FollowSymLinks
      #      AllowOverride None
+
        #      AllowOverride None
      #      Order allow,deny
+
        #      Order allow,deny
      #      allow from all
+
        #      allow from all
      #</Directory>
+
        #</Directory>
      </nowiki>
+
        </nowiki>
    
===Create Databases===
 
===Create Databases===
Line 125: Line 152:     
  <nowiki>CREATE TABLE mailboxes (
 
  <nowiki>CREATE TABLE mailboxes (
          id INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
+
            id INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
          domain_id INT(10) NOT NULL,
+
            domain_id INT(10) NOT NULL,
          local_part VARCHAR(250) NOT NULL,
+
            local_part VARCHAR(250) NOT NULL,
          password VARCHAR(100) NULL,
+
            password VARCHAR(100) NULL,
          description VARCHAR(250) NULL,
+
            description VARCHAR(250) NULL,
          active TINYINT(1) NOT NULL DEFAULT 0,
+
            active TINYINT(1) NOT NULL DEFAULT 0,
          created TIMESTAMP NOT NULL DEFAULT NOW(),
+
            created TIMESTAMP NOT NULL DEFAULT NOW(),
          modified TIMESTAMP NULL
+
            modified TIMESTAMP NULL
      );
+
        );
      CREATE TABLE aliases (
+
        CREATE TABLE aliases (
          id INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
+
            id INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
          domain_id INT(10) NOT NULL,
+
            domain_id INT(10) NOT NULL,
          local_part VARCHAR(250) NOT NULL,
+
            local_part VARCHAR(250) NOT NULL,
          goto VARCHAR(250) NOT NULL,
+
            goto VARCHAR(250) NOT NULL,
          description VARCHAR(250) NULL,
+
            description VARCHAR(250) NULL,
          active TINYINT(1) NOT NULL DEFAULT 0,
+
            active TINYINT(1) NOT NULL DEFAULT 0,
          created TIMESTAMP NOT NULL DEFAULT NOW(),
+
            created TIMESTAMP NOT NULL DEFAULT NOW(),
          modified TIMESTAMP NULL
+
            modified TIMESTAMP NULL
      );
+
        );
      CREATE TABLE vacations (
+
        CREATE TABLE vacations (
          id INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
+
            id INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
          mailbox_id INT(10) NOT NULL,
+
            mailbox_id INT(10) NOT NULL,
          subject VARCHAR(250) NOT NULL,
+
            subject VARCHAR(250) NOT NULL,
          body TEXT NOT NULL,
+
            body TEXT NOT NULL,
          description VARCHAR(250) NULL,
+
            description VARCHAR(250) NULL,
          active TINYINT(1) NOT NULL DEFAULT 0,
+
            active TINYINT(1) NOT NULL DEFAULT 0,
          created TIMESTAMP NOT NULL DEFAULT NOW(),
+
            created TIMESTAMP NOT NULL DEFAULT NOW(),
          modified TIMESTAMP NULL
+
            modified TIMESTAMP NULL
      );
+
        );
     
+
       
      CREATE TABLE domains (
+
        CREATE TABLE domains (
          id INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
+
            id INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
          fqdn VARCHAR(250) NOT NULL,
+
            fqdn VARCHAR(250) NOT NULL,
          type ENUM('local','relay') NOT NULL DEFAULT 'local',
+
            type ENUM('local','relay') NOT NULL DEFAULT 'local',
          description VARCHAR(250) NULL,
+
            description VARCHAR(250) NULL,
          active TINYINT(1) NOT NULL DEFAULT 0,
+
            active TINYINT(1) NOT NULL DEFAULT 0,
          created TIMESTAMP NOT NULL DEFAULT NOW(),
+
            created TIMESTAMP NOT NULL DEFAULT NOW(),
          modified TIMESTAMP NULL
+
            modified TIMESTAMP NULL
      );
+
        );
      </nowiki>
+
        </nowiki>
    
===Create your first email account and domain===
 
===Create your first email account and domain===
Line 178: Line 205:  
===Create a database-account to access the database===
 
===Create a database-account to access the database===
 
  <nowiki>grant ALL on email_accounts.* to 'email'@'localhost' identified by 'password';
 
  <nowiki>grant ALL on email_accounts.* to 'email'@'localhost' identified by 'password';
      flush privileges;
+
        flush privileges;
      </nowiki>
+
        </nowiki>
 
http://bradthemad.org/tech/notes/exim_cheatsheet.php
 
http://bradthemad.org/tech/notes/exim_cheatsheet.php
   Line 193: Line 220:     
  <nowiki># /etc/exim4/update-exim4.conf.conf
 
  <nowiki># /etc/exim4/update-exim4.conf.conf
      #
+
        #
      # Edit this file and /etc/mailname by hand and execute update-exim4.conf
+
        # Edit this file and /etc/mailname by hand and execute update-exim4.conf
      # yourself or use 'dpkg-reconfigure exim4-config'
+
        # yourself or use 'dpkg-reconfigure exim4-config'
      #
+
        #
      # Please note that this is _not_ a dpkg-conffile and that automatic changes
+
        # Please note that this is _not_ a dpkg-conffile and that automatic changes
      # to this file might happen. The code handling this will honor your local
+
        # to this file might happen. The code handling this will honor your local
      # changes, so this is usually fine, but will break local schemes that mess
+
        # changes, so this is usually fine, but will break local schemes that mess
      # around with multiple versions of the file.
+
        # around with multiple versions of the file.
      #
+
        #
      # update-exim4.conf uses this file to determine variable values to generate
+
        # update-exim4.conf uses this file to determine variable values to generate
      # exim configuration macros for the configuration file.
+
        # exim configuration macros for the configuration file.
      #
+
        #
      # Most settings found in here do have corresponding questions in the
+
        # Most settings found in here do have corresponding questions in the
      # Debconf configuration, but not all of them.
+
        # Debconf configuration, but not all of them.
      #
+
        #
      # This is a Debian specific file
+
        # This is a Debian specific file
     
+
       
      dc_eximconfig_configtype='internet'
+
        dc_eximconfig_configtype='internet'
      dc_other_hostnames='[YOUR DOMAIN 1];[YOUR DOMAIN 2]'
+
        dc_other_hostnames='[YOUR DOMAIN 1];[YOUR DOMAIN 2]'
      dc_local_interfaces='127.0.0.1;[PUT YOUR SERVER's IP ADDRESS HERE]'
+
        dc_local_interfaces='127.0.0.1;[PUT YOUR SERVER's IP ADDRESS HERE]'
      dc_readhost=''
+
        dc_readhost=''
      dc_relay_domains=''
+
        dc_relay_domains=''
      dc_minimaldns='false'
+
        dc_minimaldns='false'
      dc_relay_nets=''
+
        dc_relay_nets=''
      dc_smarthost=''
+
        dc_smarthost=''
      CFILEMODE='644'
+
        CFILEMODE='644'
      dc_use_split_config='true'
+
        dc_use_split_config='true'
      dc_hide_mailname=''
+
        dc_hide_mailname=''
      dc_mailname_in_oh='true'
+
        dc_mailname_in_oh='true'
      dc_localdelivery='maildir_home'</nowiki>
+
        dc_localdelivery='maildir_home'</nowiki>
    
====Macros====
 
====Macros====
Line 230: Line 257:  
ADD the following to /etc/exim4/conf.d/main/01_exim4-config_listmacrosdefs
 
ADD the following to /etc/exim4/conf.d/main/01_exim4-config_listmacrosdefs
 
  <nowiki># List of domains considered local for exim. Domains not listed here
 
  <nowiki># List of domains considered local for exim. Domains not listed here
      # need to be deliverable remotely.
+
        # need to be deliverable remotely.
      domainlist local_domains = MAIN_LOCAL_DOMAINS
+
        domainlist local_domains = MAIN_LOCAL_DOMAINS
     
+
       
      # MySQL because exim4 on Debian doesn't always add this:
+
        # MySQL because exim4 on Debian doesn't always add this:
     
+
       
      MYSQL_SERVER=127.0.0.1
+
        MYSQL_SERVER=127.0.0.1
      MYSQL_DB=email_accounts
+
        MYSQL_DB=email_accounts
      MYSQL_USER=email
+
        MYSQL_USER=email
      MYSQL_PASSWORD=password
+
        MYSQL_PASSWORD=password
      hide mysql_servers = MYSQL_SERVER/MYSQL_DB/MYSQL_USER/MYSQL_PASSWORD</nowiki>
+
        hide mysql_servers = MYSQL_SERVER/MYSQL_DB/MYSQL_USER/MYSQL_PASSWORD</nowiki>
    
====Routers====
 
====Routers====
Line 245: Line 272:     
  <nowiki>dovecot_user:
 
  <nowiki>dovecot_user:
            driver = accept
+
              driver = accept
              condition = ${lookup mysql{SELECT CONCAT(mailboxes.local_part,'@',domains.fqdn) AS goto FROM domains,mailboxes WHERE \
+
                condition = ${lookup mysql{SELECT CONCAT(mailboxes.local_part,'@',domains.fqdn) AS goto FROM domains,mailboxes WHERE \
                          mailboxes.local_part='${quote_mysql:$local_part}' AND \
+
                          mailboxes.local_part='${quote_mysql:$local_part}' AND \
                          mailboxes.active=1 AND \
+
                          mailboxes.active=1 AND \
                          mailboxes.domain_id=domains.id AND \
+
                          mailboxes.domain_id=domains.id AND \
                          domains.fqdn='${quote_mysql:$domain}' AND \
+
                          domains.fqdn='${quote_mysql:$domain}' AND \
                          domains.active=1}{yes}{no}}
+
                          domains.active=1}{yes}{no}}
            transport = dovecot_delivery</nowiki>
+
            transport = dovecot_delivery</nowiki>
    
Either DELETE this file, or comment-out all lines /etc/exim4/conf.d/router/400_exim4-config_system_aliases<br />
 
Either DELETE this file, or comment-out all lines /etc/exim4/conf.d/router/400_exim4-config_system_aliases<br />
Line 259: Line 286:     
  <nowiki>### router/401_exim4-config_mysql_aliases
 
  <nowiki>### router/401_exim4-config_mysql_aliases
      #################################
+
        #################################
     
+
       
      # ADAM: This router handles aliasing using the proprietary mysql setup
+
        # ADAM: This router handles aliasing using the proprietary mysql setup
      #
+
        #
      # c.f. http://alex.mamchenkov.net/2010/06/24/exim-dovecot-and-mysql/
+
        # c.f. http://alex.mamchenkov.net/2010/06/24/exim-dovecot-and-mysql/
      #
+
        #
     
+
       
      system_aliases:
+
        system_aliases:
            driver = redirect
+
            driver = redirect
            allow_fail  
+
            allow_fail  
            allow_defer
+
            allow_defer
            data = ${lookup mysql{SELECT aliases.goto AS goto FROM domains,aliases WHERE \
+
            data = ${lookup mysql{SELECT aliases.goto AS goto FROM domains,aliases WHERE \
                          (aliases.local_part='${quote_mysql:$local_part}' OR aliases.local_part='@') AND \
+
                          (aliases.local_part='${quote_mysql:$local_part}' OR aliases.local_part='@') AND \
                          aliases.active=1 AND \
+
                          aliases.active=1 AND \
                          aliases.domain_id=domains.id AND \
+
                          aliases.domain_id=domains.id AND \
                          domains.fqdn='${quote_mysql:$domain}' AND \
+
                          domains.fqdn='${quote_mysql:$domain}' AND \
                          domains.active=1}}
+
                          domains.active=1}}
      </nowiki>
+
        </nowiki>
    
====Transports====
 
====Transports====
Line 282: Line 309:     
  <nowiki>### transport/30_exim4-config_dovecot
 
  <nowiki>### transport/30_exim4-config_dovecot
      #################################
+
        #################################
     
+
       
      #
+
        #
     
+
       
      dovecot_delivery:
+
        dovecot_delivery:
            driver = appendfile
+
            driver = appendfile
            maildir_format = true
+
            maildir_format = true
            directory = /var/spool/mail/$domain/$local_part
+
            directory = /var/spool/mail/$domain/$local_part
            create_directory = true
+
            create_directory = true
            directory_mode = 0770
+
            directory_mode = 0770
            mode_fail_narrower = false
+
            mode_fail_narrower = false
            message_prefix =
+
            message_prefix =
            message_suffix =
+
            message_suffix =
            delivery_date_add
+
            delivery_date_add
            envelope_to_add
+
            envelope_to_add
            return_path_add
+
            return_path_add
            user = mail
+
            user = mail
            group = mail
+
            group = mail
            mode = 0660
+
            mode = 0660
      </nowiki>
+
        </nowiki>
    
====Auth====
 
====Auth====
Line 307: Line 334:     
  <nowiki>### AUTHENTICATIOR SECTION
 
  <nowiki>### AUTHENTICATIOR SECTION
     
+
       
      auth_plain:
+
        auth_plain:
            driver = plaintext
+
            driver = plaintext
            public_name = PLAIN
+
            public_name = PLAIN
            server_condition = ${lookup mysql{SELECT CONCAT(mailboxes.local_part,'@',domains.fqdn) FROM mailboxes,domains WHERE \
+
            server_condition = ${lookup mysql{SELECT CONCAT(mailboxes.local_part,'@',domains.fqdn) FROM mailboxes,domains WHERE \
                              mailboxes.local_part=SUBSTRING_INDEX('${quote_mysql:$auth2}','@',1) AND \
+
                              mailboxes.local_part=SUBSTRING_INDEX('${quote_mysql:$auth2}','@',1) AND \
                              mailboxes.password=MD5('${quote_mysql:$auth3}') AND \
+
                              mailboxes.password=MD5('${quote_mysql:$auth3}') AND \
                              mailboxes.active=1 AND \
+
                              mailboxes.active=1 AND \
                              mailboxes.domain_id=domains.id AND \
+
                              mailboxes.domain_id=domains.id AND \
                              domains.fqdn=SUBSTRING_INDEX('${quote_mysql:$auth2}','@',-1) AND \
+
                              domains.fqdn=SUBSTRING_INDEX('${quote_mysql:$auth2}','@',-1) AND \
                              domains.active=1}{yes}{no}}
+
                              domains.active=1}{yes}{no}}
            server_prompts = :
+
            server_prompts = :
            server_set_id = $auth2
+
            server_set_id = $auth2
     
+
       
      auth_login:
+
        auth_login:
            driver = plaintext
+
            driver = plaintext
            public_name = LOGIN
+
            public_name = LOGIN
            server_condition = ${lookup mysql{SELECT CONCAT(mailboxes.local_part,'@',domains.fqdn) FROM mailboxes,domains WHERE \
+
            server_condition = ${lookup mysql{SELECT CONCAT(mailboxes.local_part,'@',domains.fqdn) FROM mailboxes,domains WHERE \
                              mailboxes.local_part=SUBSTRING_INDEX('${quote_mysql:$auth1}','@',1) AND \
+
                              mailboxes.local_part=SUBSTRING_INDEX('${quote_mysql:$auth1}','@',1) AND \
                              mailboxes.password=MD5('${quote_mysql:$auth2}') AND \
+
                              mailboxes.password=MD5('${quote_mysql:$auth2}') AND \
                              mailboxes.active=1 AND \
+
                              mailboxes.active=1 AND \
                              mailboxes.domain_id=domains.id AND \
+
                              mailboxes.domain_id=domains.id AND \
                              domains.fqdn=SUBSTRING_INDEX('${quote_mysql:$auth1}','@',-1) AND \
+
                              domains.fqdn=SUBSTRING_INDEX('${quote_mysql:$auth1}','@',-1) AND \
                              domains.active=1}{yes}{no}}
+
                              domains.active=1}{yes}{no}}
            server_prompts = Username:: : Password::
+
            server_prompts = Username:: : Password::
            server_set_id = $auth1</nowiki>
+
            server_set_id = $auth1</nowiki>
      Line 344: Line 371:  
===DKIM===
 
===DKIM===
   −
==== Generate DKIM private & public keys: ====
+
====Generate DKIM private & public keys:====
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
sudo mkdir /etc/exim4/dkim && cd /etc/exim4/dkim
 
sudo mkdir /etc/exim4/dkim && cd /etc/exim4/dkim
Line 351: Line 378:  
</syntaxhighlight>
 
</syntaxhighlight>
   −
==== Configure your exim to sign using the DKIM key ====
+
====Configure your exim to sign using the DKIM key====
 
Edit /etc/exim4/conf.d/main/000_localmacros and add at the beggining:<syntaxhighlight lang="text">
 
Edit /etc/exim4/conf.d/main/000_localmacros and add at the beggining:<syntaxhighlight lang="text">
 
DKIM_DOMAIN = ${lc:${domain:$h_from:}}
 
DKIM_DOMAIN = ${lc:${domain:$h_from:}}
Line 390: Line 417:  
ADD to the file /etc/dovecot/dovecot.conf
 
ADD to the file /etc/dovecot/dovecot.conf
 
  <nowiki>protocols = imap
 
  <nowiki>protocols = imap
      listen = *, ::</nowiki>
+
        listen = *, ::</nowiki>
    
Add to the file /etc/dovecot/conf.d/10-mail.conf
 
Add to the file /etc/dovecot/conf.d/10-mail.conf
Line 400: Line 427:  
ADD to the file /etc/dovecot/dovecot-sql.conf.ext
 
ADD to the file /etc/dovecot/dovecot-sql.conf.ext
 
  <nowiki>driver = mysql
 
  <nowiki>driver = mysql
      connect = host=127.0.0.1 dbname=email_accounts user=email password=password
+
        connect = host=127.0.0.1 dbname=email_accounts user=email password=password
      default_pass_scheme = MD5
+
        default_pass_scheme = MD5
     
+
       
      password_query = SELECT CONCAT(mailboxes.local_part,'@',domains.fqdn) as `user`, mailboxes.password AS `password`,'/var/spool/mail/%d/%n' AS `userdb_home`, [YOUR UID] AS `userdb_uid`, [YOUR GID] AS `userdb_gid` FROM `mailboxes`, `domains` WHERE mailboxes.local_part = '%n' AND mailboxes.active = 1 AND mailboxes.domain_id = domains.id AND domains.fqdn = '%d' AND domains.active = 1
+
        password_query = SELECT CONCAT(mailboxes.local_part,'@',domains.fqdn) as `user`, mailboxes.password AS `password`,'/var/spool/mail/%d/%n' AS `userdb_home`, [YOUR UID] AS `userdb_uid`, [YOUR GID] AS `userdb_gid` FROM `mailboxes`, `domains` WHERE mailboxes.local_part = '%n' AND mailboxes.active = 1 AND mailboxes.domain_id = domains.id AND domains.fqdn = '%d' AND domains.active = 1
     
+
       
      user_query = SELECT '/var/spool/mail/%d/%n' AS `home`, [YOUR UID] AS `uid`, [YOUR GID] AS `gid`</nowiki>
+
        user_query = SELECT '/var/spool/mail/%d/%n' AS `home`, [YOUR UID] AS `uid`, [YOUR GID] AS `gid`</nowiki>
    
====SSL====
 
====SSL====
Line 411: Line 438:  
Edit: /etc/dovecot/conf.d/10-ssl.conf
 
Edit: /etc/dovecot/conf.d/10-ssl.conf
 
  <nowiki>ssl = required
 
  <nowiki>ssl = required
      # Preferred permissions: root:root 0444
+
        # Preferred permissions: root:root 0444
      ssl_cert = </etc/ssl/certs/dovecot.pem
+
        ssl_cert = </etc/ssl/certs/dovecot.pem
      # Preferred permissions: root:root 0400
+
        # Preferred permissions: root:root 0400
      ssl_key = </etc/ssl/private/dovecot.pem</nowiki>
+
        ssl_key = </etc/ssl/private/dovecot.pem</nowiki>
    
====Ports====
 
====Ports====
Line 433: Line 460:  
Add to /etc/roundcube/config.inc.php
 
Add to /etc/roundcube/config.inc.php
 
  <nowiki>$config['imap_conn_options'] = array(
 
  <nowiki>$config['imap_conn_options'] = array(
        'ssl'        => array(
+
          'ssl'        => array(
            'verify_peer'  => false,
+
            'verify_peer'  => false,
            'verify_peer_name'  => false,
+
            'verify_peer_name'  => false,
            'allow_self_signed' => true,
+
            'allow_self_signed' => true,
          ),
+
          ),
        );
+
        );
      </nowiki>
+
        </nowiki>
    
====Enable Password Plugin====
 
====Enable Password Plugin====
Line 469: Line 496:  
Then edit your local composer.json file and add the "vendor/plugin" names to the "require" section of the JSON structure. Don't forget to specify the version constraint:
 
Then edit your local composer.json file and add the "vendor/plugin" names to the "require" section of the JSON structure. Don't forget to specify the version constraint:
 
  <nowiki>"require" : {
 
  <nowiki>"require" : {
          ...,
+
            ...,
          "roundcube/rcsample": ">=0.2.0"
+
            "roundcube/rcsample": ">=0.2.0"
      }</nowiki>
+
        }</nowiki>
    
After every change to composer.json run
 
After every change to composer.json run
Line 478: Line 505:  
==Restart Everithing==  
 
==Restart Everithing==  
 
  <nowiki>/etc/init.d/apache2 restart
 
  <nowiki>/etc/init.d/apache2 restart
      /etc/init.d/exim4 restart
+
        /etc/init.d/exim4 restart
      /etc/init.d/dovecot restart</nowiki>
+
        /etc/init.d/dovecot restart</nowiki>
    
Exim may output a “paniclog”. If so, read it, fix it – and then manually delete the paniclog file, or else you’ll keep getting fake warnings every time you restart exim.
 
Exim may output a “paniclog”. If so, read it, fix it – and then manually delete the paniclog file, or else you’ll keep getting fake warnings every time you restart exim.

Navigation menu