The reason that they can hijack your sendmail is precisly because you include the to address in the form data. Hijacking works by appending a BCC list to data on the form that you then include in your email headers - like your variable to address.
The simplest fix is just to not use any data from the form post in your email headers.
To get around that problem in your particular case, just have a var that you use in a switch structure to determine which send to address to use.
eg
switch ($_POST['who']) {
case 1:
$to = 'joe.blow@home.com';
break;
case 2:
$to = 'fred.bloggs@away.co.uk';
break;
case 3;
$to = 'sandy.shaw@the.beach.com';
break;
default:
$to = 'admin@the-end-of-his-tether.com';
}
mail($to,$headers,$body);
Other than that, you are going to have to cleanse the user data with regulkar expressions to trap any line feeds, any Bcc lists, and generally jump through hoops to stop them. Better to just NEVER use any form data in your headers.