You might want to find a basic tutorial or two on PHP syntax. First problem I see is here:
$fields = array();
$fields{"Name"} = "Name";
$fields{"Company"} = "Company";
$fields{"Address1"} = "Address1";
$fields{"Address2"} = "Address2";
$fields{"Town"} = "Town";
$fields{"County"} = "County";
$fields{"Postcode"} = "Postcode";
$fields{"Telephone"} = "Telephone";
$fields{"Email"} = "Email";
$fields{"Message"} = "Message";
Array elements aren't accessed using curly braces (this ain't a Perl hash, y'know!) but rather square brackets (just as you used for the $_REQUEST array).
Second, why do all of your else statements open a new block rather than just using an [man]elseif[/man]? If you were to properly indent your code (why aren't you doing that either?!), you'd see that it would look quite wrong:
if ($spam > $correct)
{
print "The result you entered for 2+2 is too high, please go back and try again.";
}
else
{
if($spam < $correct)
{
print "The result you entered for 2+2 is too low, please go back and try again";
}
else
{
if($Email == '')
{
print "You have not entered an e-mail, please go back and try again";
}
else
{
if($Name == '')
{
print "You have not entered a name, please go back and try again";
}
else
{
if($Address1 == '')
{
print "You have not entered an address, please go back and try again";
}
else
{
if($Town == '')
{
print "You have not entered a town, please go back and try again";
}
else
{
if($County == '')
{
print "You have not entered a county, please go back and try again";
}
else
{
if($Postcode == '')
{
print "You have not entered a postcode please go back and try again";
}
else
{
if($Message == '')
{
print "You have not entered a message, please go back and try again";
}
else
{
$send = mail($to, $subject, $body, $headers);
if($send)
{
header("Location: http://www.example.co.uk/reelsaver_repairs_and_protects_cable_reels_thanks.html" );
}
else
{
print "We encountered an error sending your mail";
}
}