Ubuntu Server で構築した開発環境からテストメールを Postfix を使って Gmail 経由で送信できるようにする方法

制作の度に必要なものを入れたり、いろいろと調整を加えてきた環境のため何が既に入っているかなどが分かりませんが、現状の私の環境で以下の作業をしたところ Gmail でメールが送信できるようになったので作業ログとして残しておきます。無駄なものが入っている可能性もありますので、もし無駄な作業がありましたらご指摘頂けると幸いです。

今回は以下のページを参考にしました。

インストールする

mail コマンドを使えるようにする

1
sudo aptitude install mailutils

Postfix をインストールする

1
sudo apt-get install postfix

Postfix を設定する

以下のファイルを新規作成します。

1
sudo vi /usr/share/postfix/main.cf

/usr/share/postfix/main.cf.dist にサンプルがありますが、必要な部分だけをまとめると以下のような感じのようです。それぞれ適宜変更を加えます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mail_owner = postfix
myhostname = mail.ubuntu
mydomain = ubuntu
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost
mynetworks = 192.168.0.0/24, 127.0.0.0/8
home_mailbox = Maildir/
#sendmail_path =
#newaliases_path =
#mailq_path =
#setgid_group =
#html_directory =
#manpage_directory =
#sample_directory =
#readme_directory =

Gmail で送信できるように設定する

/etc/postfix/main.cf を設定する

/etc/postfix/main.cf を編集します。

1
sudo vi /etc/postfix/main.cf

relayhost に Gmail のサーバーを設定します。

34
relayhost = [smtp.gmail.com]:587

末尾に以下の記述をします。

1
2
3
4
5
6
7
8
9
#sasl setting
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_mechanism_filter = plain
 
#tls setting
smtp_use_tls = yes

Gmail アカウントの情報を入れる

/etc/postfix/sasl_passwd を作成します。

1
sudo vi /etc/postfix/sasl_passwd

以下のように Gmail のアカウント情報を入れます。

1
[smtp.gmail.com]:587 example@gmail.com:password

メールアドレスとパスワードを自分のものを入れます。Google Apps のメールアドレスにも対応しているようです。また、平文でメールアドレスとパスワードが保存されているので所有者と権限を適切なものに変更します。

1
2
sudo chown root:root /etc/postfix/sasl_passwd
sudo chmod 600 /etc/postfix/sasl_passwd

その後 postmap を実行します。

1
sudo postmap /etc/postfix/sasl_passwd

すると以下のようなエラーが私の環境では出ました。これは 50 行目の属性名の後に謎の文字が入っているとのことで、それも??だそうで何事かと思いましたが、コピー&ペーストの時に入った謎のスペースでした。削除したら postmap を問題なく実行することができました。

1
postmap: fatal: /etc/postfix/main.cf, line 50: missing '=' after attribute name: "??"

postmap を実行したら postfix を再起動します。

1
sudo /etc/init.d/postfix restart

メールを送信してみる

テストの方法はいくつかありますが、手っ取り早いのが以下の方法になります。

1
mail demo@example.com

もしくは以下となります。

1
echo test|mail demo@example.com

メールが送信できない

telnet でメールサーバーをチェック

そもそもメールサーバーに接続できているかを確認します。特に仮想で開発環境を構築している場合はネットワーク関連が怪しいこともありあすので以下のように telnet を使って接続を確認します。

1
telnet mail.gmail.com

私の場合は物理的な要因

メールが送信できないと思ってたら LAN ケーブル抜けたたんですが、一応無線 LAN で接続していた。しかし、なんとなく無線 LAN を切りにして LAN ケーブルで接続したりして、ネットワークの再設定をして仮想 Ubuntu Server を再起動していたら40通くらいメール送信されてました。つまり以上の設定で問題なかったということですね。

コメント

コメントは受け付けていません。