Mac の Terminal でメール送信

Mac の Terminal からメールが送れると便利なのでやってみた。

具体的には以下のサイトに従えばいい。

MacでPostfixを使ってlocalhostからメールを送信する方法 – JoyPlotドキュメント
https://joyplot.com/documents/2016/11/07/postfix-send-mail/

迷ったのは /etc/postfix ディレクトリを見つけることだが、Finder の Go>Go to Folder で /etc/postfix を指定すればいい。

それと、$ sudo postmap /etc/postfix/authinfo が Permission Denied になってしまうことについては、postfix ディレクトリを右クリックして Get Info> Sharing & Permissions に自分を加えて、Read & Write にすればいい。

参考:
ローカル環境でメールを送信する作業中 – プログラミング学習帳
http://bayashi.hatenablog.jp/entry/2018/02/01/185348

$ sudo postfix reload で postfix が走っていないと表示されたので、以下を実行した。

$ sudo postfix start

参考:
MacでGmailのSMTPサーバーを使ってコマンドラインからメールを送れるようにする
https://rcmdnk.com/blog/2013/11/14/computer-mac/

タイトルは -s で指定する。タイトルを "This is a test."、本文を現在時刻としてメールを送るなら、以下のようにする。

$ date | mail -s "This is a test." [送信先メールアドレス]

参考:
Macのコマンドラインからメールを送信する | GATAMIX BLOG
http://www.gatamix.com/article/449733546.html

本文を abc efg、タイトルを test としたメールを送るなら以下。

$ echo "abc efg" | mail -s test [送信先メールアドレス]

(echo ではなく printf でも送れた。)

ただ、送信元を例えば myname@mydomain.com としたいのに、[Mac の自分のユーザー名]@mydomain.com と Mac のユーザー名になってしまう。authinfo ファイルでちゃんと指定しているのに・・・。さらに、送信元の名前も Mac のユーザー名になる(すなわち [Mac のユーザー名] <[Mac の自分のユーザー名]@mydomain.com> だ)。

これを解決する方法を海外のページで見つけた。

Postfix masquerading or changing outgoing SMTP email or mail address – nixCraft
https://www.cyberciti.biz/tips/howto-postfix-masquerade-change-email-mail-address.html

How to change the From header for messages sent by Postfix – 4PSA Knowledge Base – 4PSA Wiki
https://wiki.4psa.com/display/KB/How+to+change+the+From+header+for+messages+sent+by+Postfix

以下に解説しよう。

まずは送信元アドレスを変更する。

(1)/etc/postfix/main.cf に以下の行を追加し、保存。

smtp_generic_maps = hash:/etc/postfix/generic

(2)/etc/postfix/generic に以下の行を追加し、保存(すなわち、変更前と変更後のアドレスを記入する)。

[Mac のユーザー名]@mydomain.com myname@mydomain.com

(3)以下を実行。

$ postmap /etc/postfix/generic

(4)postfix を再起動。

$ sudo postfix reload

これで送信元アドレスを希望のものに変更できた。

次に送信者名を変更する。

(5)/etc/postfix/header_checks に以下を追記、保存する。

/^From:[[:space:]]+(.*)/ REPLACE From: "[送信者名]" <myname@mydomain.com>

(6)以下を実行。

$ cd /etc/postfix
$ postmap header_checks
$ postconf -e 'smtp_header_checks = regexp:/etc/postfix/header_checks'
$ sudo postfix reload

これで送信者名も変更できた。