$tmpid = $id[$i];
$in{'mailbody'} =~ s/<id>/$tmpid/ig;

だとちゃんと置換されるのに、、

$in{'mailbody'} =~ s/<id>/$id[$i]/ig;
だと、

$id[0]の値に置換されてしまいます。
これは、どのように改善すればいいのでしょうか?

まだまだ、変数に対する理解が不十分なのでその辺だとは思うのですが、
調べてもわかりませんでした。