それなりの規模のシステムではなく、シェルスクリプトなど単純な小さな作業をさせ、その結果を報告させたいときには、メールを利用することが多い。
対象となるサーバーが多い場合、配布や書き換えが面倒になるから、設定ファイルを読み込む方式にしておくと幾分ラクであるけれど、そもそも設定も面倒だ・・ということで、それっぽいメールアドレスを作成してしまおうという姑息な手段を試すことにした。
スポンサードリンク
動機
というのも、設定ファイルを使う方法などであれば、正しくメールの送信元アドレスを指定できるが、面倒だから「root」または「root@localhost」にしてしまっている。
これが原因となって、送信元が「root@localhost」、送信先が「****@gmail.com」、送信元サーバーが「example.com」となってしまい、余計にスパム判定されやすい。。。
スパム判定されにくくなるかどうかは不明だが、同時に進行させている他のスクリプトでは、先日ホスト名を仕方なく変更したところ、その送信元のAレコードを引けないということで、スパムどころではなくて受取拒否になってしまっているようだ。やはり、それっぽい送信元にしておいたほうが良さそう。
メールサーバーの設定で、送信元を正しく書き換えるようにすれば良いという方法もあるが・・。
スクリプト例
ということで、超適当にテストしたのが以下だ。
MAILFROM="`whoami`@`hostname`" echo $MAILFROM
実行結果は以下のとおり。
$ sh t_sh_mailaddress.sh casey@hoge
ちなみに、本来であれば、FQDNを取得する「-f」オプションを付けて「hostname -f」としたかったが、利用できない(管理外の)サーバーもあるから「hostname」にしている。ただ、その場合は、hostnameが「hoge」でなく「hoge.example.com」となっていることが多いように思う。
$ sh t_sh_mailaddress.sh [email protected]
他の作者のプログラムが送ってくるメール送信元は、このどちらもあるから、おそらくこのような記述がどこかにされているのだろう。
おまけ
グローバルIPアドレスの取得
WANに直接接続された端末なら「pc.casey.jp » IPアドレスとMACアドレスを取得する」でIPアドレスが取得できる。LANに接続された端末なら次のようにしてグローバルIPアドレスを取得できる。
$ echo `wget -q -O - ipcheck.ieserver.net`
IPアドレスからホスト名を取得
取得したIPアドレスからホスト名を取得するには以下の様な方法がある。
# perl -e 'print $a=gethostbyaddr(pack("C4",split(/\./,"127.0.0.1")),2);'
# やっぱり設定ファイルのほうがいいのかなー・・?
参考文献
- グローバルIPアドレス取得方法
- ローカルLANにあるLinuxからシェルコマンドでグローバルIPを調べる方法
- グローバルIPアドレスの調べ方 – 乙女系プロレスリング
コメント