gentooでコンソールからgmailを読み書きする

webメールが便利すぎて久しくローカルなメールクライアントというものに触れていない私ですが、ふとコンソールでメールを読んでみようじゃないかと思ったりしまして。 試してみたので記録しておきます。送信は上手く行きましたが、受信はなんか、とても不満な結果に終わっております。 gentooと銘打ちましたが、だいたいどんなlinuxでも使える気がします。パッケージマネージャが違うだけですね。

送信

とりあえず簡単そうな送信から。 送信にはssmtpというツールを使います。

インストールはシンプルに

# emerge ssmtp

これだけで入る。 他のsmtpサービスが入っているとそいつが消されたりするみたい。

インストールが出来たら/etc/ssmtp/ssmtp.confにある設定ファイルを編集。

AuthUser=username@gmail.com
AuthPass=here is password
FromLineOverride=YES
mailhub=smtp.gmail.com:587
UseSTARTTLS=YES

こんな感じ。AuthUserAuthPassは環境に合せてください。

sendmailとかが生きていると問題が起こるらしいのできちんと止めてください。

で、これだけで完了。 デーモンとかいう類のものではないらしいので、なんとそのままで動きます。

$ echo 'hello world' | mail -s 'subject' mailto@example.com

こんなもんで送信出来ます。便利だ。 なんの警告もなく送られるので宛て先とかよく確認してから送ってください。

参考: How To Use Gmail Account To Relay Email From a Shell Prompt

受信

受信にはfetchmailで。 クラシックながらIMAP対応してたりして良い感じ。

# emerge fetchmail

これまたシンプルにインストール出来る。

設定ファイルは~/.fetchmailrcにあるので、編集。というより作成。

poll imap.gmail.com protocol imap
    username "username" is "localuser" here
    password "here is password"
    mda "/usr/bin/procmail"
    keep
    ssl

こんな感じ。そのままだと他のユーザからパスワードとか見えてしまうのでパーミッションに気を付けて。 is "localuser" hereの部分はPCのユーザ名を指定します。

mdaってやつでMDAを指定していますが、つまりMDAが必要ということです。既にセットアップしてあれば良いのですが、無ければ適当にインストール。

# emerge procmail

procmailの設定ファイル~/.procmailrcはとりあえず以下のような感じに。

MAILDIR = $HOME/.maildir/
DEFAULT = $MAILDIR
LOCKFILE = $MAILDIR/.lock

どうやらここで迷惑メールのフィルタリング設定も出来るそうですが、面倒なので何もしません。

もろもろ設定が終わったら、以下のコマンドでメールを受信します。

$ fetchmail

こんな感じ。 たぶん、何も届きません。未読メールしか受信しないようです。 既読のメールも受信したい場合は設定ファイルにfetchallというのを付ければ良いのですが、メールの数に要注意。ものすごい数届いたりすることになると思います。 かといってfetchlimitってオプションで制限掛けると古いものから受信しやがったりして、どうしたら良いんだろうこれ…。

まあとにかくどうにかして受信したら、mailコマンドでメールを閲覧できます。 細かい使い方がまったく分からないので解説は書かずにおかせてください。 とりあえず、mailで起動、左の方に表示されている番号を入力してエンターで閲覧。のようです。

で、まあここで困るのが、ヘッダーごと表示しちゃうからMIMEがパースされず、iso-2022-jpはそのままASCIIとして表示され…見ていられない有様になってしまいます。 もうちょいモダンなツールを使えよと、そういうことなのかもしれません…。

参考:

余談: メールの受信を通知するスクリプト

fetchmailは受信したメールをMDAのコマンドに引き渡すわけですが、この受け取る側のコマンドを自作してみました。

#!/bin/sh

IFS=$'\n'
set -- `nkf | grep -e 'From:\|Subject:' | sed -e 's/^.*: //'`
notify-send "${2:-no title}" "$1"

受け取ったメールのヘッダをなんとなく解析してnotify-sendに渡す。 これを適当なところに保存して、chmodで実行権限を付与。 そしたら、~/.fetchmailrcのmdaオプションに作ったスクリプトのファイルパスを指定。

無事設定が出来たら、fetchmailを実行すると未読メールのタイトルと送信者を通知してくれます。結構便利かも? ちょっと、というかかなり困るのは、フェッチすると既読扱いになってしまうことですかね…。せっかくのIMAPが…orz