kutombawewe.net

invia e-mail tramite il server SMTP Gmail PHP Mailer

Vorrei inviare una email usando Gmail SMTP server attraverso PHP Mailer.

questo è il mio codice

<?php
require_once('class.phpmailer.php');

$mail = new PHPMailer();
$mail->IsSMTP();
$mail->CharSet="UTF-8";
$mail->SMTPSecure = 'tls';
$mail->Host = 'smtp.gmail.com';
$mail->Port = 587;
$mail->Username = '[email protected]';
$mail->Password = 'valid password';
$mail->SMTPAuth = true;

$mail->From = '[email protected]';
$mail->FromName = 'Mohammad Masoudian';
$mail->AddAddress('[email protected]');
$mail->AddReplyTo('[email protected]', 'Information');

$mail->IsHTML(true);
$mail->Subject    = "PHPMailer Test Subject via Sendmail, basic";
$mail->AltBody    = "To view the message, please use an HTML compatible email viewer!";
$mail->Body    = "Hello";

if(!$mail->Send())
{
  echo "Mailer Error: " . $mail->ErrorInfo;
}
else
{
  echo "Message sent!";
}
?>

ma ricevo questo errore seguente

Mailer Error: SMTP Error: The following recipients failed: [email protected]

SMTP server error: SMTP AUTH is required for message submission on port 587

il mio dominio è vatandesign.ir

62
$mail = new PHPMailer(); // create a new object
$mail->IsSMTP(); // enable SMTP
$mail->SMTPDebug = 1; // debugging: 1 = errors and messages, 2 = messages only
$mail->SMTPAuth = true; // authentication enabled
$mail->SMTPSecure = 'ssl'; // secure transfer enabled REQUIRED for Gmail
$mail->Host = "smtp.gmail.com";
$mail->Port = 465; // or 587
$mail->IsHTML(true);
$mail->Username = "[email protected]";
$mail->Password = "password";
$mail->SetFrom("[email protected]");
$mail->Subject = "Test";
$mail->Body = "hello";
$mail->AddAddress("[email protected]");

 if(!$mail->Send()) {
    echo "Mailer Error: " . $mail->ErrorInfo;
 } else {
    echo "Message has been sent";
 }

Questo codice sopra è stato testato e ha funzionato per me.

Potrebbe essere necessario $mail->SMTPSecure = 'ssl';

Assicurati inoltre di non aver attivato la verifica in due passaggi per quell'account in quanto ciò potrebbe causare anche problemi.

AGGIORNATO

Potresti provare a cambiare $ mail-> SMTP a:

$mail->SMTPSecure = 'tls';

Vale la pena notare che alcuni server SMTP bloccano le connessioni . Alcuni server SMTP non supportano le connessioni SSL (o TLS).

118
andrew-caulfield

Quindi ho appena risolto il mio errore "Errore di connessione SMTP" e volevo pubblicare la soluzione nel caso in cui fosse di aiuto a chiunque altro.

Ho usato il codice ESATTO indicato nel file gmail.phps di esempio di PHPMailer. Ha funzionato semplicemente mentre stavo usando MAMP e poi ho avuto l'errore di connessione SMTP una volta che l'ho spostato sul mio server personale.

Tutte le risposte Stack Overflow che ho letto e tutta la documentazione sulla risoluzione dei problemi di PHPMailer ha affermato che non si trattava di un problema con PHPMailer. Che si trattava di un problema di impostazioni sul lato server. Ho provato diverse porte (587, 465, 25), ho provato la crittografia 'SSL' e 'TLS'. Ho verificato che openssl fosse abilitato nel mio file php.ini. Ho verificato che non c'era un problema con il firewall. Tutto è stato controllato, e ancora niente.

La soluzione era che dovevo rimuovere questa linea:

$mail->isSMTP();

Ora funziona tutto. Non so perché, ma funziona. Il resto del mio codice viene copiato e incollato dal file di esempio PHPMailer.

26
Evan Butler

Inoltre, vale la pena notare che se hai attivato l'autenticazione a due fattori, dovrai impostare una password specifica per l'applicazione da utilizzare al posto della password dell'account e-mail.

Puoi generare una password specifica per l'applicazione seguendo queste istruzioni: https://support.google.com/accounts/answer/185833

Quindi imposta $mail->Password sulla password specifica dell'applicazione.

8
Tim Carr

Sembra che il tuo server non riesca a stabilire una connessione al server SMTP di Gmail . Ecco alcuni suggerimenti per risolvere questo problema: 1) controlla se SSL è configurato correttamente sul tuo PHP (il modulo che lo gestisce è nn ') t installato di default su PHP. Devi controllare la tua configurazione in phph.ini) . 2) controlla se il tuo firewall lascia chiamate in uscita alla porta richiesta (qui 465 o 587). Usa telnet per farlo. Se la porta non è aperta, allora avrai bisogno del supporto di sysdmin per configurare la config . Spero che lo risolverai velocemente!

5
Pr Shadoko

Apri questo Link e seleziona segui le istruzioni google server blocca qualsiasi tentativo da server sconosciuti, quindi una volta fatto clic su captcha verifica che tutto vada bene 

3
Yasin Hassanien

Google tratta gli account Gmail in modo diverso a seconda delle informazioni utente disponibili, probabilmente per frenare gli spammer.

Non ho potuto usare SMTP fino a quando ho fatto la verifica del telefono. Ho fatto un altro account per ricontrollare e sono riuscito a confermarlo.

1
 $mail->SMTPOptions = array(
                'ssl' => array(
                    'verify_peer' => false,
                    'verify_peer_name' => false,
                    'allow_self_signed' => true
                )
            );
0
brandenM

questo codice funziona bene per me 

    $mail = new PHPMailer;
    //Enable SMTP debugging. 
    $mail->SMTPDebug = 0;
    //Set PHPMailer to use SMTP.
    $mail->isSMTP();
    //Set SMTP Host name                          
    $mail->Host = $hostname;
    //Set this to true if SMTP Host requires authentication to send email
    $mail->SMTPAuth = true;
    //Provide username and password     
    $mail->Username = $sender;
    $mail->Password = $mail_password;
    //If SMTP requires TLS encryption then set it
    $mail->SMTPSecure = "ssl";
    //Set TCP port to connect to 
    $mail->Port = 465;
    $mail->From = $sender;  
    $mail->FromName = $sender_name;
    $mail->addAddress($to);
    $mail->isHTML(true);
    $mail->Subject = $Subject;
    $mail->Body = $Body;
    $mail->AltBody = "This is the plain text version of the email content";
    if (!$mail->send()) {
        echo "Mailer Error: " . $mail->ErrorInfo;
    }
    else {
           echo 'Mail Sent Successfully';
    }
0
Zohaib Hussain

Anderscc ha capito bene. Grazie. Ha funzionato per me ma non al 100%. 

Ho dovuto impostare

$ mail-> SMTPDebug = 0; Impostandolo su 1, può causare errori soprattutto se si passano alcuni dati come json alla pagina successiva. Esempio - Esecuzione della verifica se la posta viene inviata, utilizzando json per passare i dati tramite ajax.

Ho dovuto abbassare le impostazioni di sicurezza dell'account Gmail per eliminare gli errori: "SMTP connect () failed" e "SMTP ERROR: comando della password fallito" 

Soluzione: Questo problema può essere causato da applicazioni "meno sicure" che tentano di utilizzare l'account di posta elettronica (questo è in base alla guida di Google, non sono sicuro di come giudicano ciò che è sicuro e cosa non lo è) OR se stai tentando di accedere più volte di seguito OR se cambi paese (ad esempio, usa VPN, sposta il codice su un altro server o prova effettivamente ad accedere da diverse parti del mondo).

Collegamenti che risolvono il problema (devi accedere all'account google):

Nota: È possibile accedere al seguente link di risposta StackOverflow per riferimenti più dettagliati.

https://stackoverflow.com/a/25175234

0
Akshay P. Raul

Se si utilizza cPanel, è sufficiente fare clic sulla casella wee che consente di inviare a server esterni tramite SMTP.

Accedi a CPanel> Impostazioni Tweak> Tutte> "Limita SMTP in uscita a root, exim e mailman (FKA SMTP Tweak)"

Come risposta qui:

"Password non accettata dal server: 535 Dati di autenticazione errati" quando si invia con GMail e phpMailer

0
Tristanisginger