mail()

cyber

Nuovo Utente
11 Mag 2012
29
0
0
Cagliari
ciao a tutti, qualcuno di voi sa come posso inviare le mail da un hosting che ha la funzione mail() disabilitata/configurata male?
grazie a tutti
 

marino51

Utente Attivo
28 Feb 2013
2.955
171
63
Lombardia
si , ma non ricevo nessuna mail.
lo script funziona perfettamente ma se lo eseguo nel mio hosting non invia la mail anche se si conclude senza errori
cosa significa funziona perfettamente ?
dove e come lo hai provato ?
hai visto arrivare le mail ?
puoi postare lo script con tutti i parametri, esclusi utenti e password delle mail ma lasciando i domini ?

grazie
ciao
Marino
 

cyber

Nuovo Utente
11 Mag 2012
29
0
0
Cagliari
cosa significa funziona perfettamente ?
dove e come lo hai provato ?
hai visto arrivare le mail ?
puoi postare lo script con tutti i parametri, esclusi utenti e password delle mail ma lasciando i domini ?

grazie
ciao
Marino
ciao, l'ho provato sia in locale che su un altro server dove funziona perfettamente, mentre sul server che mi interessa non funziona.
questo e l'index
Codice:
<body>

    <form name="form1" method="post" action="richiesta.php">
     <p><label for="nome"></label>None e Cognome (*):<input name="nome" type="text" id="nome" size="30" required="required"></p>
     <p><label for="email"></label>Indirizzo e-mail (*):<input name="email" type="text" id="email" size="30" required="required"></p>
     <p><label for="note"></label>Messaggio (*): <textarea name="note" cols="70" rows="2" id="note" required="required"></textarea></p>
     <p><input type="submit" name="ok" id="ok" value="Invia">(*) campi obbligatori</p>
    </form>

</body>
e questo è la richiesta
Codice:
<?php 
# [url]http://localhost/test_site/php/test/email_orig.php[/url] 
error_reporting(E_ALL);                // per segnalare un eventuale errore a video senza guardare il log 
ini_set('display_errors', '1'); 
$mail_username = "pippo";    // account ID registrato con il provider in uso 
$mail_password = "pluto";        // password 
$mail_SMTP     = "smtp.topolino.it";        // indirizzo SMTP del provider 
$mail_SMTPport = "25";                // porta del servizio di invio 
$mail_from     = "From: ".$mail_username;    // mittente, può essere diverso da account ID, 
                        // per sicurezza però qualche provider lo vuole uguale 
ini_set("SMTP"     ,$mail_SMTP); 
ini_set("smtp_port",$mail_SMTPport); 
ini_set("username" ,$mail_username); 
ini_set("password" ,$mail_password); 
	   $nome = $_POST['nome']; 
	   $email = $_POST['email']; 
	   $note = $_POST['note']; 
        $mittente = "MIME-Version: 1.0\r\n"; 
        $mittente .= "Content-type: text/html; charset=iso-8859-1 \r\n"; 
        $mittente .= $mail_from." \r\n";     
        $mittente .= "Bcc: [email][email protected][/email] \r\n";  
        $oggetto = "Richiesta pervenuta al sito: www.pluto.net"; 
        $testo = ' 
        <html><head> 
        <style type="text/css">body {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:14px; font-weight:normal; color:#000000;} 
        </style></head><body><br><br><p><img src="logo.jpg" ></p>'; 
        $testo .= " 
        <strong>Richiesta</strong><br><br> 
        nome: ".$nome."<br>  
        e-mail: ".$email. "<br> 
        note: ".$note."<br><br><br>  
        </p></body></html> 
        "; 
        $destinatario = "[email protected]";  
        mail($destinatario, $oggetto, $testo, $mittente);  
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
body,td,th {
    font-family: Verdana, Geneva, sans-serif;
    font-size: 16px;
    color: #09C;
    text-align: center;
}
a:link {
    color: #09C;
    text-decoration: none;
}
a:visited {
    text-decoration: none;
    color: #09C;
}
a:hover {
    text-decoration: underline;
    color: #09C;
}
a:active {
    text-decoration: none;
    color: #09C;
}
</style>
</head>
<body>
<p>&nbsp;</p>
<p>La sua richiesta e' stata inoltrata</p>
</body>
</html>
 

marino51

Utente Attivo
28 Feb 2013
2.955
171
63
Lombardia
scusa, puoi postare anche l'errore che ti da a video e/o nel php log (C:/Windows/temp/php....log se usi Windows)
in modo completo
grazie
Marino
 

cyber

Nuovo Utente
11 Mag 2012
29
0
0
Cagliari
non mi da alcun errore
in local host dove funziona perfettamente e ricevo anche l mail
mentre sul server (hosting tiscali con linux) non mi da nessun errore ma non ricevo le mail,
se invece lo provo su un hostin aruba con linux funziona come bene con in local host.
 
Ultima modifica:

marino51

Utente Attivo
28 Feb 2013
2.955
171
63
Lombardia
ho letto la guida di Tiscali, in particolare ti riporto 2 punti

1)
È possibile visualizzare lo stato degli indicatori in funzione dell’offerta hosting sottoscritta. Se il Supporto SQL è abilitato, è possibile verificare quanti Database SQL o Utenti SQL sono stati creati. È possibile verificare il numero dei sottodomini, alias di dominio, account email e ftp attivi nell’hosting.

offerta a pagamento, il servizio mail è attivo ?
lo vedi dal pannello di controllo ...

2)
Si noti che il server SMTP funziona attraverso username e password, si dovrà quindi impostare il client di posta elettronica per l'autenticazione SMTP.

questa affermazione è in linea con i parametri che passiamo,
PHP:
ini_set("SMTP"     ,$mail_SMTP); 
ini_set("smtp_port",$mail_SMTPport); 
ini_set("username" ,$mail_username); 
ini_set("password" ,$mail_password);
prova con porta 25 e con porta 587 più facile che debba essere usata questa seconda

il parametro
PHP:
ini_set('display_errors', '1');
serve proprio per evidenziare gli errori .... ma se non se ne vedono ... ????

ciao
Marino
 

cyber

Nuovo Utente
11 Mag 2012
29
0
0
Cagliari
ok, ho provarto con entrambe le porte ma non cambia nulla.
non mi da alcun errore ma la mail non mi arriva (se uso l'hosting tiscali) mentre se uso l'hosting aruba funziona perfettamente. sto diventando pazzo
 

marino51

Utente Attivo
28 Feb 2013
2.955
171
63
Lombardia
ciao, hai provato ad utilizzare la classe phpmailer?

https://github.com/PHPMailer/PHPMailer/

E' davvero semplice, a suo tempo creai per un altro utente un form, te lo allego prova se funziona.

Vedi l'allegato 2156
ciao,
il problema non sta (parzialmente) nello strumento utilizzato per inviare mail,
quanto nella sua configurazione.

la funzione mail() di php funziona bene fintantoché non ci sia la connessione con protocollo SSL o TLS
usando questa connessione, occorre (mi sembra) ricorrere a PEAR o PHPmailer o altri.

Ma in ogni caso va trovata la giusta configurazione dei parametri di connessione.

nelle istruzioni che ho recuperato da tiscali si parla di porta 465 che viene usata con ssl
quindi nessuno strumento parlerà mai con quel sistema se non configurato bene.

ora avendo un client di posta elettronica (funzionante) che accede a tiscali per scaricare in locale e inviare da locale la posta, sarebbe utile conoscere la sua configurazione. (io non ho account tiscali)

ciao
Marino
 
Ultima modifica:

marino51

Utente Attivo
28 Feb 2013
2.955
171
63
Lombardia
invio mail con connessione ssl

ciao,

considerato che la funzione mail() non mi sembra possa lavorare con connessioni ssl,
ho scaricato e copiato nel folder ..PHP\v5.4\includes la classe PHPMailer
che trovi,
http://code.google.com/a/apache-extras.org/p/phpmailer/downloads/list

ho creato un account nuovo su Gmail che ha smtp con connessione ssl
ho adattato un esempio presente nei folder della classe
e tutto funziona

ti posto lo script, come prima prova metti i parametri di tiscali, senza modificare altro
passa un html (contents.html) giusto per prova

ciao
Marino

PHP:
<?php

# http://localhost/test_site/php/mail/use_gmail.php

include("phpmailer/class.phpmailer.php");
include("phpmailer/class.smtp.php");

$mail             = new PHPMailer();

$body             = file_get_contents('contents.html'); // testo del messaggio in formato html

$mail->SMTPDebug = 1;  // eliminare quando si mette in "produzione"

$mail->IsSMTP();
$mail->SMTPAuth   = true;
$mail->SMTPSecure = "ssl";
$mail->Host       = "smtp.gmail.com";
$mail->Port       = 465;
$mail->Username   = "[email protected]";           // mittente
$mail->Password   = "";                           // password
$mail->FromName   = "Nome Utente";                // nome che precede indirizzo e-mail mittente

$mail->From       = "[email protected]";           // lascerei uguale al mittente

$mail->AddAddress("[email protected]");            // destinatario 1
$mail->AddAddress("[email protected]");           // destinatario 2

$mail->AddCC("[email protected]");

$mail->AddBCC("[email protected]");

$mail->AddReplyTo("[email protected]");            // rispondere a ...

$mail->Subject    = "PROVA DI INVIO SSL";

$mail->AltBody    = "This is the body when user views in plain text format"; //Text Body
$mail->WordWrap   = 50;	// set word wrap

$mail->MsgHTML($body);

// $mail->AddAttachment("/path/to/file.zip");
// $mail->AddAttachment("/path/to/image.jpg", "new.jpg");

$mail->IsHTML(true); // send as HTML

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

cyber

Nuovo Utente
11 Mag 2012
29
0
0
Cagliari
ok, almeno adesso abbiamo un errore

Codice:
SMTP -> ERROR: Failed to connect to server: Connection refused (111) 
The following From address failed: [email protected] : Called Mail() without being connected Mailer Error: The following From address failed: [email protected] : Called Mail() without being connected
ho anche provate a mettere localhost come server ma non cambia

ps: ovviamente la mail non è [email protected] :)
 

cyber

Nuovo Utente
11 Mag 2012
29
0
0
Cagliari
se invece imposto lo script così
Codice:
$mail->SMTPDebug = 1;  // eliminare quando si mette in "produzione" 

$mail->IsSMTP(); 
$mail->SMTPAuth   = true; 
$mail->SMTPSecure = "ssl"; 
$mail->Host       = "smtp.tiscali.it"; 
$mail->Port       = 465; 
$mail->Username   = "[email protected]";           // mittente 
$mail->Password   = "*********";                           // password 
$mail->FromName   = "Pippo Pluto";                // nome che precede indirizzo e-mail mittente 

$mail->From       = "[email protected]";           // lascerei uguale al mittente 

$mail->AddAddress("[email protected]");            // destinatario 1 

$mail->AddCC("[email protected]"); 

$mail->AddBCC("[email protected]"); 

$mail->AddReplyTo("[email protected]");            // rispondere a ... 

$mail->Subject    = "PROVA DI INVIO SSL"; 

$mail->AltBody    = "This is the body when user views in plain text format"; //Text Body 
$mail->WordWrap   = 50;    // set word wrap 

$mail->MsgHTML($body);
mi da questo errore
Codice:
SMTP -> ERROR: EHLO not accepted from server: 
SMTP -> ERROR: HELO not accepted from server: 
SMTP -> ERROR: AUTH not accepted from server: 
SMTP -> NOTICE: EOF caught while checking if connectedThe following From address failed: [email protected] : Called Mail() without being connected Mailer Error: The following From address failed: [email protected] : Called Mail() without being connected
 

marino51

Utente Attivo
28 Feb 2013
2.955
171
63
Lombardia
per favore sostituisci con le seguenti

PHP:
$mail->SMTPSecure = "tls"; 


$mail->Subject = "PROVA DI INVIO SSL";
$mail->Body    = 'This is the HTML message body <b>in bold!</b>';
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

//$body = file_get_contents('contents.html');		// testo del messaggio in formato html
//$mail->MsgHTML($body);
ciao
Marino
 

cyber

Nuovo Utente
11 Mag 2012
29
0
0
Cagliari
avevo già provavato anche con il tsl ed il risultato e ancora questo
Codice:
SMTP -> ERROR: Failed to connect to server: Connection refused (111) 
The following From address failed: [email protected] : Called Mail() without being connected Mailer Error: The following From address failed: [email protected] : Called Mail() without being connected
 

marino51

Utente Attivo
28 Feb 2013
2.955
171
63
Lombardia
SMTP -> ERROR: Failed to connect to server: Connection refused (111)

ho chiamato il servizio con telnet ...

Codice:
telnet smtp.tiscali.it 25  -> connessione non riuscita
telnet smtp.tiscali.it 587 -> connessione non riuscita
telnet smtp.tiscali.it 465 -> si connette
quindi sembra usare solo la porta 465 probabilmente legata a SMTPSecure = "ssl";


1 ) controlla, ancora, nel pannello di amministrazione del tuo hosting che il servizio mail sia
veramente attivo


2 ) fai ancora prove di invio, aggiungendo allo script il seguente parametro

PHP:
$mail->$Encoding = 'base64';
con i valori in alternativa ad ogni invio, 'base64', '7bit', '8bit', 'binary', 'quoted-printable'


3 ) se ancora non funziona, verifica con un client di posta (es. outlook)
di poter ricevere e inviare posta con i parametri di tiscali
(se non funziona lo script, non deve funzionare neppure il client)


4 ) hai due tools con le funzioni mail() e phpmailer() che funzionano regolarmente, salvo che con tiscali,
io non ho più idee, chiama l'assistenza di tiscali e fai una verifica con loro dei parametri da utilizzare


5 ) quando hai risolto per cortesia posta la soluzione

ciao
Marino

ps, provando passo, passo, con base64 si connette e taglia la connessione quando mando una userid ... sbagliata
ti posto l'errore ed il codice per curiosità ....

[01-Apr-2014 13:40:17 Europe/Rome] PHP Notice: fputs(): send of 27 bytes failed with errno=10054 Connessione in corso interrotta forzatamente dall'host remoto.
in C:\Web_Sites\__Test\PHP\Mail\SMTPClient.php on line 55

PHP:
    if ($SMTPIN = fsockopen ($this->SmtpServer, $this->PortSMTP)){
//    var_dump($SMTPIN); print "<br /><br />";

      fputs ($SMTPIN, "HELO ".$this->HTTPhost."\r\n");  
      $talk["hello"]=fgets($SMTPIN, 1024); 

//    fputs ($SMTPIN, "STARTTLS\r\n");  
//    $talk["STARTTLS"]=fgets($SMTPIN, 1024); 

      fputs($SMTPIN, "auth login\r\n");
      $talk["res"]=fgets($SMTPIN, 1024);

      fputs($SMTPIN, $this->SmtpUser."\r\n");    <<<----- riga 55
      $talk["user"]=fgets($SMTPIN, 1024);
 
Ultima modifica:

cyber

Nuovo Utente
11 Mag 2012
29
0
0
Cagliari
se aggiungo
Codice:
$mail->$Encoding = 'base64';
mi dice
Codice:
Fatal error: Cannot access empty property in /var/www/virtual/miosito.it/htdocs/prova/index2.php on line 14
la riga 14 è appunto
Codice:
$mail->$Encoding = 'base64';