User Tools

Site Tools


linux:web-mail-system

Web Mail System

Overview about webmail architecture

Overview about features in webmail system:

  • User will use roundcube website to send and receive email
  • Roundcube backend will:
    • integrate with postfix for sendding email
    • and integrate with dovecot for authenticating user, receiving email, and get all email received will be stored in mailbox of dovecot /onec/vmail
  • Postfix: Postfix
    • integrate with dovecot mailbox to save sent email
    • integrate with postfixadmin database to load config about virtual mailboxes
  • Dovecot: Integrate with postfixadmin database to authenticate users created from postfixadmin
              
receive email----------->110(POP)
                          |              (Store email accounts)
             143(IMAP)    |-dovecot(IMAP)-------3306------->mysql(postfix database)<--3306--Postfixadmin
roundcube--store--------->|          |                         | 
        | (sent, drafts)  |          |--->virtual mailbox      |
        <--Receive--------|                                    |
                                                               |
roundcube send mail---25-->postfix server--------------------->|

Postfixadmin

Config nginx with php-fpm for running Postfixadmin

server {
   listen          123.30.173.67:80;
   server_name     postfixadmin.tolava.com;
   root            /data/www/email/postfixadmin;
   index           index.php;
   charset         utf-8;
 
   location / {
      try_files $uri $uri/ index.php;
   }
 
   location ~* \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        include       fastcgi_params;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_index index.php;
   }
}

Config nginx with http backend for running Postfixadmin

nginx config

server {
   listen          123.30.173.67:80;
   server_name     postfixadmin.tolava.com;
   root            /data/www/email/postfixadmin;
   index           index.php;
   charset         utf-8;
 
   location / {
      try_files $uri $uri/ index.php;
   }
 
   location ~* \.php$ {
      proxy_pass         http://10.20.50.69:8080/;
      proxy_redirect     off;
 
      proxy_set_header   Host             $host;
      proxy_set_header   X-Real-IP        $remote_addr;
      client_max_body_size       10m;
      client_body_buffer_size    128k;
 
      proxy_connect_timeout      90;
      proxy_send_timeout         90;
      proxy_temp_file_write_size 64k;
   }
   location ~* ^.+.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf)$    {
           root   /data/www/email/postfixadmin;
   }
 
}

httpd backend config

<VirtualHost 10.20.50.69:8080>
    ServerName postfixadmin.tolava.com
    DocumentRoot "/data/www/email/postfixadmin"
    DirectoryIndex index.php index.html index.htm index.php5
    AddDefaultCharset utf-8
    ErrorLog /onec/logs/postfixadmin_error_log
    CustomLog /onec/logs/postfixadmin_access.log common
    <Directory /data/www/email/postfixadmin>
        Options FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

Install Postfix Admin

(Default config file of postfixadmin is config.inc.php)

  1. Step1: Create database postfix
    CREATE DATABASE postfix;
  2. Step2: Create new user to grant all privilleges to database postfix:
    GRANT ALL privileges ON postfix.* TO 'postfix'@'localhost'  IDENTIFIED BY 'xxxxx';
    FLUSH PRIVILEGES;
  3. Step3: Create file config.local.php for custom config connect to db:
    <?php
    $CONF['database_type'] = 'mysql';
    $CONF['database_user'] = 'postfix';
    $CONF['database_password'] = 'xxxxx';
    $CONF['database_name'] = 'postfix';
    $CONF['configured'] = true;
    ?>
  4. Step4: Go to link http://yourdomain/setup.php to check setup status

Create setup password and Admin User

Go to link http://yourdomain/setup.php to check setup status and set password for user admin. Below are detail steps for creating admin user:

  1. Step1: In the first install, you go to link http://yourdomain/setup.php to create setup password.
  2. Step2: After setup password created, postfix will generate hash string as $CONF['setup_password'] = 'd81xxxxxxxxxxxxxxxx41be:8c06c9debe226105811cac5429796a4d8a0591aa';. You only update this config to config.local.php
    $CONF['setup_password'] = 'd81xxxxxxxxxxxxxxxx41be:8c06c9debe226105811cac5429796a4d8a0591aa';
  3. Step3: You use link http://yourdomain/setup.php to create super admin user which secure by setup password

Postfix

Install and config Postfix

refer: Postfix config

  1. Install pre dev packages:
    yum install mysql-devel
    yum install db4-devel
    yum install openldap-devel
  2. Add postfix users:
    useradd -s /sbin/nologin postfix
    useradd -s /sbin/nologin postdrop
  3. Build postfix from source:
    wget http://mirror.postfix.jp/postfix-release/official/postfix-3.1.0.tar.gz
    tar xf postfix-3.1.0.tar.gz
    cd postfix-3.1.0
    make makefiles CCARGS='-DDEF_COMMAND_DIR=\"/onec/postfix/sbin\" \
            -DDEF_CONFIG_DIR=\"/onec/postfix/conf\" \
            -DDEF_DAEMON_DIR=\"/onec/postfix/libexec/postfix\" \
            -DDEF_MAILQ_PATH=\"/onec/postfix/bin/mailq\" \
            -DDEF_NEWALIAS_PATH=\"/onec/postfix/bin/newaliases\" \
            -DDEF_SAMPLE_DIR=\"/etc/postfix/samples\" \
            -DDEF_SENDMAIL_PATH=\"/onec/postfix/sbin/sendmail\" \
            -DHAS_MYSQL -I/usr/include/mysql' \
            AUXLIBS='-L/usr/lib64/mysql -lmysqlclient'
    make
    make install

    make install with change options below:

    install_root: [/]
    daemon_directory: [/onec/postfix/libexec/postfix] /onec/postfix/libexec
    data_directory: [/var/lib/postfix] /onec/postfix/data
    manpage_directory: [/usr/local/man] /onec/postfix/man
    mail_owner: [postfix]
    queue_directory: [/var/spool/postfix] /onec/postfix/mailqueue
    setgid_group: [postdrop]
  4. Create script /etc/init.d/postfix:
    #!/bin/sh
    #
    # /etc/rc.d/rc.postfix
    #
    # Postfix init script for Slackware Linux
    #
    # Author: Sean O'Donnell
    #
     
    # define the path to the postfix executable
    POSTFIX=/onec/postfix/sbin/postfix
    CONF=/onec/postfix/conf
    function start_postfix()
    {
            echo "Starting Postfix..."
            $POSTFIX -c $CONF start
    }
     
    function stop_postfix()
    {
            echo "Stopping Postfix..."
            $POSTFIX stop
    }
     
    function restart_postfix()
    {
            stop_postfix
            sleep 5
            start_postfix
    }
     
    case "$1" in
       'start')
          start_postfix ;;
       'stop')
          stop_postfix ;;
       'restart')
          restart_postfix ;;
       *)
          echo "usage $0 start|stop|restart" ;;
    esac

Config postfix store mails to mailbox directly

update path of mailbox in main.cf

# if you let postfix store your mails directly (without using maildrop, dovecot deliver etc.)
virtual_mailbox_base = /onec/vmail
# or whereever you want to store the mails

Config integrate Postfix with postfixadmin with virtual domains

refer: http://sourceforge.net/p/postfixadmin/code/HEAD/tree/trunk/DOCUMENTS/POSTFIX_CONF.txt

Below are steps:

  1. Step2: Run script to generate sql postfix config to integrate with postfixadmin:
    bash POSTFIX_CONF.txt
  2. Step3: Copy all configs generated to directory /onec/postfix/config/sql
  3. Step4: Go to directory /onec/postfix/config/sql and replace string hosts = localhost to hosts = 127.0.0.1 for fixing error “Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'“:
    sed -i 's/hosts = localhost/hosts = 127.0.0.1/g' *
  4. Step5: Edit /onec/postfix/conf/main.cf for mysql server and using virtual mailbox:
    mydestination =
    virtual_minimum_uid = 5000
    virtual_uid_maps = static:5000
    virtual_gid_maps = static:5000
    virtual_mailbox_base = /onec/vmail
    virtual_transport = virtual
    virtual_mailbox_domains = proxy:mysql:/onec/postfix/conf/sql/mysql_virtual_domains_maps.cf
    virtual_alias_maps =
       proxy:mysql:/onec/postfix/conf/sql/mysql_virtual_alias_maps.cf,
       proxy:mysql:/onec/postfix/conf/sql/mysql_virtual_alias_domain_maps.cf,
       proxy:mysql:/onec/postfix/conf/sql/mysql_virtual_alias_domain_catchall_maps.cf
    virtual_mailbox_maps =
       proxy:mysql:/onec/postfix/conf/sql/mysql_virtual_mailbox_maps.cf,
       proxy:mysql:/onec/postfix/conf/sql/mysql_virtual_alias_domain_mailbox_maps.cf

    Note: 5000 is userid and groupid of user vmail.vmail

  5. Step6: Check config in postfix for connecting to database:
    /onec/postfix/sbin/postmap -q cuuthien2.com mysql:/onec/postfix/conf/sql/mysql_virtual_alias_maps.cf

Fix error:

connect to mysql server 127.0.0.1: access denied for user 'postfix'@'localhost'

⇒ After we check the connect to MySQL server with account postfix/xxxxx OK but postfix can't connect to MySQL Server. Fix: You can re-create all sql files in sql/*.cf of postfix for current version of postfix

Debug Postfix with postconf

  • Show modules which was compiled with postfix:
    /onec/postfix/sbin/postconf -m

    output:

    /onec/postfix/sbin/postconf: warning: smtputf8_enable is true, but EAI support is not compiled in
    btree
    cidr
    environ
    fail
    hash
    inline
    internal
    memcache
    mysql
    nis
    pcre
    pipemap
    proxy
    randmap
    regexp
    socketmap
    static
    tcp
    texthash
    unionmap
    unix
  • Check config parameters in postfix:
    /onec/postfix/sbin/postconf | grep local_recipient_maps

    output:

    local_recipient_maps = proxy:unix:passwd.byname $alias_maps
    proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps $sender_bcc_maps $recipient_bcc_maps $smtp_generic_maps $lmtp_generic_maps $alias_maps $smtpd_client_restrictions $smtpd_helo_restrictions $smtpd_sender_restrictions $smtpd_relay_restrictions $smtpd_recipient_restrictions

Dovecot

Install dovecot and create script stop, start

  1. Step1: Build and Install dovecot:
    wget http://www.dovecot.org/releases/2.1/dovecot-2.1.17.tar.gz
    tar xf dovecot-2.1.17.tar.gz
    cd dovecot-2.1.17
    ./configure --prefix=/onec/dovecot/ --with-mysql
    make
    make install
  2. Step2: Create Script stop, start dovecot:
    #!/bin/bash
    #
    #       /etc/rc.d/init.d/dovecot
    #
    # Starts the dovecot daemon
    #
    # chkconfig: - 65 35
    # description: Dovecot Imap Server
    # processname: dovecot
    # config: /etc/dovecot.conf
    # config: /etc/sysconfig/dovecot
    # pidfile: /var/run/dovecot/master.pid
     
    ### BEGIN INIT INFO
    # Provides: dovecot
    # Required-Start: $local_fs $network
    # Required-Stop: $local_fs $network
    # Should-Start: $remote_fs
    # Should-Stop: $remote_fs
    # Default-Start:
    # Default-Stop: 0 1 2 3 4 5 6
    # Short-Description: start and stop Dovecot Imap server
    # Description: Dovecot is an IMAP server for Linux/UNIX-like systems,
    #              written with security primarily in mind.  It also contains
    #              a small POP3 server.
    ### END INIT INFO
     
    # Source function library.
    . /etc/init.d/functions
     
    if [ -f /etc/sysconfig/dovecot -a $UID -eq 0 ]; then
        . /etc/sysconfig/dovecot
    fi
     
    RETVAL=0
    prog="Dovecot Imap"
    exec="/onec/dovecot/sbin/dovecot"
    config="/onec/dovecot/etc/dovecot/dovecot.conf"
    pidfile="/onec/dovecot/var/run/dovecot/master.pid"
    lockfile="/var/lock/subsys/dovecot"
     
    start() {
            [ $UID -eq 0 ] || exit 4
            [ -x $exec ] || exit 5
            [ -f $config ] || exit 6
     
            echo -n $"Starting $prog: "
            daemon --pidfile $pidfile $exec $OPTIONS
            RETVAL=$?
            [ $RETVAL -eq 0 ] && touch  $lockfile
            echo
    }
     
    stop() {
            [ $UID -eq 0 ] || exit 4
            echo -n $"Stopping $prog: "
            killproc -p $pidfile $exec
            RETVAL=$?
            [ $RETVAL -eq 0 ] && rm -f $lockfile
            echo
    }
     
    reload() {
            [ $UID -eq 0 ] || exit 4
            echo -n $"Reloading $prog: "
            killproc -p $pidfile $exec -HUP
            RETVAL=$?
            echo
    }
     
    #
    #       See how we were called.
    #
    case "$1" in
      start)
            start
            ;;
      stop)
            stop
            ;;
      reload)
            reload
            ;;
      force-reload|restart)
            stop
            sleep 1
            start
            RETVAL=$?
            ;;
      condrestart|try-restart)
            if [ -f $lockfile ]; then
                stop
                sleep 3
                start
            fi
            ;;
      status)
            status -p $pidfile $exec
            RETVAL=$?
            ;;
      *)
            echo $"Usage: $0 {condrestart|try-restart|start|stop|restart|reload|force-reload|status}"
            RETVAL=2
            [ "$1" = 'usage' ] && RETVAL=0
    esac
     
    exit $RETVAL

Basic Configure

Minimal config for running dovecot(copy config dovecot.conf from doc/example-config/ to /onec/dovecot/etc/dovecot/) and edit:

ssl=no
#!include conf.d/*.conf

⇒ We can start dovecot after this step

Create and Config basic Mailbox for dovecot

  1. Step1: Create user used to store the mail:
    groupadd -g 5000 vmail
    useradd -u 5000 -g vmail -s /usr/bin/nologin -d /home/vmail -m vmail
  2. Step2: Create directory to store the mail:
    mkdir -p /onec/vmail
    chown -R vmail.vmail /onec/vmail
  3. Step3: Config mailbox in dovecot.conf:
    mail_location = maildir:/onec/vmail/%d/%n/

    ⇒ %d: domain, %n: username

Config Mailbox auto-create some basic mailboxes to allow delete email from roundcube

Fix error: Server Error: UID COPY: Mailbox doesn't exist: Trash when user delete email from roundcube website

  1. Step1: Copy doc/example-config/conf.d/10-mail.conf and doc/example-config/conf.d/15-mailboxes.conf from dovecot source to config directory conf.d of dovecot
  2. Step2: Edit 15-mailboxes.conf to au-create mailboxs Drafts, Junk, Trash below(Use field auto=create):
     mailbox Drafts {
        auto=create
        special_use = \Drafts
      }
      mailbox Junk {
        auto=create
        special_use = \Junk
      }
      mailbox Trash {
        auto=create
        special_use = \Trash
      }
  3. Step3: Config include these files above in dovecot.conf:
    !include conf.d/*.conf

Integrate dovecot authenticate user with Postfixadmin

refer: http://sourceforge.net/p/postfixadmin/code/HEAD/tree/trunk/DOCUMENTS/DOVECOT.txt

  1. Step1: Create file dovecot-sql.conf
    connect = host=localhost dbname=postfix user=postfix password=postfix
    driver = mysql
    # Default password scheme - change to match your Postfixadmin setting.
    # depends on your $CONF['encrypt'] setting:
    # md5crypt  -> MD5-CRYPT
    # md5       -> PLAIN-MD5
    # cleartext -> PLAIN
    default_pass_scheme = MD5-CRYPT
     
    # Query to retrieve password. user can be used to retrieve username in other
    # formats also.
     
    password_query = SELECT username AS user,password FROM mailbox WHERE username = '%u' AND active='1'
     
    # Query to retrieve user information, note uid matches dovecot.conf AND Postfix virtual_uid_maps parameter.
    user_query = SELECT maildir, 5000 AS uid, 5000 AS gid FROM mailbox WHERE username = '%u' AND active='1'

    5000 is uid and gid of user vmail

  2. Step2: edit dovecot.conf to load userdb and passdb from dovecot-sql.conf:
    protocols = imap pop3
    auth_mechanisms = plain
    userdb { 
        driver = sql
        args = /onec/dovecot/etc/dovecot/dovecot-sql.conf 
    }
     
    passdb { 
        driver = sql
        args = /onec/dovecot/etc/dovecot/dovecot-sql.conf 
    }

Roundcube

refer: http://trac.roundcube.net/wiki

Basic about config files in roundcube:

  • config/defaults.inc.php → default configs
  • config/config.inc.php → custom configs

You copy more options from defaults.inc.php to config.inc.php for overriding the defaults

Nginx config with php-fpm

server {
    listen 123.30.173.67:80;
    server_name roundcube.tolava.com;
    root /data/www/email/roundcubemail;
 
    if ($http_host != "roundcube.tolava.com") {
        rewrite ^ http://roundcube.tolava.com$request_uri permanent;
    }
 
    index index.php index.html;
 
    location ~ ^/favicon.ico$ {
        root /data/www/email/roundcubemail/skins/default/images;
        log_not_found off;
        access_log off;
        expires max;
    }
 
    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }
 
    location ~ ^/(README|INSTALL|LICENSE|CHANGELOG|UPGRADING)$ {
        deny all;
    }
    location ~ ^/(bin|SQL)/ {
        deny all;
    }
 
    # Deny all attempts to access hidden files such as .htaccess, .htpasswd, .DS_Store (Mac).
    location ~ /\. {
        deny all;
        access_log off;
        log_not_found off;
    }
 
    location ~ \.php$ {
        try_files $uri =404;
        include fastcgi_params;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_index index.php;
    }
}

Nginx with httpd backend config

Nginx Config:

server {
    listen 123.30.173.67:80;
    server_name roundcube.tolava.com;
    root /data/www/email/roundcubemail;
 
    if ($http_host != "roundcube.tolava.com") {
        rewrite ^ http://roundcube.tolava.com$request_uri permanent;
    }
 
    index index.php index.html;
 
    location ~ ^/favicon.ico$ {
        root /data/www/email/roundcubemail/skins/default/images;
        log_not_found off;
        access_log off;
        expires max;
    }
 
    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }
 
    location ~ ^/(README|INSTALL|LICENSE|CHANGELOG|UPGRADING)$ {
        deny all;
    }
    location ~ ^/(bin|SQL)/ {
        deny all;
    }
 
    # Deny all attempts to access hidden files such as .htaccess, .htpasswd, .DS_Store (Mac).
    location ~ /\. {
        deny all;
        access_log off;
        log_not_found off;
    }
 
    location ~ \.php$ {
        proxy_pass         http://10.20.50.69:8080/;
        proxy_redirect     off;
 
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        client_max_body_size       10m;
        client_body_buffer_size    128k;
 
        proxy_connect_timeout      90;
        proxy_send_timeout         90;
        proxy_temp_file_write_size 64k;
    }
    location ~* ^.+.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf)$    
    {
        root   /data/www/email/roundcubemail;
    }
}

httpd backend config:

<VirtualHost 10.20.50.69:8080>
    ServerName roundcube.tolava.com
    DocumentRoot "/data/www/email/roundcubemail"
    DirectoryIndex index.php index.html index.htm index.php5
    AddDefaultCharset utf-8
    ErrorLog /onec/logs/roundcubemail_error_log
    CustomLog /onec/logs/roundcubemail_access.log common
    <Directory /data/www/email/roundcubemail>
        Options FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

Install roundcubemail

  1. Step1: Create database roundcubemail
    CREATE DATABASE roundcubemail;
  2. Step2: Create new user to grant all privilleges to database roundcubemail:
    GRANT ALL privileges ON roundcubemail.* TO 'roundcubemail'@'localhost'  IDENTIFIED BY 'xxxxx';
    FLUSH PRIVILEGES;
  3. Step3: Change roundcubemail config connect to db:
    cp config.inc.php.sample config.inc.php

    And Edit config.inc.php

    $config['db_dsnw'] = 'mysql://roundcubemail:xxxx@localhost/roundcubemail';

    ⇒ you must change xxxx to password which created in step3 above

  4. Step4: add variable below to allow install roundcube:
    $config['enable_installer'] = true;
  5. Step5: update path to use mysql and pdo_mysql in php.ini:
    ..........................
    mysql.default_socket = /onec/mysql/tmp/mysql.sock
    ..........................
    pdo_mysql.default_socket = /onec/mysql/tmp/mysql.sock
    ..........................
  6. Step6: go to http://yourdomain/installer → install roundcube
  7. Step7: click initial database if connect DB OK
  8. Step8: remove directory installer in web directory of roundcube:
    rm -rf installer/

Config Integrate with dovecot via IMAP(143) protocol(Store Sent data, Receiving, Authenticate)

In default config of roundcube config/defaults.inc.php

$config['default_host'] = 'localhost';
@include "/etc/psa-webmail/roundcube/mailhosts.php";
 
// TCP port used for IMAP connections
$config['default_port'] = 143;
 
// IMAP AUTH type (DIGEST-MD5, CRAM-MD5, LOGIN, PLAIN or null to use
// best server supported one)
$config['imap_auth_type'] = null;

⇒ roundcube will authenticate user via dovecot

Config Integrate with postfix

Default Config:

$config['smtp_server'] = '127.0.0.1';//You must change to IP local to fix error can't send email with roundcube
$config['smtp_port'] = 25;
$config['smtp_user'] = '';
$config['smtp_pass'] = '';

Allow Roundcube user change your password in postfix database

  1. Step1: Enable the password plugin by adding this line to config/config.inc.php:
    $rcmail_config['plugins'] = array('password');
  2. Step2: Configure the password plugin and make sure you alter the settings accordingly in plugins/password/config.inc.php to update database postfix
    $config['password_driver'] = 'sql';
    $config['password_db_dsn'] = 'mysql://user:pass@localhost/postfix';
    $config['password_query'] = 'UPDATE mailbox SET password=%c WHERE username=%u';

Fix roundcube error

Fix error not redirect to mail after login success by update

$OUTPUT->redirect($redir, 0, true);

to

//$OUTPUT->redirect($redir, 0, true);
header('Location: /?_task=mail');

Config Mail Server Security and Mail Exchange

Config Mail Server Security

Config postfix limit IP for connecting to postfix SMTP Server by edit main.cf:

mynetworks = 127.0.0.0/8,10.20.50.69/32,10.20.50.69/32,10.20.50.71/32,123.31.47.39/32

Config Mail Exchange for new domain

Add new MX record for new domain and point it to SMTP Server

Merge Email

Below are steps form merge mail server from database postfix1 to database postfix2:

Backup database postfix1 prepare for merge:

  1. Backup postfix
    mysqldump  -hlocalhost -uroot -p --add-drop-table --quote-names --opt --routines --extended-insert=FALSE --complete-insert --add-locks --quick --compress postfix > postfix.sql
  2. Backup mail config data:
    cat postfix.sql | grep "INSERT INTO \`domain\`" > domain.sql
    cat postfix.sql | grep "INSERT INTO \`alias\`" > alias.sql
    cat postfix.sql | grep "INSERT INTO \`mailbox\`" > mailbox.sql
  3. Remove line Insert All from domain.sql
    INSERT INTO `domain` (`domain`, `description`, `aliases`, `mailboxes`, `maxquota`, `quota`, `transport`, `backupmx`, `created`, `modified`, `active`) VALUES ('ALL','',0,0,0,0,'',0,'0000-00-00 00:00:00','0000-00-00 00:00:00',1);

Email Spam

SPF(Sender Policy Framework) is a method of fighting spam: http://www.openspf.org/FAQ/What_is_SPF

Email sent was filtered(Have not sent to spam or Inbox)

How to Fix error below:

Fix Email sent to google were marked spam

View email sent from [email protected] with header below1):

Received-SPF: neutral (google.com: 123.30.173.67 is neither permitted nor denied by best guess record for domain of [email protected]) client-ip=123.30.173.67;
Authentication-Results: mx.google.com;
       spf=neutral (google.com: 123.30.173.67 is neither permitted nor denied by best guess record for domain of [email protected]) [email protected]

⇒ What this is saying is that when they check the IP address we’re sending from, they get back neither a “confirm” nor a “deny” message. That is, there is no SPF record at all.

Fix:

  1. Step1: Create SPF record for your domain on DNS supplier: https://www.mail-tester.com/spf/godaddy. For example:
    v=spf1 a mx include:123.30.173.67 ~all

    Or:

    v=spf1 a mx include:tolava.com ~all
  2. Step2: Check SPF record which you have configured: http://www.kitterman.com/spf/validate.html

Filter Email Spam

1)
To see this, simply send email to a Gmail account, and then select ‘See Original’ in the little menu at the top of the email message. You get to see all the headers for the email.
linux/web-mail-system.txt · Last modified: 2022/10/29 16:15 by 127.0.0.1