in reply to system(program) or open(

Yup. A coupla points

Always test the result of a 'close' if the 'open' runs a program with the pipe character. Otherwise you have no idea if the program ran successfully.

Why hard-code you script to run on a box with one particular email system installed. There is a perfectly fine Net::SMTP module out there which is dead easy to use.

Just dive straight into your local SMTP port and acheive one-ness with the world.

(OK, well, so you might want to run on a box which is send-only for SMTP, but hey)