SMTP を使ってメールを送信
python で SMTP 認証を行ってメールを送信する - forest book を見て、gawk の /inet を介して SMTP でメールを送信するスクリプトを組んでみました。 最近の迷惑メールを防止する意味で多用されている SMTP 認証を使うものではありません。 したがって、ここではローカルのメールサーバーから自分のメールアドレスに送付してみます。
#! /usr/local/bin/gawk -f
# smtp_send.awk
# SMTP でメールを送信する
# usage: gawk -f smtp_send.awk from_address to_address file
BEGIN {
# 各引数の設定
from_address = ARGV[1];
to_address = ARGV[2];
mail_file = ARGV[3];
email_host = "localhost";
# hostname の取得
hostname_cmd = "/bin/hostname";
hostname_cmd | getline hostname;
close(hostname_cmd);
smtp_service = "/inet/tcp/0/" email_host "/25";
RS = ORS = "\r\n"
print "helo " email_host |& smtp_service;
print "==> helo " email_host;
smtp_service |& getline;
print "mail from: " from_address |& smtp_service;
print "==> mail from: " from_address;
smtp_service |& getline;
print "rcpt to: " to_address |& smtp_service;
print "==> rcpt to: " to_address;
smtp_service |& getline;
print "data" |& smtp_service;
print "==> data";
while (getline < mail_file > 0) {
print $0 |& smtp_service;
print "==> " $0;
}
close(mail_file);
print "." |& smtp_service;
print "==> .";
print "quit" |& smtp_service;
print "==> quit";
close(smtp_service);
}
プログラムは他の /inet を用いているプログラムよりも簡単に書けてしまいました。 ここでは以下のようなメール本文を書いたファイルを用意しました。
$ cat mail.txt From: hi_saito Subject: test mail This is a test mail for gawk.
実行してみます。
$ gawk -f smtp_send.awk hi_saito@yk.rim.or.jp hi_saito@yk.rim.or.jp mail.txt ==> helo localhost ==> mail from: hi_saito@yk.rim.or.jp ==> rcpt to: hi_saito@yk.rim.or.jp ==> data ==> From: hi_saito Subject: test mail This is a test mail for gawk. ==> . ==> quit

さて、本当に送付できているかを確認します。 個人的に一度 gmail に集約していますので、gmail を見てみますが、無事に送付されていることが分かります。
もっとも awk を使ってメールを出す必要がある場合があるかと言われると、滅多にないと思いますが、SMTP のやりとりを理解しておくと便利です。 telnet コマンドを使った送信方法がtelnetでメール送信に書かれていますし、gawk を使った POP3 での受信はEmail - TCP/IP Internetworking With gawk' に書かれていますので、参考にしてみてください。


