wp_mail non invia email - Risoluzione problemi WordPress

30 giu 2016, 21:51:39
Visualizzazioni: 15.4K
Voti: 0

Ho utilizzato WP-Mail-SMTP per configurare il sistema di invio email nel mio sito WordPress. Ho testato il funzionamento inviando email al mio indirizzo personale.

Ora sto provando a inviare i dati di un modulo usando la funzione wp_mail()[WP].

Ecco il codice:

<?php
if(isset($_POST["button_pressed"])){
// Controllo campi vuoti..
if($_POST["dname"]==""){
echo "Compila tutti i campi..";
}
else {
$email=$_POST['email'];
$message = $_POST['dname'];
$headers = 'From:' . "\r\n"; // Email del mittente
$headers .= 'Cc:' . "\r\n"; // Copia carbone al mittente

// Le righe del messaggio non dovrebbero superare 70 caratteri (regola PHP), quindi aggiungi a capo
// $message = wordwrap($message, 70);    

wp_mail("INDIRIZZO-EMAIL-PRIVATO", $subject, $message, $headers)

echo "La tua email è stata inviata con successo! Grazie per il feedback";
}
?>

Modulo HTML

<form>
<div class="row">
<div class="form-group">
<div class="col-sm-6"><input class="form-control" type="text" placeholder="NOME DEL CANE" id="dname" /></div>
<div class="col-sm-6"><input class="form-control" type="text" placeholder="NOME DEL PROPRIETARIO" id="name" /></div>
</div>
</div>


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

</form>

Ho provato molti tutorial, ma nessuno ha funzionato. I vostri commenti e suggerimenti mi saranno molto utili. Grazie per il vostro tempo.

5
Commenti

La funzione di invio email in generale funziona sul tuo sito (per testare, puoi provare con il reset della password di accesso)? Se non funziona, dovresti probabilmente parlare con il tuo host riguardo a questo..

Ismail Ismail
30 giu 2016 22:06:44

Posso inviare email dal client email Roundcube nel cpanel del mio sito. Funziona. Solo il codice sopra in una delle mie pagine non funziona.

Rahul Bali Rahul Bali
30 giu 2016 22:34:55

Solo una piccola cosa, > wp_mail("PRIVATE-EMAIL-ADDRESS" stai inviando all'indirizzo email corretto?

Ismail Ismail
30 giu 2016 22:36:20

sì, è il mio indirizzo email. L'ho controllato di nuovo.

Rahul Bali Rahul Bali
30 giu 2016 22:44:00

Puoi suggerirmi dove devo inserire il codice PHP in WP? header.php? o page.php?

Rahul Bali Rahul Bali
30 giu 2016 22:55:10
Tutte le risposte alla domanda 3
0

Dopo aver smanettato per ore, ho trovato il problema.

Non era il PHP ma il form.

<div class="col-sm-6">
<input class="form-control" type="text" placeholder="NOME DEL CANE" id="dname" /></div>
<div class="col-sm-6">
<input class="form-control" type="text" placeholder="NOME DEL PROPRIETARIO" id="name" /></div>

L'attributo id deve essere name.

Corretto

<div class="col-sm-6">
<input class="form-control" type="text" placeholder="NOME DEL CANE" name="dname" /></div>
<div class="col-sm-6">
<input class="form-control" type="text" placeholder="NOME DEL PROPRIETARIO" name="name" /></div>
</div>
30 giu 2016 23:12:05
0

YIKESSSSSS. Ci sono molte cose sbagliate.

  1. Devi sanificare i dati $_POST altrimenti potrebbero accadere cose molto molto brutte...

  2. È meglio usare gli apici singoli per le stringhe in WordPress

  3. Spaziature e indentazione non seguono le migliori pratiche.

  4. Non stai facendo nulla con $_POST['name'] ???

  5. Stai chiamando $_POST["email"] ma non lo stai passando attraverso il form di esempio, il che risulterà in errori di variabile non definita (USA WP DEBUG !!! IMPOSTALO SU TRUE)

  6. È importante verificare tutti i valori $_POST, non solo uno, perché qualcuno potrebbe manipolare il form o uno spammer potrebbe inviare email senza che il form abbia un valore POST mancante, causando nuovamente errori di variabile non definita.

  7. wp_mail dovrebbe avere un punto e virgola alla fine

  8. Manca una parentesi di chiusura, il PHP non funzionerebbe mai.

  9. L'else non è necessario

  10. È meglio usare wp_die se c'è manomissione del form. Se non vuoi una cattiva esperienza utente, usa semplicemente il tag HTML required nei campi di input.

  11. Non c'è bisogno di div di chiusura dopo i campi di input

  12. È meglio usare CSS e Bootstrap nativo per gestire le lettere maiuscole.

il php

<?php 

if ( isset( $_POST["button_pressed"] ) ) {
  // Verifica campi vuoti..
  if ( empty( $_POST['dname'] ) || empty( $_POST['name'] ) ) {
    wp_die( __( 'Per favore compila tutti i campi la prossima volta.', 'your-text-domain' ) );
  }
  $message  = sanitize_text_field( $_POST['dname'] );
  // $email    = sanitize_email( $_POST["email"] );
  $name     = sanitize_text_field( $_POST['name'] );
  $headers  = 'From:' . "\r\n"; // Email del mittente
  $headers .= 'Cc:' . "\r\n"; // Copia carbone al mittente
  // Invia email
  wp_mail( 'PRIVATE-EMAIL-ADDRESS', $subject, $message, $headers );
  // Mostra messaggio e nascondi il form
  _e( 'La tua email è stata inviata con successo! Grazie per il tuo feedback.', 'your-text-domain' ); 
  echo '<style>#contact-form{ display: none; }</style>';
}

?>

e il markup 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( 'Inserisci il nome del cane', 'your-text-domain' ); ?>" name="dname" required>
      <div class="col-sm-6">
        <input class="form-control text-uppercase" type="text" placeholder="<?php _e( 'Inserisci il nome del proprietario', 'your-text-domain' ); ?>" name="name" required>
      </div>
    </div>
  </div>
  <input type="submit" value="INVIA" />
  <input type="hidden" name="button_pressed" value="1" />
</form>
1 lug 2016 10:34:09
1

Ho controllato il tuo codice. Penso che l'header non sia definito correttamente. Per favore controlla il codice qui sotto:

$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       = "Nome : " . $name . "\n";
$message .= "Indirizzo Email : " . $email_address . "\n";
$message .= "Dettaglio : " . $detail . "\n";
$send_to = 'test@test.com';

$headers = 'From: ' . $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 giu 2016 23:02:39
Commenti

il codice funziona o no?

Syed Fakhar Abbas Syed Fakhar Abbas
30 giu 2016 23:10:03