Mail con funzione mail() riconosciute come spam

Alex@1983

Utente Attivo
9 Mag 2015
126
2
18
Ciao a tutti ,

vi scrivo per chiedervi supporto per il seguente problema :

da anni utilizzo la funzione mail ( ) per spedire una e-mail automatica ogni qual volta un utente compila un registro on-line . Verso la fine di ottobre però Gmail ha cominciato a considerare quelle mail come spam , con il risultato che gli utenti hanno l'impressione di non ricevere più comunicazioni

Qualcuno di voi sa cosa può essere intervenuto ? Lato mio non è cambiato assolutamente nulla .

Ho provato a googleare in giro , ma non arrivo a nulla !!!

VI RINGRAZIO IN ANTICIPO ..... e vi indico di seguito lo script che utilizzo :


PHP:
$destinatario = "[email protected], $destinatarimail , $mail_1, $mail_2, $mail_3";
$mittente = "Registro Interventi". "<[email protected]>";
$oggetto = "Inserito nuovo documento";
$messaggio =  '<!DOCTYPE html>
                    <html lang=3D"en">
                        <head> <meta http-equiv=3D "Content-Type"
                                content=3D"text/html; charset=3Dutf-8" /> <meta name=3D"viewport" content=3D"
                                width=3Ddevice-width, initial-scale=3D1.0"/>
                    
                        </head>
                    <body>
              
  <table border="1" cellpadding="8" border-color : #000000;>
 
..........SEGUE  CORPO DELLA TABELLA HTML
 
   </table>
  </body>
</html>';

// Valorizzo le variabili relative all'allegato
$allegato = $_FILES['foto']['tmp_name'];
$allegato_type = $_FILES['foto']['type'];
$allegato_name = $_FILES['foto']['name'];

// Creo altre due variabili ad uso interno
$headers = "From: " . $mittente;
$msg = "";

// Verifico se il file è stato caricato correttamente via HTTP
// In caso affermativo proseguo nel lavoro...
if (is_uploaded_file($allegato))
{
  // Apro e leggo il file allegato
  $file = fopen($allegato,'rb');
  $data = fread($file, filesize($allegato));
  fclose($file);

  // Adatto il file al formato MIME base64 usando base64_encode
  $data = chunk_split(base64_encode($data));

  // Genero il "separatore"
  // Serve per dividere, appunto, le varie parti del messaggio.
  // Nel nostro caso separerà la parte testuale dall'allegato
  $semi_rand = md5(time());
  $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
 
  // Aggiungo le intestazioni necessarie per l'allegato
  $headers .= "\nMIME-Version: 1.0\n";
  $headers .= "Content-Type: multipart/mixed;\n";
  $headers .= " boundary=\"{$mime_boundary}\"";

  // Definisco il tipo di messaggio (MIME/multi-part)
  $msg .= "This is a multi-part message in MIME format.\n\n";

  // Metto il separatore
  $msg .= "--{$mime_boundary}\n";

  // Questa è la parte "testuale" del messaggio
  //$msg .= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
 
    $msg .= "Content-Type: text/html; charset=\"UTF-8\"\n";
    $msg .= "Content-Transfer-Encoding: 7bit\n\n";
  $msg .= $messaggio . "\n\n";

  // Metto il separatore
  $msg .= "--{$mime_boundary}\n";

  // Aggiungo l'allegato al messaggio
  $msg .= "Content-Disposition: attachment; filename=\"{$allegato_name}\"\n";
  $msg .= "Content-Transfer-Encoding: base64\n\n";
  $msg .= $data . "\n\n";

  // chiudo con il separatore
  $msg .= "--{$mime_boundary}--\n";
}
// se non è stato caricato alcun file
// preparo un semplice messaggio testuale
else
{
 $msg = $dascrivere;
                                                                                                                                
                                                                                                                                                                                                       
$headers = "MIME-Version: 1.0\r\n";                                                                                                                                  
$headers .= "From: Registro Interventi <[email protected]> \r\n";                                                     
$headers .= "Content-Type: text/html; charset=\"iso-8859-1\"\r\n";                                                                               
$headers .= "Content-Transfer-Encoding: 7bit\r\n";                                                                                                            
                                                                        
}

// Invio la mail

if (mail($destinatario, $oggetto, $msg, $headers))
{
  echo "<p>Mail inviata con successo!</p>";
}else{
  echo "<p>Errore!</p>";
}
 
Anch'io usavo la funzione mail(), ma è molto limitata e c'erano un sacco di problemi con spam o cose varie. Io ti consiglio di passare a usare phpmailer, personalmente mi trovo benissimo
 
Anch'io usavo la funzione mail(), ma è molto limitata e c'erano un sacco di problemi con spam o cose varie. Io ti consiglio di passare a usare phpmailer, personalmente mi trovo benissimo

Ciao Tommy03, grazie per la risposta ...

ora cerco qualche informazione su phpmailer ...... noon l'ho mai usato .... non lo conosco ......
Ma secondo te , rispetto al mio codice , c'è molto da modificare ?
 
È una libreria da includere, ma una volta installata è semplicissima da usare
Ciao Tommy03 .....
E' da ieri che stò provando con phpmailer...... ma senza risultati !!!! dopo veri tentativi ora ricevo il seguente errore :

You must provide at least one recipient email address. ......... nonostante il destinatario sia inserito

Inoltre quando dichiaro $mail , devo farlo così: $mail = new PHPMailer\PHPMailer\PHPMailer; perchè se lo faccio come ho visto in tutti gli esempi ( $mail = new PHPMailer; ) ... mi dice che non trova quella classe

Ti riporto il codice che uso ...... MI DARESTI UNA MANO ?????? ......... Grazie mille in anticipo......

PHP:
include ("class.phpmailer.php");

include ("Exception.php");

include ("SMTP.php");

$mittente = "[email protected]";

$nomemittente = "Richiesta Informazioni";

$destinatario = "[email protected]";

$ServerSMTP = "smtp.gmail.com" ; //server SMTP

$corpo_messaggio = "Grazie per averci contattato!!\n"
    ."Cordiali Saluti,\n Servizio Clienti";

$mail = new PHPMailer\PHPMailer\PHPMailer;

$mail->IsHTML(true); // messaggio in HTML

$mail->IsSMTP(); // utilizza la classe SMTP invece del comando mail() di php

$mail->SMTPAuth   = 'true';     // abilita autenticazione SMTP

$mail->SMTPKeepAlive = 'true';

$mail->SMTPSecure = 'tls'; // abilitiamo il protocollo ssl richiesto per Gmail

$mail->Host = 'smtp.gmail.com'; // ecco il server smtp di google

$mail->Port = 587; // la porta che dobbiamo utilizzare

$mail->Username   ='[email protected]';      // utente server SMTP dedicato

$mail->Password   = 'password';    // password server SMTP dedicato

$mail->From   = $mittente;

$mail->FromName = $nomemittente;

$mail->AddAddress = ('[email protected]');

$mail->Subject='Prova formato HTML';

$mail->Body = "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0
    Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>
<HTML><body>'.$corpo_messaggio.'</body></html>";

$mail->AltBody = "$corpo_messaggio";

if(!$mail->Send()) {
    echo " errore nella spedizione: $mail->ErrorInfo \n"
           ."MITTENTE : $mail->From \n"
           ."DESTINATARIO : $mail->AddAddress";
} else {
    echo "messaggio inviato correttamente";
}
 
Ti posto il codice che a me funziona:
PHP:
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
require 'includes/vendor/autoload.php';
$mail = new PHPMailer();
$mail->isSMTP();
$mail->Host = 'smtp.gmail.com';
$mail->Port = 587;
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->SMTPAuth = true;
$mail->Username = '[email protected]';
$mail->Password = '*******';
$mail->setFrom('[email protected]', 'Amministrazione sito');
$mail->addReplyTo('[email protected]', 'Amministrazione sito');
$mail->addAddress('[email protected]', 'Nome destinatario');
$mail->Subject = 'Prova email';
$mail->msgHTML("<h1>Messaggio</h1>");
$mail->AltBody = 'Il tuo messaggio';
if (!$mail->send()) {
    echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
}
}

?>

Come lo hai installato PHPMailer?
Io ho seguito questa guida, in pratica:
1. Ho installato il composer da questo link
2. Poi ho creato una cartella nella root principale del sito chiamata "includes"
3. Poi, dal Prompt dei comandi, prima navighi nella cartella di riferimento (ad esempio: "cd c:\xampp\includes"), schiacci Invio e dopo scrivi "composer require phpmailer/phpmailer"

Lo so è un po' lungo come procedimento ma alla fine ne vale la pena
 
Ti posto il codice che a me funziona:
PHP:
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
require 'includes/vendor/autoload.php';
$mail = new PHPMailer();
$mail->isSMTP();
$mail->Host = 'smtp.gmail.com';
$mail->Port = 587;
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->SMTPAuth = true;
$mail->Username = '[email protected]';
$mail->Password = '*******';
$mail->setFrom('[email protected]', 'Amministrazione sito');
$mail->addReplyTo('[email protected]', 'Amministrazione sito');
$mail->addAddress('[email protected]', 'Nome destinatario');
$mail->Subject = 'Prova email';
$mail->msgHTML("<h1>Messaggio</h1>");
$mail->AltBody = 'Il tuo messaggio';
if (!$mail->send()) {
    echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
}
}

?>

Come lo hai installato PHPMailer?
Io ho seguito questa guida, in pratica:
1. Ho installato il composer da questo link
2. Poi ho creato una cartella nella root principale del sito chiamata "includes"
3. Poi, dal Prompt dei comandi, prima navighi nella cartella di riferimento (ad esempio: "cd c:\xampp\includes"), schiacci Invio e dopo scrivi "composer require phpmailer/phpmailer"

Lo so è un po' lungo come procedimento ma alla fine ne vale la pena

Grazie Mille Tommy ! .... ma il problema non è che la procedura è lunga , ma il fatto che io non uso php in locale , ma faccio tutto utilizzando altervista .... e questo pare che complichi un po le cose

Ho provato e rimanipolato il tuo script in tutte le salse .... ma nulla ! .... Certo qualcosa rispetto alle prime prove l'ho tirato fuori .... ma ora sono arenato su un errore " SMTP Failed : Cannot Autenticate ! ..... anche se deve essere un "falso-positivo" ... perchè le credenziali sono corrette

Prova ... dopo ... prova .... è dalle 19:00 che faccio tentativi ...... ora sono le 02 passate ....... domani torno all'attacco !!!

GRAZIE ANCORA PER IL SUPPORTO !
 
Ah, cercando un po' ho letto che altervista non supporta PHPMailer, ma utilizza, come unica alternativa a mail(), il servizio esterno SendGrid.
A questo link puoi trovare un tutorial su come usarlo.
 
  • Like
Reactions: Alex@1983
Ah, cercando un po' ho letto che altervista non supporta PHPMailer, ma utilizza, come unica alternativa a mail(), il servizio esterno SendGrid.
A questo link puoi trovare un tutorial su come usarlo.
AH....Ecco!!!!!! .......

Grazie mille per la dritta....ora i do un'okkiata.....ti faccio sapere !!!!!!
 
Ah, cercando un po' ho letto che altervista non supporta PHPMailer, ma utilizza, come unica alternativa a mail(), il servizio esterno SendGrid.
A questo link puoi trovare un tutorial su come usarlo.

@Tommy03 ..........E' PERFETTO SendGRID !!!!!!!......

l'ho configurato secondo le mie esigenze .... e fa egregiamente tutto ciò che deve !!!! :)

Grazie mille per il preziosissimo supporto !!! .... Mi hai dato una grande mano !!!!!

Grazie !
 

Discussioni simili