Linuxのコマンドラインからメールする(msmtp編)

2023年8月17日

実はこれに非常に苦労した。WordpressやThunderbirdクライアントでは簡単にSMTPサーバを指定して送信できるのに、コマンドラインからの送信がこれほど大変だとは思わなかった。

mailコマンド

検索してみると、メール送信には、mailコマンドを使うとどこでも書いてあるのだが、AlmaLinux9にはインストールされていないようだ。検索で出てくるmailxとかいうパッケージも存在しない。Install mailx in Alma 9.2を見てみると、s-nailというパッケージに変更されているらしい。

dnf install s-nail

これでmailコマンドが使えるようになった。が、しかし、実際に送るにはsendmailも必要のようだ。

dnf install sendmail

しかし、実際にメール送信するには、SMTPサーバを指定するために~/.mailrcを記述しなければならない。しかし、一体どうやったらSMTPサーバとそのアカウントを指定するのか全くわからない。SMTPサーバはすぐそこ、つまりローカルホストで動作しているのに接続できないのである。

どうしても~/.mailrcの書き方がわからず、これは諦めた。sendmail及びs-nailをアンインストールしておしまいにする。

msmtpコマンド

msmtpというのがある。これは、epelにしかないらしいのでepelリポジトリをインストールしてmsmtpをインストールする。

これはデフォルトで/etc/ssl/certs/ca-certificates.crtというファイルが必要らしいのだが、どうやればインストールできるのかわからず、別のやり方にした。

How to install and configure MSMTP on OSX?にあるように、ドメインのフィンガープリントを取得すればいいらしい。

# msmtp --serverinfo --tls --tls-certcheck=off --host=mail.example.com --port=587 | egrep -o "([0-9A-Za-z]{2}:){31}[0-9A-Za-z]{2}"
2F:11:1F:1F:DB:F8:F7:74:A4:6B:A6:11:75:4B:87:C8:58:69:87:66:80:D0:7D:AB:D0:AC:6A:58:16:F9:D4:D6

そして、~/.msmtprcを以下のようにする。

defaults
auth           on
tls            on
#tls_trust_file /etc/ssl/certs/ca-certificates.crt
tls_fingerprint 2F:11:1F:1F:DB:F8:F7:74:A4:6B:A6:11:75:4B:87:C8:58:69:87:66:80:D0:7D:AB:D0:AC:6A:58:16:F9:D4:D6
logfile        ~/.msmtp.log

account        mine
host           mail.jimakudaio.com
port           587
from           admin@example.com
user           admin@example.com
password       平文パスワード

account default : mine

送信方法としては、引数として送信先が必要で、実際に送信される先はそのメアドだが、From, To, Subject, 中身は、標準入力から与えられ、それがメールのヘッダとして現れる。例えば、

test.txt

From: a@domain.com
To: b@example.com
Subject: test mail

this is sample content.
this is second line.

とし、

msmtp c@bonobono.com < test.txt

とすると、実際にメールを受け取るのはc@bonobono.comだが、受け取ったメールのToは、b@example.comと記述されたままになる。これが嫌な人は、コマンドラインの送信先と、送信テキストの送信先を合わせるようにした方が良いだろう。

未分類

Posted by ysugimura