DebianにおけるsSMTP導入方法とGmailを利用したメール送信方法のまとめ

sSMTPは、SMTPプロトコルのみに対応した、非常に軽量・シンプルなMTAである。
メール送信機能を利用したいが、Sendmail等の複雑なMTAは使用したくない時などに便利である。
この記事では、sSMTPの導入方法と、Gmailを利用したメールの送信方法を簡単にまとめる。

環境

  • Debian Wheezy 7.7 (x86_64, kernel:2.6.32-042stab092.2)
  • ssmtp (2.64-7)
  • heirloom-mailx (12.5-2)
  • Gmail (2014-12-15時点)
  • exim4 (4.80-7+deb7u1)

設定手順

設定は、以下の手順でおこなう。

  1. 既存のMTAの削除
  2. sSMTPのインストール
  3. 設定ファイルの記述
  4. 設定ファイルのファイル属性の変更
  5. ログインユーザのmailグループへの追加
既存のMTAの削除

(MTAがインストールされていない場合は、このセクションは実行しなくても良い。)


sSMTPは、他のMTAと同時に使用すると、競合することがある。そのため、既存のMTAがインストールされている場合は、該当するプログラムをsSMTP導入前に削除しておく。
今回使用した環境ではexim4がインストールされていたため、あらかじめ削除する。
具体的には、端末上で以下のコマンドを入力して、サービスの停止・exim4関連のパッケージの削除をおこなえば良い。


# service exim4 stop
# aptitude remove '~nexim4'

sSMTPのインストール

次に、sSMTPのインストールをおこなう。
Debian Wheezyでは、公式リポジトリにsSMTPのパッケージが用意されている。
ここでは導入を簡単にするため、このsSMTPパッケージを利用することにする。


端末上で以下のコマンドを入力し、sSMTPをインストールする。


# aptitude install ssmtp
上記のコマンドを実行後、"aptitude show ssmtp"や、"whereis ssmtp"等でsSMTPがインストールされていることを確認しておく。

設定ファイルの記述

sSMTPの設定ファイルは、/etc/ssmtp/ssmtp.confである。
このセクションでは、上記のファイルを編集・記述し、sSMTPが動作するように設定をおこなう。


sSMTPの動作に最低限必要な設定項目は、以下の6項目である。


Mailhub : "Mailhub=smtp.gmail.com:587"を指定
UseTLS : "UseTLS=Yes"を指定
UseSTARTTLS : "UseSTARTTLS=Yes"を指定
AuthUser : "AuthUser=hogehoge"、GmailのユーザIDを指定
AuthPass : "AuthPass=piyopiyo"、Gmailのパスワードを平文で指定
AuthMethod : "AuthMethod=LOGIN"を指定
上記6つの項目を、/etc/ssmtp/ssmtp.confに記述すれば良い。


----------※2015/03/16(Mon)追記分----------
MTAもしくはユーザ側でメールのヘッダFrom(注:エンベロープFromではない)を書換えたい場合は、

FromLineOverride=yes
を/etc/ssmtp/ssmtp.confに記述する。
----------以上2015/03/16(Mon)追記分----------



以下、設定後のssmtp.confと、標準で用意されているssmtp.confとの差分である。

# diff /etc/ssmtp/ssmtp.conf /etc/ssmtp/ssmtp.conf.original
10c10
< mailhub=smtp.gmail.com:587
---
> mailhub=mail
22,28d21
< 
< UseTLS=Yes
< UseSTARTTLS=Yes
< 
< AuthUser=your_gmail_id
< AuthPass=your_gmail_password
< AuthMethod=LOGIN

以上で、設定ファイルの記述は完了である。
(より詳細な設定をおこないたい場合は、man ssmtp.confを参考にすると良い。)

設定ファイルのファイル属性の変更

次に、sSMTPが設定ファイルにアクセスできるようにするため、/etc/ssmtp/ssmtp.confの所有グループを"mail"に変更する。
端末上で、以下のコマンドを入力して、所有グループの変更をおこなう。


# chown root:mail /etc/ssmtp/ssmtp.conf

また、設定ファイル内には、ユーザIDとパスワードを平文で記述している。そのため、パーミッションを変更して、設定ファイルにアクセスできるユーザを限定しておく。


# chmod 640 /etc/ssmtp/ssmtp.conf

ログインユーザのmailグループへの追加

sSMTPを通じてメールを送信する場合、MUAを使用するユーザが"mail"グループに所属している必要がある。
ここではログインユーザのmailグループへの追加をおこなう。


具体的には、端末上で以下のコマンドを入力する。


# gpasswd -a login_user mail

最後に、一旦ログアウトした後、再度ログインし直せば、設定は完了である。


$ logout

動作確認

動作確認は、mailコマンド(実体はHeirloom-mailx)を用いておこなう。
具体的には、端末上で以下のコマンドを入力すれば良い。


$ echo 'This is a test mail.' | mail -v -s 'sSMTP Test' hogepiyo@foo.bar.com

mailコマンドの詳細ログに、メール本文の後にSMTPの応答コード'250 OK'と'QUIT'が表示されていれば、設定は完了である。

参考にしたもの

  1. man ssmtp.conf
  2. SSMTP - ArchWiki
    https://wiki.archlinux.org/index.php/SSMTP
  3. SSMTPでメール送信しよう! - WebOS Goodies
    http://webos-goodies.jp/archives/50645131.html

雑記

  • sSMTPは、単にメールを送信するだけのシンプルな機能。
    • ちょっとした通知システムを作るのに便利そう。
    • テキストファイルを扱うスクリプトと組み合わせれば、色々と応用できそうな感じ。
  • sSMTPは、大半のLinuxでは公式リポジトリで提供されているみたい。また、BSDでも利用可能だそう。
  • sSMTPとは直接は関係ないのだけれど、cronを動かしてメールを送信する場合、環境変数に注意する必要がある。
    • cron上では$LANGの値が設定されない。そのため、全角文字が含まれるメールを送信すると、"Content-Type"が"Application/Octet-Stream"になってしまうことがある。
    • 詳しくは、こちらのサイトを参照する。(http://www.koikikukan.com/archives/2013/08/12-000300.php)
  • 現状だと、/etc/ssmtp/ssmtp.confにユーザIDとパスワードを記述してしまっている。セキュリティ上、よろしくない気がする。
    • パーミッションは640に設定しているので、いちおうは大丈夫。
    • 知識不足でよく分からないのだけれど、SMTPメールリレーという手法を使えば、/etc/ssmtp/ssmtp.confにIDとパスワードを記述しなくても良いらしい。


  • 設定方法まとめ記事を書くのが、全然上手くならない...
    • きっと、単純に練習量が足りないだけだと思う。
    • でも、まとめ記事を書くのは時間が掛かるので、あまり進んで書きたくもなかったりする。ぐぬぬ...