使ってみてくれるとありがたいけど、明日サービス中止から全メール流出まで何が起こるか分かりません。
作ろうと思った経緯とこのサービスの使い道
迷惑メールがうざい。
インターネットができた当初の牧歌的な時代ならともかく、私のアドレスを知っているだけで世界中の誰もが私にメッセージを送れる、電子メールというシステムが時代遅れなのだと思う。TwitterのDMやLINEなどたいていのコミュニケーションツールは受信を許可した相手しかメッセージは送れないし、後から許可を取り消すことができる。とはいえ、これらの新しいコミュニケーションツールは公開されたプロトコルではなく、どこかの会社のサービスなので、限られた人とのやり取りには使えても、ウェブサービスに登録するときなどはあと10年は電子メールを使い続ける必要がありそう。
Gmailでは、(元のアドレス)+(任意の文字列)@gmail.com
という形式でメールアドレスを増やせるけれど、元のアドレスがバレバレだし、+
が登録できないサイトも多い。元のアドレスと無関係なエイリアスを発行できるサービスは発行できる個数が少なく、登録するサイトごとに別のメールアドレスを使うということはできない。
Gmail のエイリアスは個人情報漏洩対策にならないからやめとけっていう話 | WWW WATCH
Gmailで何とかしようと思うと、登録するサービスごとに元のアドレスに付加する文字列を決めて、それらのアドレス宛の場合は通し、それ以外のアドレスに届いたメールを捨てる必要があって、ちょっと面倒。
ということで、ワンクリックで大量にエイリアスを発行できるサービスがあれば便利なのではと思って、作ってみた。
技術的な詳細
postfix(SMTPサーバー)とdovecot(POPサーバー)にデータベースからアカウントを引く機能があったので、それを使っている。あとはPlay Frameworkによるフロントエンドがそのデータベースを弄っているだけ。
postfix
main.cf
queue_directory = /var/spool/postfix command_directory = /usr/sbin daemon_directory = /usr/libexec/postfix data_directory = /var/lib/postfix mail_owner = postfix myhostname = boids.info mydomain = boids.info inet_interfaces = all inet_protocols = all mydestination = home_mailbox = Maildir/ debug_peer_level = 2 debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5 virtual_mailbox_domains = boids.info virtual_mailbox_base = /var/mail/vhosts virtual_mailbox_maps = mysql:/etc/postfix/mailbox_map.cf virtual_minimum_uid = 10000 virtual_uid_maps = static:10000 virtual_gid_maps = static:10000 virtual_mailbox_limit_maps = static:100000000 virtual_mailbox_limit_inbox = no virtual_mailbox_limit_override = yes virtual_maildir_extended = yes virtual_overquota_bounce = yes virtual_maildir_limit_message = "User over quota, try again" virtual_trash_count = yes virtual_trash_name = ".Trash" message_size_limit = 10000000
mailbox_map.cf
user = postfix password = xxxxxxxxxxxxxxxx dbname = boids query = SELECT concat(mailbox, '/') FROM user INNER JOIN address ON user.id=address.user WHERE concat(address.address, '@boids.info')='%s' and address.active!=0
%s
にメールアドレスが入った状態でデータベースを引いて、メールを格納するディレクトリが出てくれば良い。Maildirでメールボックスのサイズを制限するにはパッチを当てる必要があって、ちょっと面倒だった。
[CentOS6] Postfixによるメールサーバ構築 その1 (PostfixをSRPMからリビルド) | CentOSサーバ構築術 文具堂
dovecot
dovecot.conf
protocols = pop3 disable_plaintext_auth = no ssl = yes ssl_cert = </etc/ssl/certs/boids.info.pem ssl_key = </etc/ssl/certs/boids.info.pem mail_location = maildir:%h auth_mechanisms = plain apop cram-md5 passdb { driver = sql args = /etc/dovecot/sql.conf.ext } userdb { driver = prefetch }
sql.conf.ext
driver = mysql connect = host=localhost dbname=boids user=dovecot password=xxxxxxxxxxxxxxxx password_query = SELECT \ concat('{PLAIN}', pop_password) as password, \ concat('/var/spool/mail/vhosts/', mailbox) as userdb_home, \ 'vuser' as userdb_uid, \ 'vuser' as userdb_gid \ FROM user WHERE pop_id = '%u' and active!=0
%u
にユーザー名が入った状態でデータベースを引いて、password, home, uid, gidが出てくれば良い。userdbでdriver = prefetch
とするとパスワードとユーザー情報の問い合わせがまとめられて1回になるらしい。その場合、home, uid, gidにuserdb_を付ける必要がある。嵌まった。
金
サーバーもドメインも他と一緒にしないで、別に買った。金額は全部税込み。
サーバー 11,664円/年
+初期費用が1,620円。さくらのVPS 1G。1年分まとめて払えばちょっと安くなるけど、1年も続けるか分からないので、月払いにしている。
ドメイン 1,080円/年
VALUE DOMAIN、上位レジストラはKeySystems、.info。
証明書 1,300円/年
どうせなので、HTTPSにして、POPもTLSを使えるようにした。SSLストアでRapidSSLを買った。
ロゴの後ろの鳥の写真 0円
pixabayというサイトで探した。ありがとうございます。shutterstockの有料の画像が広告として出てくるので注意。
まとめ
Gmailにこの機能が付いてくれ(人∀・)タノム
追記
http://b.hatena.ne.jp/enkunkun/20141230#bookmark-237680291
なるほど……。
同じサービスがすでにあると教えてもらった(´・ω・`) POPでの受信こそできないけどアプリがあるから困らなそうだし、メールの送信もできる。
追記2
自分ですら使わなかったので閉鎖した。本当はメインのメールアドレスとして使いたかったけど、も数年間維持できるか分からないし、そうなると捨てアドくらいにしか使えない。