Déjà tes 5 premières lignes tu peux remplacer par: extract(array_map('addslashes', $_POST));
Ça va extraire les valeurs du tableau dans des valeurs portant le nom de la clé.
Par exemple si tu as un tableau comme ceci $a = array('name' => 'Nairolf'); faire extract($a) revient à $name = $a'name'].
Ensuite array_map permet d'appliquer une fonction à chaque valeur d'un tableau.
Bon bien sûr tu devras modifier la valeur url ensuite, d'ailleurs je trouve étrange que tu dois rajouter http:// devant, tu demandes quoi dans ton champ url?
Et après les str_replace(" ",""), je vois pas en quoi ça dérange d'avoir des espaces dans l'objet et le nom pour un formulaire de contact. Si c'est juste pour retirer les espaces en début et fin de chaine, il y a trim().
Puis ici: if(EMail($email) == true ) tu utiles une fonction email qui retourne true ou false, donc déjà pas besoin de mettre == true. Mais ensuite même pas besoin d'utiliser une fonction pour ça car juste faire if(preg_match('#^\w.-]+@\w.-]+.[a-zA-Z]{2,6}$#',$email)) revient à la même chose vu que ça retourne 1 s'il trouve quelque chose.
Mais le pire c'est que tu utilises le filter_var pour l'url alors qu'il existe la même chose pour l'email: FILTER_VALIDATE_EMAIL
Après pour tes conditions, elles sont bien, juste le problème si le nom et le mail sont pas bon, la personne verra le message l'un à la suite de l'autre, donc pour corriger ça risque d'être ennuyeux pour corriger les infos s'il faut toujours renvoyer pour vérifier.
Enfin je sais pas si tu veux que le message soit formuler comme le gars veux, genre s'il met <h1> mon titre </h1> que le h1 soit interprété, mais si tu ne veux pas, rajoute la fonction htmlentities