シェルスクリプトでSMTPメール送信を自動化してみた

シェルスクリプトでSMTPメール送信を自動化してみた

はじめに

はじめまして。昨年の8月にSendGridチームに配属された、新人の兼子です。ITやメールに関する知識を身につけるため、現在基礎から勉強中です!

メールについては、基本的な仕組みについて学ぶだけではなく、実際にTwilio SendGridからSMTPやマーケティングキャンペーン機能でメール送信することでさらに理解を深めるようにしています。そうした中で、最近学んだシェルスクリプトを使うと、SMTPでのメール送信を効率よく行えるのではないかと考えました。そこで今回は、シンプルなメールをシェルスクリプトを使って送る方法を紹介します!

SMTPで送信する

SendGridのドキュメントでは、telnetコマンドでSMTPサーバに接続し、SMTPコマンドを使ってメール送信を行う方法が紹介されています。具体的には、SMTPサーバへの接続後、認証を行い、送信者や受信者、メール本文を指定するという手順を踏みますが、この方法ではコマンド入力の度にサーバからの応答を待つ必要があり、少し手間がかかるように感じます。

そこで、シェルスクリプトを使います。シェルスクリプトとは、コマンドライン(シェル)で実行できる一連のコマンドをまとめたファイルです。このファイルに必要なコマンドを記述し実行すると、書かれているコマンドが上から順番に実行されます。そのため、一連のSMTPコマンドをシェルスクリプトとしてまとめておけば、スクリプトを1回実行するだけで上述のSMTPサーバとのやりとりを自動化することができます。毎回コマンドを手入力する必要がないため、ミスをする可能性が減り、また、作成したスクリプトを再利用することも可能です。

今回は、Ubuntu 24.04 LTS環境を使用して、SendGridからメール送信を行うシェルスクリプトを作成しました。以下がそのサンプルコードです。
なお、SendGridからメールを送信する際は、APIキーが必要になるため、先に作成しておいてください。

#!/bin/bash

host=smtp.sendgrid.net
port=587
user=YXBpa2V5
password=$(echo -n $SENDGRID_API_KEY | base64)
to=to@example.com
from=from@example.com

function mail_input {
  echo "EHLO localhost"
  sleep 1
  echo "auth login"
  echo "$user"
  echo "$pass"
  echo "mail from: $from"
  echo "rcpt to: $to"
  echo "data"
  echo "To: $to"
  echo "From: $from"
  echo "Subject: Hello, Mail Server"
  echo "Content-Type: text/plain; charset=utf-8;"
  echo ""
  echo "Hello!"
  echo "."
  echo "quit"
}

#send
mail_input | nc $host $port

このサンプルコードを実行するために、「nano」というコマンドライン上で直接編集できるテキストエディタを使用して、send_email.shという新しいシェルスクリプトを作成します。

nano send_email.sh

nano send_email.shコマンドでnanoエディタを開き、上記のサンプルコードをエディタ内に貼り付けます。このとき、変数部分($to、$SENDGRID_API_KEYのように$から始まるパラメータ)は、実際の値に置き換えます。
貼り付けたら、Ctrl + Oを押してファイルを保存し、Enterを押します。最後にCtrl + Xを押してnanoエディタを終了します。
次に、スクリプトファイルに実行権限を付与します。

chmod +x send_email.sh

以下のコマンドでスクリプトを実行します。./を使って、実行中のシェル環境でスクリプトを実行します。

./send_email.sh

正常にリクエストが受け付けられると以下のような応答が返り、メールが送信されます。

220 SG ESMTP service ready at geopod-ismtpd-16
250-smtp.sendgrid.net
250-8BITMIME
250-PIPELINING
250-SIZE 31457280
250-STARTTLS
250-AUTH PLAIN LOGIN
250 AUTH=PLAIN LOGIN
334 VXNlcm5hbWU6
334 UGFzc3dvcmQ6
235 Authentication successful
250 Sender address accepted
250 Recipient address accepted
354 Continue
250 Ok: queued as KGAhPD8FSYqTsJ8K3SXNwA
221 See you later

宛先として指定したメールアドレスに無事にメールが届きました!

メールの画像

まとめ

シェルスクリプトを使って、SMTPでのメール送信を簡単に行うことができました。
コマンドの意味を学ぶことで、SMTP送信の仕組みがより明確になり、実際の動作を把握できるようになりました。
SendGridでは、SMTPの他にもWeb APIでの送信や、マーケティングキャンペーン機能による一斉送信ができます。今後も色々な送信方法を試して、さらにメールへの理解を深めたいです。

補足

先ほどのサンプルコードで使用したパラメータの意味は以下の通りです。ぜひ目を通してみてください。

  • host:SendGridのSMTPサーバのホスト名(smtp.sendgrid.net)
  • port:ポート番号
  • user:固定文字列「apikey」をBase64エンコードした文字列(YXBpa2V5)
  • password:SendGridのAPIキーをBase64エンコードした文字列
  • to:宛先メールアドレス
  • from:送信元メールアドレス

アーカイブ

メールを成功の原動力に

開発者にもマーケターにも信頼されているメールサービスを利用して、
時間の節約、スケーラビリティ、メール配信に関する専門知識を手に入れましょう。