Java には C のような #if
〜 #else
〜 #endif
がない。やるなら手作業でコメントアウトと解除を行わなければならないので少々面倒。簡単なスイッチで切り替えられると良いなぁ。
そんなときの小技。
//*/ |
まずはこんな感じ。最初の行がラインコメント形式になっているため、Block A
の部分が有効化される。この状態で最初の行のスラッシュを 1 文字だけ取り除いてみよう。
/*/ |
あら不思議! 今度は Block B
が有効になりました!!
実用性はあるかと聞かれるとあまり無いのだが、このコードでこれを見かけたら 「切り替えを意図している」 と読んでくれれば良い。
JDK 1.1 くらいの頃から使ってるけどこの記事が初出じゃないかなぁ。
〜 夏目漱石 〜
「おい、と声を掛けたが返事が無い」 は草枕だったか。峠の茶屋のだご汁はお奨め。
家のサーバから mail コマンドで外部へメールを送信しようとすると、送信者が 「user-name@localhost.localdomain」 になってしまう。いくつかのホストではこのようなドメインを SPAM とみなして弾くようだ (特に携帯は厳しい)。sendmail で外向けのメールのドメインを変更しよう。
root ユーザになって /etc/mail/sendmail.mc を開き、以下のコメントアウト (行頭の dnl) を外す。
MASQUERADE_AS(`foo.domain.com')dnl
FEATURE(masquerade_envelope)dnl
MASQUERADE_DOMAIN(localhost)dnl
MASQUERADE_DOMAIN(localhost.localdomain)dnl
MASQUERADE_DOMAIN(domain-alias.com)dnl
MASQUERADE_AS には localhost.localdomain の代わりに付けたいドメインを記述する。
FEATURE はこの変換をヘッダだけでなく MTA がやり取りするエンベローブ情報にも適用するコトを意味する。また、domain.alias.com だけでなく *.domain.alias.com に適用したい場合には masquerade_entire_domain を指定する。
MASQUERADE_DOMAIN は変換元のドメインを指定する。上記の例だと localhost, localhost.localdomain, domain-alias.com を対象としている。見ての通り複数指定が可能であり、これらのいずれかに一致したドメインは MASQUERADE_AS で指定したドメインに置き換えられる。特にエイリアス等を付けてなければ localhost と localhost.localdomain だけで良いだろう。
もう一つ覚えておく必要があるのが EXPOSED_USER。これに指定されたユーザは上記の変換が適用されない。通常はデフォルトで root や postmaster が設定されているはずだから、これらで外へのメールは制限が付いていると思って良い。
sendmail.mc を編集したら以下のコマンドで sendmail.cf を作り直し:
$ m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
sendmail を再起動しよう。
$ /etc/rc.d/init.d/sendmail restart |
再起動したら mail コマンドなどを使用して外にメールを送信してみよう。意図したドメインが付いていれば成功 (root だと EXPOSED_USER に引っかかって変換されないので注意)。ちなみに MTA から返されるエラーメールの送信者もちゃんと MAILER-DAEMON@foo.domain.com に変換されるようになる。