Coder Social home page Coder Social logo

vmail's Introduction

vmail

vmail is a virtual mail server helper and rss to maildir feeder.

Prepare

# Requires a recent Debian based system
$ sudo apt-get install postfix dovecot-core dovecot-imapd dovecot-sqlite sqlite3

Install

Install and initialize vmail

$ go get github.com/mb0/vmail
$ sudo ln -s $GOPATH/bin/vmail /usr/bin

Setup the vmail user:

$ sudo bash
# useradd vmail
# mkdir /home/vmail
# chown vmail: /home/vmail
# chsh -s /bin/false vmail
# sudo -u vmail vmail setup

Setup postfix config files:

# vmail config postfix_domain  > /etc/postfix/vmail_mailbox_domains.cf
# vmail config postfix_mailbox > /etc/postfix/vmail_mailbox_maps.cf
# vmail config postfix_alias   > /etc/postfix/vmail_alias_maps.cf

Configure postfix:

# postconf -e 'home_mailbox = Maildir/'
# postconf -e 'virtual_mailbox_domains = sqlite:/etc/postfix/vmail_mailbox_domains.cf'
# postconf -e 'virtual_mailbox_maps = sqlite:/etc/postfix/vmail_mailbox_maps.cf'
# postconf -e 'virtual_alias_maps = sqlite:/etc/postfix/vmail_alias_maps.cf'
postconf -e 'virtual_uid_maps = static:the vmail uid'
postconf -e 'virtual_gid_maps = static:the vmail gid'
# postconf -e 'virtual_mailbox_base = /home/vmail'

Setup dovecot config files:

# vmail config dovecot_auth > /etc/dovecot/conf.d/auth-vmail.conf.ext
# vmail config dovecot_sql  > /etc/dovecot/vmail-sql.conf.ext

Configure dovecot:

# sed --in-place 's/^!include/#!include/' /etc/dovecot/conf.d/10-auth.conf
# echo '!include auth-vmail.conf.ext' >> /etc/dovecot/conf.d/10-auth.conf
# sed --in-place 's/^mail_location/#mail_location/' /etc/dovecot/conf.d/10-mail.conf

Configure sasl:

# vim /etc/dovecot/conf.d/10-master.conf
uncomment the 'Postfix smtp-auth' block and set mode to 0660 and user, group to postfix
# postconf -e 'smtpd_sasl_type = dovecot'
# postconf -e 'smtpd_sasl_path = private/auth'
# postconf -e 'smtpd_sasl_local_domain ='
# postconf -e 'smtpd_sasl_security_options = noanonymous'
# postconf -e 'broken_sasl_auth_clients = no'
# postconf -e 'smtpd_sasl_auth_enable = yes'
# postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination'

Create certificate:

# touch vmail.key
# chmod 600 vmail.key
# openssl genrsa 1024 > vmail.key
# openssl req -new -key vmail.key -x509 -days 3650 -out vmail.crt
# openssl req -new -x509 -extensions v3_ca -keyout vmail.key.pem -out vmail.crt.pem -days 3650
# mv vmail.key /etc/ssl/private/
# mv vmail.crt /etc/ssl/certs/
# mv vmail.key.pem /etc/ssl/private/
# mv vmail.crt.pem /etc/ssl/certs/

Configure tls:

# postconf -e 'smtp_tls_security_level = may'
# postconf -e 'smtpd_tls_security_level = may'
# postconf -e 'smtp_tls_note_starttls_offer = yes'
# postconf -e 'smtpd_tls_key_file = /etc/ssl/private/vmail.key'
# postconf -e 'smtpd_tls_cert_file = /etc/ssl/certs/vmail.crt'
# postconf -e 'smtpd_tls_CAfile = /etc/ssl/certs/vmail.crt.pem'
# postconf -e 'smtpd_tls_loglevel = 1'
# postconf -e 'smtpd_tls_received_header = yes'
# vim /etc/dovecot/conf.d/10-ssl.conf
ssl_cert = </etc/ssl/certs/vmail.crt
ssl_key = </etc/ssl/private/vmail.key

Configure feeds:

# vim /etc/dovecot/conf.d/10-mail.conf
namespace inbox {
  type = private
  separator = /
  inbox = yes
}
namespace {
  type = public
  separator = /
  prefix = Feeds/
  location = maildir:/home/vmail/feeds:INDEX=/home/vmail/%u/feeds
  subscriptions = no
}
mail_plugins = acl
# vim /etc/dovecot/conf.d/20-imap.conf
protocol imap {
  mail_plugins = $mail_plugins imap_acl
}
# vim /etc/dovecot/conf.d/90-acl.conf
plugin {
  acl = vfile
}

remember to open your firewall and restart the services. you might also change vim /etc/dovecot/conf.d/15-lda.conf lda_mailbox_autocreate and lda_mailbox_autosubscribe

Usage

# vmail create user@host
# vmail alias alias@other user@host
# vmail alias client@host user@extern
# vmail list host
# vmail remove user@host
# vmail feed xkcd http://xkcd.com/rss.xml
# vmail checkfeed '*'

vmail is BSD licensed, Copyright (c) 2013 Martin Schnabel

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.