2010-06-17 3 views
0

J'essaie d'envoyer un email en utilisant PHP mail() dans un site wordpress. J'ai créé une page vide http://www.exam-vision.com/request-flip-up-instructions qui contient le code PHP ci-dessous. Quand je publie les données, isset ($ _ REQUEST ['email']) est faux, alors que je peux dans firebug que les données ont été affichées correctement. Qu'est-ce qui peut être mauvais?Envoyer un email dans wordpress

grâce

<?php 

if (isset($_REQUEST['email'])) 
//if "email" is filled out, send email 
{ 
    //send email 

    $email = $_REQUEST['email'] ; 
    $subject = $_REQUEST['subject'] ; 
    $message = $_REQUEST['message'] ; 
    mail("<someemail>", "Subject: $subject", 
    $message, "From: $email"); 
    echo "Thank you for using our mail form"; 
} 
else 
//if "email" is not filled out, display the form 
{ 
    echo "<form method='post' action='http://www.exam-vision.com/request-flip-up-instructions'> 
    Email: <input name='email' type='text' /><br /> 
    Subject: <input name='subject' type='text' /><br /> 
    Message:<br /> 
    <textarea name='message' rows='15' cols='40'> 
    </textarea><br /> 
    <input type='submit' /> 
</form>"; 
} 
?> 

Répondre

2

Au lieu d'utiliser REQUEST $, il suffit d'utiliser $ _POST depuis la page est l'affichage lui-même et assurez-vous de vérifier si it's set ou si elle est empty. Et plutôt que d'utiliser la fonction mail() de PHP, utilisez la fonction wp_mail de WordPress.

Vous pouvez également choisir d'utiliser des plugins pour ce faire. CformsII et Gravity Forms (plugin premium) ne sont que quelques exemples. J'ai utilisé CformsII et il est assez complet et riche en fonctionnalités pour un plugin gratuit.

+0

J'ai remplacé DEMANDE par POSTE, mais cela ne fonctionne toujours pas. $ _POST ['email'] est vide, alors que je peux le voir dans les données POST dans firebug ... – jul

+0

Je ne sais pas pourquoi cela ne fonctionne pas correctement, mais je vais répéter ce que hsatterwhite a dit à propos des plugins. En plus de CformsII et de Gravity Forms, il y a le Formulaire de Contact 7, Formidable, et un que j'ai développé appelé ONW Simple Contact Form. Si vous voulez un bon formulaire de contact très flexible, utilisez le formulaire de contact 7. Si vous voulez un formulaire qui fonctionne, utilisez le formulaire de contact simple ONW. :) –

+0

Supprimez la logique dans laquelle vous vérifiez si les variables $ _REQUEST ou $ _POST sont définies/vides. Essayer var_dump() sur $ _REQUESST $ _POST et si vous voyez vos données que de le construire à partir de là. wp_mail() devrait fonctionner très bien, car il est basé sur mail() – hsatterwhite

0

Deux choses: d'utiliser votre forme actuelle, vous devez 1) vérifier avec votre hôte pour voir si vous avez besoin d'utiliser smtp et authentifier plutôt que le courrier utilisation de php, et 2), désinfectez votre entrée: PHP Secure E-mail.

Si vous préférez utiliser un plugin WP pour le courrier - ce qui présente de nombreux avantages par rapport à la construction de votre propre formulaire -, vous devrez peut-être utiliser WP Mail SMTP « WordPress Plugins pour utiliser smtp plutôt que php mail, car votre hôte limite probablement l'utilisation du courrier php.

+0

J'ai utilisé un plugin, mais comme il n'a pas fonctionné, j'ai essayé de faire un simple mail php. La fonction de messagerie fonctionne correctement, mais les données de publication ne sont pas reçues. J'ai posté une nouvelle question sur ce problème. Merci – jul

-1

Essayez de changer

<input type="email" name="email" /> 

à quelque chose comme

<input type="email" name="my_theme_email" /> 

Faites la même chose avec tous vos champs il semble que certains noms sont réservés avec WordPress lors de l'envoi des données de formulaire. J'ai le même problème et je l'ai réparé comme ça. Après cela, utilisez la méthode POST et peut-être créer un do_action() pour ajouter une validation de champ. et d'utiliser wp_mail pour envoyer l'e-mail, également $_POST['']