curlはメールを送るのにも使える

curlはかなり多機能で実はメールを送ることも出来る。

helpからメールに関すると思われるオプションを探すとぱっと見ただけでもこんなにある。

1
2
3
4
5
6
7
8
$ curl --help | grep -i -e mail -e smtp
--login-options OPTIONS Server login options (IMAP, POP3, SMTP)
--mail-from FROM Mail from this address (SMTP)
--mail-rcpt TO Mail to this/these addresses (SMTP)
--mail-auth AUTH Originator address of the original email (SMTP)
--oauth2-bearer TOKEN OAuth 2 Bearer Token (IMAP, POP3, SMTP)
--ssl Try SSL/TLS (FTP, IMAP, POP3, SMTP)
--ssl-reqd Require SSL/TLS (FTP, IMAP, POP3, SMTP)

なお本文は -T オプションで指定する模様。

1
-T, --upload-file FILE  Transfer FILE to destination

シンプルにメールを送る例

1
2
echo -e "From: yourname@example.com\nTo: receiver@example.net\nSubject: test\n\ntest" |
curl --mail-from yourname@example.com --mail-rcpt receiver@example.net -T - smtp://(対向のMX):25

SMTP Authする場合

1
2
echo -e "From: yourname@example.com\nTo: receiver@example.net\nSubject: test\n\ntest" |
curl --user "youraccount:yourpassword" --mail-from yourname@example.com --mail-rcpt receiver@example.net -T - smtp://smtp.your-smtp.server:25

さらにSMTPSを使う場合

1
2
echo -e "From: yourname@example.com\nTo: receiver@example.net\nSubject: test\n\ntest" |
curl --user "youraccount:yourpassword" --mail-from yourname@example.com --mail-rcpt receiver@example.net -T - smtps://smtp.your-smtp.server:465

通信の詳細を確認したい場合

1
2
3
4
echo -e "From: yourname@example.com\nTo: receiver@example.net\nSubject: test\n\ntest" |
curl --user "youraccount:yourpassword" --mail-from yourname@example.com --mail-rcpt receiver@example.net \
--verbose \
-T - smtps://smtp.your-smtp.server:465

サーバ証明書の検証をしつつテスト環境のサーバに通信を向けたい場合

1
2
3
4
5
echo -e "From: yourname@example.com\nTo: receiver@example.net\nSubject: test\n\ntest" |
curl --user "youraccount:yourpassword" --mail-from yourname@example.com --mail-rcpt receiver@example.net \
--verbose \
-- resolve smtp.your-smtp.server:465:$(dig +short smtp-test.your-smtp.server) \
-T - smtps://smtp.your-smtp.server:465

もちろん同じことはpythonやrubyなどのスクリプトで出来る。
しかし勝手知ったるcurlのお作法そのままでメール送信が出来るのはとても便利なのだ。