読者です 読者をやめる 読者になる 読者になる

ほんとの手

主に開発や仕事のメモクリップ

Postfix で独自ドメインを Gmail に virtual_alias 転送できるようにするまで

動機

格安で拡張メールアドレス (example+hoge@syque.org の +hoge にあたる部分を無視する) を使えるように、かつメールを Gmail に集約させる方法がないかと考えてのもの。

お金があるなら Google Apps for Work を 月 500 円で契約するか、別に拡張アドレス対応してなくても良いならさくらのメールボックス(月 85 円程度)を契約するのがオススメ。

概要

  • 格安の VPS を契約する
  • Postfix を入れて、virtual_alias 設定でメールを転送できるようにする
  • (Optional) Gmail 側でフィルタ設定、メール送信設定(エイリアス)を行う

詳細

格安の VPS を契約する

日本国内だと DTI が月額 480 円(税込 504 円)と最安。海外まで見ると CloudAtCost が買い切り $35 からがあったりする。自分は後者にした。(ちょうど 90% セールをやっていたのに当たったのもあるので)

CloudAtCost

スペックは一番下で十分。

OS のセットアップについては割愛。自分は好みで Ubuntu 14.04 LTS 64-bit。

Postfix を入れて、virtual_alias 設定でメールを転送できるようにする

apt-get で postfix いれる。

$ sudo apt-get install postfix

次に virtual_alias でメールを転送できるようにする設定を main.cf に入れる。 細かい説明は面倒なので以下の patch ファイルを当てて。 多分だけど mydomain, virtual_mailbox_domainsvirtual_alias_maps の設定があれば十分だと思う。(今回は受信の転送しかしないので)

--- main.cf     2016-07-30 06:03:08.761677988 -0400
+++ main.cf.dti 2016-07-30 06:06:34.153676029 -0400
@@ -5,9 +5,12 @@
 # line of that file to be used as the name.  The Debian default
 # is /etc/mailname.
 #myorigin = /etc/mailname
+mydomain = xxxxxxxx.mydomainname.com
+myorigin = $mydomain
 
 smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
 biff = no
+mail_name = unknown
 
 # appending .domain is the MUA's job.
 append_dot_mydomain = no
@@ -28,13 +31,26 @@
 # information on enabling SSL in the smtp client.
 
 smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
-myhostname = ubuntu
+myhostname = mail.$mydomain
 alias_maps = hash:/etc/aliases
 alias_database = hash:/etc/aliases
-myorigin = /etc/mailname
-mydestination = xxxxxxxx.mydomainname.com, ubuntu, localhost.localdomain, localhost
+# mydestination = localdomain, localhost, localhost.localdomain, localhost
+# mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
+mydestination = localhost
 relayhost = 
 mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
+mailbox_command = procmail -a "$EXTENSION"
 mailbox_size_limit = 0
+message_size_limit = 52428800
+
 recipient_delimiter = +
 inet_interfaces = all
+
+virtual_mailbox_domains = $myhostname, localhost.$mydomain, localhost, $mydomain
+virtual_mailbox_maps = hash:/etc/postfix/virtual-mailbox
+virtual_alias_maps = hash:/etc/aliases
+virtual_uid_maps = static:10000
+virtual_gid_maps = static:10000
+virtual_mailbox_base = /var/spool/virtual
+virtual_mailbox_limit = 52428800

上記を patch したら virtual-mailboxpostmap しておく。(これも多分不要)

/etc/aliases に 転送元のメールアカウント -> 転送先のメールアドレス の記載をする。

# See man 5 aliases for format
postmaster:      root
xxxxxxxx-example: xxxxxxxx-example@gmail.com

終わったら newaliases を実行。

これでメールを受信できるようになっているはず。10 Minutes mail など適当な外部アカウントからメール送信テストを行う。 もちろんドメインDNS 設定で VPS にメールが飛ぶように事前に設定しておくこと。

また 10 Minutes mail とかだと高確率で迷惑メールに振り分けられるのでそっちに入っていないか確かめること。

(Optional) Gmail 側でフィルタ設定、メール送信設定(エイリアス)を行う

Gmail 側で独自ドメインからのメールアドレスかどうかわかるように、独自ドメイン宛だったら〜などの条件でフィルタを作成しておくと見分けやすい。

また独自ドメインから返信できるように、送信設定で独自ドメインのメールアドレスもエイリアスで登録しておく。相手のサーバからエイリアスで怒られるようだったら...その時は素直に gmail.com のアドレスでやりとりするか、別の方法を考える。

未検証の事項

  • virtual_alias ではなく alias でやろうとするとデフォルトでは UNIX ユーザアカウントをメールアカウントとして使おうとするので、メールアカウントが存在せずメールの転送に失敗する?ので virtual_alias にしている

参考

Sun Jul 31 2016 14:38:52 GMT+0900 (JST)
Postfix の拡張メールアドレス - @tmtms のメモ

Sun Jul 31 2016 14:41:17 GMT+0900 (JST)
メールサーバの構築_Postfixの設定 | VPS(仮想専用サーバー)/クラウドなら安心と信頼のWebARENA(ウェブアリーナ) | VPS/クラウドサポート

Sun Jul 31 2016 14:41:48 GMT+0900 (JST)
メールサーバの設定(バーチャルメールボックス編):tech.ckme.co.jp

Sun Jul 31 2016 14:42:15 GMT+0900 (JST)
Postfix インストールメモ(Postfixコマンド) - heihooのITメモ

Sun Jul 31 2016 14:42:32 GMT+0900 (JST)
CentOS Postfixでバーチャルドメイン

Sun Jul 31 2016 14:43:10 GMT+0900 (JST)
CentOS6 サーバー構築/Postfix/Alias - a羅針盤

Sun Jul 31 2016 14:43:21 GMT+0900 (JST)
Postfix 設定パラメータ

Sun Jul 31 2016 14:43:50 GMT+0900 (JST)
Postfix チュートリアル - 基本的な設定

Sun Jul 31 2016 14:44:07 GMT+0900 (JST)
debian - Confused about alias_maps and virtual_alias_maps - Server Fault

Sun Jul 31 2016 14:44:19 GMT+0900 (JST)
Postfix: How do I Make Email Aliases Work? - Server Fault