wp_mail nu trimite email-uri

30 iun. 2016, 21:51:39
Vizualizări: 15.4K
Voturi: 0

Am folosit WP-Mail-SMTP pentru a configura sistemul de trimitere email pe instalarea mea de WordPress. Am testat funcționalitatea trimițând email către adresa mea personală.

Acum încerc să trimit datele din formular folosind funcția wp_mail()[WP].

Mai jos este codul.

<?php
if(isset($_POST["button_pressed"])){
// Verifică dacă câmpurile sunt goale
if($_POST["dname"]==""){
echo "Completează toate câmpurile..";
}
else {
$email=$_POST['email'];
$message = $_POST['dname'];
$headers = 'From:' . "\r\n"; // Email-ul expeditorului
$headers .= 'Cc:' . "\r\n"; // Copie carbon către expeditor

// Liniile mesajului nu trebuie să depășească 70 de caractere (regulă PHP), așa că aplică wordwrap
// $message = wordwrap($message, 70);    

wp_mail("ADRESA-EMAIL-PRIVATA", $subject, $message, $headers)

echo "Email-ul tău a fost trimis cu succes! Mulțumim pentru feedback.";
}
?>

Formular HTML

<form>
<div class="row">
<div class="form-group">
<div class="col-sm-6"><input class="form-control" type="text" placeholder="INTRODU NUMELE CÂINELUI" id="dname" /></div>
<div class="col-sm-6"><input class="form-control" type="text" placeholder="INTRODU NUMELE PROPRIETARULUI" id="name" /></div>
</div>
</div>


<input type="submit" value="TRIMITE" />
<input type="hidden" name="button_pressed" value="1" />

</form>

Am încercat multe tutoriale, dar niciunul nu a ajutat. Comentariile și sugestiile voastre îmi vor fi de mare ajutor. Vă mulțumesc pentru timpul acordat.

5
Comentarii

Funcționează în general trimiterea de mailuri pe site-ul tău (pentru test, poți încerca resetarea parolei de login)? Dacă nu, atunci ar trebui să discuți cu gazda ta despre această problemă.

Ismail Ismail
30 iun. 2016 22:06:44

Pot trimite mailuri din clientul de email Roundcube în cpanel-ul site-ului meu. Funcționează. Doar codul de mai sus dintr-una din paginile mele nu funcționează.

Rahul Bali Rahul Bali
30 iun. 2016 22:34:55

Doar o mică observație, > wp_mail("PRIVATE-EMAIL-ADDRESS" - ești sigur că trimiți la adresa de email corectă?

Ismail Ismail
30 iun. 2016 22:36:20

da, aceasta este adresa mea de e-mail. Am verificat-o din nou.

Rahul Bali Rahul Bali
30 iun. 2016 22:44:00

Poți să-mi sugerezi unde trebuie să pun codul PHP în WordPress? header.php sau page.php?

Rahul Bali Rahul Bali
30 iun. 2016 22:55:10
Toate răspunsurile la întrebare 3
0

După ce am stat ore întregi să mă joc cu codul, am găsit problema.

Era la formular, nu la PHP.

<div class="col-sm-6">
<input class="form-control" type="text" placeholder="INTRODUCEȚI NUMELE CÂINELUI" id="dname" /></div>
<div class="col-sm-6">
<input class="form-control" type="text" placeholder="INTRODUCEȚI NUMELE PROPRIETARULUI" id="name" /></div>

Atributul id trebuie schimbat în name.

Corectat

<div class="col-sm-6">
<input class="form-control" type="text" placeholder="INTRODUCEȚI NUMELE CÂINELUI" name="dname" /></div>
<div class="col-sm-6">
<input class="form-control" type="text" placeholder="INTRODUCEȚI NUMELE PROPRIETARULUI" name="name" /></div>
</div>
30 iun. 2016 23:12:05
0

YIKESSSSSS. Sunt multe lucruri greșite.

  1. Trebuie să sanitizezi datele din $_POST sau se vor întâmpla lucruri foarte, foarte rele...

  2. Este mai bine să folosești ghilimele simple pentru șirurile de caractere în WordPress

  3. Spațierea și indentarea nu urmează cele mai bune practici.

  4. Nu faci nimic cu $_POST['name'] ???

  5. Faci referire la $_POST["email"], dar nu îl transmiți prin formularul exemplu, ceea ce va rezulta în erori de variabilă nedefinită (FOLOSEȘTE WP DEBUG !!! SETEAZĂ-L PE TRUE)

  6. Este important să verifici toate valorile din $_POST, nu doar una, deoarece cineva poate manipula formularul sau un spammer poate trimite email fără ca formularul să aibă o valoare POST, cauzând din nou erori de variabilă nedefinită.

  7. wp_mail ar trebui să aibă punct și virgulă la sfârșit

  8. Îți lipsește o acoladă de închidere, PHP nu ar funcționa niciodată.

  9. Else nu este necesar

  10. Este mai bine să folosești wp_die dacă există manipulare a formularului. Dacă nu dorești o experiență proastă pentru utilizatori, folosește pur și simplu atributul HTML required în câmpurile de input.

  11. Nu este nevoie de div-uri de închidere după câmpurile de input

  12. Este mai bine să folosești CSS și Bootstrap nativ pentru a gestiona literele majuscule.

php

<?php 

if ( isset( $_POST["button_pressed"] ) ) {
  // Verificare pentru câmpuri goale..
  if ( empty( $_POST['dname'] ) || empty( $_POST['name'] ) ) {
    wp_die( __( 'Te rog completează toate câmpurile data viitoare.', 'your-text-domain' ) );
  }
  $message  = sanitize_text_field( $_POST['dname'] );
  // $email    = sanitize_email( $_POST["email"] );
  $name     = sanitize_text_field( $_POST['name'] );
  $headers  = 'From:' . "\r\n"; // Emailul expeditorului
  $headers .= 'Cc:' . "\r\n"; // Copie carbon către expeditor
  // Trimite email
  wp_mail( 'PRIVATE-EMAIL-ADDRESS', $subject, $message, $headers );
  // Afișează mesajul și ascunde formularul
  _e( 'Emailul tău a fost trimis cu succes! Îți mulțumim pentru feedback.', 'your-text-domain' ); 
  echo '<style>#contact-form{ display: none; }</style>';
}

?>

și markup-ul html

<form action="" id="contact-form" method="post">
  <div class="row">
    <div class="form-group">
      <div class="col-sm-6">
        <input class="form-control text-uppercase" type="text" placeholder="<?php _e( 'Introdu numele câinelui', 'your-text-domain' ); ?>" name="dname" required>
      <div class="col-sm-6">
        <input class="form-control text-uppercase" type="text" placeholder="<?php _e( 'Introdu numele proprietarului', 'your-text-domain' ); ?>" name="name" required>
      </div>
    </div>
  </div>
  <input type="submit" value="TRIMITE" />
  <input type="hidden" name="button_pressed" value="1" />
</form>
1 iul. 2016 10:34:09
1

Am verificat codul tău. Cred că antetul nu este definit corect. Te rog verifică codul de mai jos:

$current_user  = wp_get_current_user();
$name          = sanitize_text_field($_POST["name"]);
$email_address = sanitize_email($_POST["email_address"]);
$detail        = esc_textarea($_POST["detail"]);
$message       = "Nume : " . $name . "\n";
$message .= "Adresă email : " . $email_address . "\n";
$message .= "Detalii : " . $detail . "\n";
$send_to = 'test@test.com';

$headers = 'De la: ' . $current_user->user_firstname . ' ' . $current_user->user_lastname . ' <test@test.com>' . "\r\n";

if (wp_mail($send_to, $email_subject, $message, $headers)) {

  wp_redirect(admin_url('admin.php?page=contact-page&msg=success'));

  exit();
} else {

  wp_redirect(admin_url('admin.php?page=contact-page&msg=failed'));

  exit();
}
30 iun. 2016 23:02:39
Comentarii

funcționează codul sau nu?

Syed Fakhar Abbas Syed Fakhar Abbas
30 iun. 2016 23:10:03