Changes

Jump to navigation Jump to search
m
Line 100: Line 100:  
/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====
 
TinyMCE is a WYSIWYG text-editor for HTML emails. I hate it. It had a long history of being insecure, buggy, slow, and hard to use. So I disable it:
 
TinyMCE is a WYSIWYG text-editor for HTML emails. I hate it. It had a long history of being insecure, buggy, slow, and hard to use. So I disable it:
   Line 136: 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===
mysql -u root -p
+
<syntaxhighlight lang="bash">
 +
mysql -u root -p
 +
</syntaxhighlight>
 +
 +
<syntaxhighlight lang="mysql">
 +
CREATE DATABASE email_accounts;
 +
USE email_accounts;
 +
CREATE TABLE mailboxes (
 +
    id INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
 +
    domain_id INT(10) NOT NULL,
 +
    local_part VARCHAR(250) NOT NULL,
 +
    password VARCHAR(100) NULL,
 +
    description VARCHAR(250) NULL,
 +
    active TINYINT(1) NOT NULL DEFAULT 0,
 +
    created TIMESTAMP NOT NULL DEFAULT NOW(),
 +
    modified TIMESTAMP NULL
 +
);
   −
CREATE DATABASE email_accounts;
+
CREATE TABLE aliases (
 +
  id INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
 +
  domain_id INT(10) NOT NULL,
 +
  local_part VARCHAR(250) NOT NULL,
 +
  goto VARCHAR(250) NOT NULL,
 +
  description VARCHAR(250) NULL,
 +
  active TINYINT(1) NOT NULL DEFAULT 0,
 +
  created TIMESTAMP NOT NULL DEFAULT NOW(),
 +
  modified TIMESTAMP NULL
 +
);
   −
USE email_accounts;
+
CREATE TABLE vacations (
 +
  id INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
 +
  mailbox_id INT(10) NOT NULL,
 +
  subject VARCHAR(250) NOT NULL,
 +
  body TEXT NOT NULL,
 +
  description VARCHAR(250) NULL,
 +
  active TINYINT(1) NOT NULL DEFAULT 0,
 +
  created TIMESTAMP NOT NULL DEFAULT NOW(),
 +
  modified TIMESTAMP NULL
 +
);
   −
<nowiki>CREATE TABLE mailboxes (
+
CREATE TABLE domains (
                      id INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
+
  id INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
                      domain_id INT(10) NOT NULL,
+
  fqdn VARCHAR(250) NOT NULL,
                      local_part VARCHAR(250) NOT NULL,
+
  type ENUM('local','relay') NOT NULL DEFAULT 'local',
                      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
+
);
                  );
+
</syntaxhighlight>
                  CREATE TABLE aliases (
+
                      id INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  −
                      domain_id INT(10) NOT NULL,
  −
                      local_part VARCHAR(250) NOT NULL,
  −
                      goto VARCHAR(250) NOT NULL,
  −
                      description VARCHAR(250) NULL,
  −
                      active TINYINT(1) NOT NULL DEFAULT 0,
  −
                      created TIMESTAMP NOT NULL DEFAULT NOW(),
  −
                      modified TIMESTAMP NULL
  −
                  );
  −
                  CREATE TABLE vacations (
  −
                      id INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  −
                      mailbox_id INT(10) NOT NULL,
  −
                      subject VARCHAR(250) NOT NULL,
  −
                      body TEXT NOT NULL,
  −
                      description VARCHAR(250) NULL,
  −
                      active TINYINT(1) NOT NULL DEFAULT 0,
  −
                      created TIMESTAMP NOT NULL DEFAULT NOW(),
  −
                      modified TIMESTAMP NULL
  −
                  );
  −
                 
  −
                  CREATE TABLE domains (
  −
                      id INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  −
                      fqdn VARCHAR(250) NOT NULL,
  −
                      type ENUM('local','relay') NOT NULL DEFAULT 'local',
  −
                      description VARCHAR(250) NULL,
  −
                      active TINYINT(1) NOT NULL DEFAULT 0,
  −
                      created TIMESTAMP NOT NULL DEFAULT NOW(),
  −
                      modified TIMESTAMP NULL
  −
                  );
  −
                  </nowiki>
      
===Create your first email account and domain===
 
===Create your first email account and domain===
 
====Domain====
 
====Domain====
<nowiki>INSERT INTO domains VALUES(NULL,'herrerosolis.com','local','My personal domain',1,NOW(),NOW());</nowiki>
+
<syntaxhighlight lang="mysql">
 +
INSERT INTO domains VALUES(NULL,'herrerosolis.com','local','My personal domain',1,NOW(),NOW());
 +
</syntaxhighlight>
 +
    
====User====
 
====User====
<nowiki>INSERT INTO mailboxes VALUES(NULL,1,'joe',MD5('password - choose a good one'),'My account for joe@herrerosolis.com',1,NOW(),NOW());</nowiki>
+
<syntaxhighlight lang="mysql">
 +
INSERT INTO mailboxes VALUES(NULL,1,'joe',MD5('password - choose a good one'),'My account for joe@herrerosolis.com',1,NOW(),NOW());
 +
</syntaxhighlight>
 +
    
====Alias====
 
====Alias====
<nowiki>insert into aliases values (null, 1, 'rafa', 'rafael@herrerosolis.com', 'Redirect to me', 1, NOW(), NOW() );</nowiki>
+
<syntaxhighlight lang="mysql">
 +
insert into aliases values (null, 1, 'rafa', 'rafael@herrerosolis.com', 'Redirect to me', 1, NOW(), NOW() );
 +
</syntaxhighlight>
 +
    
===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';
+
<syntaxhighlight lang="mysql">
                  flush privileges;
+
grant ALL on email_accounts.* to 'cartero'@'localhost' identified by 'password';
                  </nowiki>
+
flush privileges;
 +
</syntaxhighlight>
 +
 +
                     
 
http://bradthemad.org/tech/notes/exim_cheatsheet.php
 
http://bradthemad.org/tech/notes/exim_cheatsheet.php
   Line 419: Line 435:  
  cat /etc/passwd | grep mail
 
  cat /etc/passwd | grep mail
   −
ADD to the file /etc/dovecot/dovecot.conf
+
ADD to the file /etc/dovecot/dovecot.conf<syntaxhighlight lang="text">
<nowiki>protocols = imap
+
protocols = imap  
                  listen = *, ::</nowiki>
+
listen = *, ::
 +
</syntaxhighlight>
 +
    
Add to the file /etc/dovecot/conf.d/10-mail.conf
 
Add to the file /etc/dovecot/conf.d/10-mail.conf
Line 467: Line 485:  
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 503: Line 521:  
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
 
  php composer.phar install
 
  php composer.phar install
   −
==Restart Everithing==  
+
==Restart Everithing==
<nowiki>/etc/init.d/apache2 restart
+
<syntaxhighlight lang="text">
                  /etc/init.d/exim4 restart
+
/etc/init.d/apache2 restart  
                  /etc/init.d/dovecot restart</nowiki>
+
/etc/init.d/exim4 restart  
 
+
/etc/init.d/dovecot restart
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.
+
</syntaxhighlight>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.
 
  −
 
  −
 
  −
 
        Line 564: Line 578:     
  mailq | grep frozen | awk '{print $3}' | xargs exim -v -M
 
  mailq | grep frozen | awk '{print $3}' | xargs exim -v -M
 +
 +
====Exim usefull commands====
 +
https://hostpapasupport.com/list-useful-commands-manage-exim-mail-server/
 +
 +
====Spam filters filtering your mails====
 +
https://www.mail-tester.com/
      Line 589: Line 609:  
1. In the file /etc/dovecot/conf.d/auth-sql-conf.ext uncomment driver and set it to mysql
 
1. In the file /etc/dovecot/conf.d/auth-sql-conf.ext uncomment driver and set it to mysql
 
2. /etc/dovecot/conf.d/10-mail.conf uncomment first_valid_uid and set it to [your_uid] (ie. 8). If you need to do the same for first_valid_gid
 
2. /etc/dovecot/conf.d/10-mail.conf uncomment first_valid_uid and set it to [your_uid] (ie. 8). If you need to do the same for first_valid_gid
 +
 +
https://pasztor.at/blog/the-big-exim-tutorial
 
=Adding new Domains=
 
=Adding new Domains=
    
#Add the new domain to to MySQL email_accounts.domains
 
#Add the new domain to to MySQL email_accounts.domains
 
#Start creating accounts with the new domain id
 
#Start creating accounts with the new domain id
 +
 +
=Auxiliary Scripts=
 +
 +
===Create email account===
 +
<syntaxhighlight lang="bash">
 +
#!/bin/bash
 +
PASSWORD1="hola"
 +
PASSWORD2="mundo"
 +
DOMAIN="herrerosolis.com"
 +
echo "******************************* MAIL ACCOUNT INFORMATION *****************************************"
 +
 +
read -p "Username (without@herrerosolis.com): " USERNAME
 +
 +
while [[ "$PASSWORD1" != "$PASSWORD2" ]]; do
 +
    read -s -p "Password: " PASSWORD1
 +
    echo
 +
    read -s -p "Confirm password: " PASSWORD2
 +
    if [ "$PASSWORD1" != "$PASSWORD2" ]; then
 +
        echo "Passwords dont match, try again..."
 +
    fi
 +
done
 +
echo
 +
echo
 +
echo "Input MySQL database password for user mail"
 +
 +
mysql -h 127.0.0.1 -u cartero -p -D email_accounts -e "INSERT INTO mailboxes VALUES(NULL,1,'$USERNAME',MD5('$PASSWORD1'),'Mail account for $USERNAME@${DOMAIN}',1,NOW(),NOW());"
 +
</syntaxhighlight>
 +
 +
===Create email alias===
 +
<syntaxhighlight lang="bash">
 +
#!/bin/bash
 +
 +
echo "******************************* MAIL ACCOUNT INFORMATION *****************************************"
 +
 +
read -p "Alias name (without _@redactate.com): " ALIAS
 +
 +
read -p "Destiny account (full email address): " GOTO
 +
 +
echo
 +
echo
 +
echo "Input MySQL database password for user mail"
 +
 +
mysql -h 127.0.0.1 -u cartero -p -D email_accounts -e "INSERT INTO aliases VALUES (null, 2, '$ALIAS', '$GOTO', 'Redirecting $ALIAS@ to $GOTO', 1, NOW(),NOW());"
 +
 +
</syntaxhighlight>

Navigation menu