-
PHP Mailer
Salve a tutti, vorrei provare ad utilizzare PHP mailer per inviare una mail automatica ma non riesco proprio a capire perchè continuo ad ottenere sempre lo stesso errore. Girovagando per vari siti ho letto questo codice di esempio
Codice PHP:
<?php
require("/libs/PHPMailer-master/src/PHPMailer.php");
require("/libs/PHPMailer-master/src/SMTP.php");
$mail = new PHPMailer\PHPMailer\PHPMailer();
$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 = "xxxxxx";
$mail->Password = "xxxx";
$mail->SetFrom("xxxxxx@xxxxx.com");
$mail->Subject = "Test";
$mail->Body = "hello";
$mail->AddAddress("xxxxxx@xxxxx.com");
if(!$mail->Send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "Message has been sent";
}
?>
Con questa configurazione ogni volta che lancio la pagina ottengo questo errore:
Codice HTML:
2018-10-29 23:27:13 SERVER -> CLIENT:
2018-10-29 23:27:13 SMTP NOTICE: EOF caught while checking if connected
SMTP Error: Could not connect to SMTP host.
SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
Mailer Error: SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
Qualcuno può aiutarmi?
Grazie!
-
Su AlterVista non è possibile usare PHPMailer, in quanto le porte usate da SMTP sono bloccate.
Le uniche alternative sono la funzione mail o servizi esterni utilizzabili tramite API su HTTP, ad esempio SendGrid (per il quale alemoppo ha scritto un tutorial).
-
Grazie per la risposta! Avevo già provato la funzione mail() e attualmente funziona ma il problema è che le mail finiscono nello spam. Ci sono soluzioni o l'unica alternativa è usare SendGrid?
-
Puoi provare ad evitare che le email inviate attraverso la funzione mail siano classificate come spam specificando alcuni header, ad esempio from o reply-to. Questo in genere migliora la situazione ma non offre garanzie.
L'alternativa sono appunto servizi online che espongano API basate su HTTP. Conosco solo SendGrid, ma è probabile che ce ne siano anche altri.
-
Ho provato a seguire il tutorial che mi hai linkato e funziona tutto perfettamente con SendGrid. Il problema è che utilizzando il file .php presente nell'esempio del tutorial la mail finisce lo stesso nello spam. Sbaglio io qualcosa?
-
Se l'email viene inviata vuol dire che il codice è scritto correttamente.
Se anche con SendGrid l'email viene classificata come spam, ritengo che la causa più probabile sia che è il suo contenuto ad essere identificato come spam. Su questo non ci si può fare molto, a parte modificare il contenuto.
-
Ho lasciato tutto come nell'esempio come contenuto e finisce lo stesso in spam? Sto provando solo con gmail. Cosa si può ancora modificare?
-
Dovresti provare ad inviare un messaggio con un contenuto verisimile, anziché quello dell'esempio.
-
Ho provato anche con dei contenuti di esempio ma continua a finire nello spam.
Ci sono certe "regole" da seguire per fare in modo che la mail non finisca nello spam?
-
A parte gli header di cui abbiamo già parlato e le normali regole del buonsenso no.
I filtri antispam non sono neanche lontanamente vicini all'essere "esatti" o "corretti", ma quanto descrivi resta comunque piuttosto insolito. Può darsi che le precedenti prove fallite che hai effettuato verso la tua casella di posta gmail abbiano aggiornato il suo criterio di classificazione dello spam, in modo che ora vengano classificate tutte in modo errato. Se ne hai modo dovresti provare anche con una casella di posta diversa.
-
Se gli header sono giusti poiché siamo in server condivisi (probabilmente l'IP per spedire l'e-mail è stato considerato precedentemente come spam) cioè più utenti utilizzano lo stesso IP ma se non se ne fatto buon uso finirà nello spam. (Riferito alla funzione mail di php)
-
Ho provato anche con un'altra casella di posta ma succede sempre la stessa cosa.
Si può risolvere?
-
Ricapitolando: hai cambiato header, servizio, destinatario.
L'unica altra cosa su cui puoi intervenire è il contenuto del messaggio!
-
Posto qui il contenuto completo della mail:
Codice HTML:
$email->setFrom("noreply@altervista.com", "Matematica"); # <--- indirizzo mittente
$email->setSubject("Benvenuto!"); # <--- oggetto email
$email->addTo("emailDestinatario", "Matematica"); # <--- indirizzo destinatario
$email->addContent("text/plain", "Congratulazioni,
hai finalmente creato il tuo nuovo account.
Grazie per esserti iscritto, qui di seguito puoi trovare le tue credenziali di accesso alla gara.
La tua password è: Topolino
In bocca al lupo per la gara, vinca il migliore!"); # <--- testo della email
Non mi sembra ci sia nulla di strano ma non sono esperto e quindi lascio giudicare a voi.
-
Prova a sostituire:
Codice:
$email->setFrom("noreply@altervista.com", "Matematica");
Il tuo indirizzo alias di AlterVista (nota il @altervista.org e non .com).
Ciao!
-
-
Ho provato con il contenuto (oggetto, etc) identici al tuo ed effettivamente gmail me lo ha recapitato in spam.
Però modificando l'email del mittente mi è arrivata correttamente, non in spam. Sicuro di aver provato correttamente? Altrimenti non mi vengono altre idee sul perché arrivi in spam.
Ciao!
-
Tu come mittente hai usato l'alias di altervista? Perchè io provando con quello mi finisce comunque in spam
-
Sì. Ho riprovato ora addirittura con test@example.com e non arriva in spam! Prova così:
Codice PHP:
$email = new \SendGrid\Mail\Mail();
$email->setFrom("test@example.com", "Example User");
$email->setSubject("Benvenuto!");
$email->addTo("TUAEMAIL@gmail.com", "Matematica");
$email->addContent("text/plain", "Congratulazioni,
hai finalmente creato il tuo nuovo account.
Grazie per esserti iscritto, qui di seguito puoi trovare le tue credenziali di accesso alla gara.
La tua password è: Topolino
In bocca al lupo per la gara, vinca il migliore!");
$email->addContent(
"text/html", "Congratulazioni,
hai finalmente creato il tuo nuovo account.
Grazie per esserti iscritto, qui di seguito puoi trovare le tue credenziali di accesso alla gara.
La tua password è: Topolino
In bocca al lupo per la gara, vinca il migliore!"
);
Ovviamente sotituisci "TUAEMAIL".
Ciao!
-
Non capisco come sia possibile ma a me finisce in spam sia su gmail sia su outlook