2013-10-02 19 views
19

Provo a inviare un'email da localhost al mio account di posta elettronica di yahoo utilizzando la funzione php mail(), il ritorno dice che invio l'email ma non ho ricevuto alcuna email . Ho letto e provato molti cosiddetti "modi semplici" per inviare email, ma il risultato è deludente, nessuno di loro funziona per me. Di seguito sono riportati il ​​codice, le configurazioni e il messaggio di errore. Qualcuno può illuminarmi con questo? Grazie.Invia email da localhost che esegue XAMMP in PHP utilizzando il server di posta GMAIL

codice php

<?php 
$to  = '[email protected]'; 
$subject = 'Fake sendmail test'; 
$message = 'If we can read this, it means that our fake Sendmail setup works!'; 
$headers = 'From: [email protected]' . "\r\n" . 
      'Reply-To: [email protected]' . "\r\n" . 
      'X-Mailer: PHP/' . phpversion(); 

if(mail($to, $subject, $message, $headers)) { 
    echo 'Email sent successfully!'; 
} else { 
    die('Failure: Email was not sent!'); 
} 
?> 

configurazione per php.ini (sto usando server di posta gmail)

SMTP = smtp.gmail.com
smtp_port = 587
sendmail_from = myemail @ gmail.com
sendmail_path = "\" C: \ xampp \ sendmail \ sendmail.exe \ "-t"

configurazione per sendmail.ini

smtp_server = smtp.gmail.com
smtp_port = 587
smtp_ssl = TLS
error_logfile = error.log
debug_logfile = debug.log
auth_username = myemail @ gmail.com
AUTH_PASSWORD = mypassword
[email protected]

messaggio di errore nel log degli errori sendmail con la porta 587

13/10/02 13:36:41: deve dare un comando STARTTLS prima. k4sm129639pbd.11 - gsmtp

+0

Un dettaglio blog: http://goo.gl/O1zw89 –

risposta

19

Here's il link che mi dà la risposta:

[Installa] del "fake sendmail for windows". Se non si utilizza XAMPP è possibile scaricarlo qui: http://glob.com.au/sendmail/sendmail.zip

[Modify] the php.ini file to use it (commented out the other lines): 

[mail function] 
; For Win32 only. 
; SMTP = smtp.gmail.com 
; smtp_port = 25 

; For Win32 only. 
; sendmail_from = <e-mail username>@gmail.com 

; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). 
sendmail_path = "C:\xampp\sendmail\sendmail.exe -t" 

(ignorare il "solo Unix" po ', dal momento che in realtà stiamo usando sendmail)

È quindi necessario configurare il file "sendmail.ini" nella directory in cui è stato installato il sendmail:

[sendmail] 

smtp_server=smtp.gmail.com 
smtp_port=25 
error_logfile=error.log 
debug_logfile=debug.log 
auth_username=<username> 
auth_password=<password> 
force_sender=<e-mail username>@gmail.com 

Per accedere a un account Gmail prote Grazie alla verifica a 2 fattori, sarà necessario creare uno application-specific password. (source)

+0

solo una conferma che questo funziona alla grande (visto che non è stato scelto come una risposta). – Foxhoundn

+3

Penso che gmail ora richieda ssl – happyhardik

+0

Ho cercato questi dettagli di configurazione per 2 giorni, grazie amico, questo post mi ha davvero aiutato a risolvere il problema :). – DDeme

0
require_once "Mail.php"; 

$from = '<from.gmail.com>'; 
$to = '<to.yahoo.com>'; 
$subject = 'Hi!'; 
$body = "Hi,\n\nHow are you?"; 

$headers = array(
    'From' => $from, 
    'To' => $to, 
    'Subject' => $subject 
); 

$smtp = Mail::factory('smtp', array(
     'host' => 'ssl://smtp.gmail.com', 
     'port' => '465', 
     'auth' => true, 
     'username' => '[email protected]', 
     'password' => 'passwordxxx' 
    )); 

$mail = $smtp->send($to, $headers, $body); 

if (PEAR::isError($mail)) { 
    echo('<p>' . $mail->getMessage() . '</p>'); 
} else { 
    echo('<p>Message successfully sent!</p>'); 
} 
+2

Puoi scaricare Mail.php da qui http://pear.php.net/package/Mail/download/ il suo funzionamento corretto –

3

in php.file ini, rimuovere il commento questo

sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t" 
;sendmail_path="C:\xampp\mailtodisk\mailtodisk.exe" 

e in sendmail.ini

smtp_server=smtp.gmail.com 
smtp_port=465 
error_logfile=error.log 
debug_logfile=debug.log 
[email protected] 
auth_password=yourpassword 
[email protected] 
hostname=localhost 

configurare questo one..it sarà opere ... che funziona bene per me.

grazie.

+0

Corretto Uno ... Grazie mille .. – Jana

+0

Ha funzionato per me. Ho appena dovuto configurare il mio account Gmail in "Consenti app meno sicure: ON". Grazie. – Zanoldor

0
[sendmail] 

smtp_server=smtp.gmail.com 
smtp_port=25 
error_logfile=error.log 
debug_logfile=debug.log 
[email protected] 
auth_password=gmailpassword 
[email protected] 

Basti autenticare username e password di posta, allora solo una volta può inviare correttamente la posta da localhost

0

Non dimenticare di generare una seconda password per il tuo account Gmail. Questa nuova password verrà utilizzata nel codice. Leggi questo:

https://support.google.com/accounts/answer/185833

Nella sezione "Come generare una password di App" cliccare su "password per le app", poi sotto "Seleziona app" scegliere "Mail", selezionare il dispositivo e fare clic su "Generate". La seconda password verrà stampata sullo schermo.

0

Il modo più semplice è utilizzare PHPMailer e Gmail SMTP. La configurazione sarebbe come il sotto.

require 'PHPMailer/PHPMailerAutoload.php'; 
$mail = new PHPMailer; 

$mail->isSMTP();        
$mail->Host = 'smtp.gmail.com';    
$mail->SMTPAuth = true;      
$mail->Username = 'Email Address';   
$mail->Password = 'Email Account Password'; 
$mail->SMTPSecure = 'tls';    
$mail->Port = 587;     

Esempio di script e il codice sorgente completo può essere trovato da qui - How to Send Email from Localhost in PHP

0

Controlla la tua spam. la funzione mail() a volte invia la posta allo spam.

+0

Sì, è necessario aggiungere l'IP del server al DNS – Skatox

0

PROVATE QUESTO. FUNZIONA PER ME SEMPRE.

$config['protocol'] = 'smtp'; 
    $config['smtp_host'] = 'ssl://smtp.gmail.com'; 
    $config['smtp_port'] = '465';       //ssl 
    $config['smtp_timeout'] = '7'; 
    $config['smtp_user'] = '[email protected]'; 
    $config['smtp_pass'] = 'pentium409'; 
    $config['charset'] = 'utf-8'; 
    $config['newline'] = "\r\n"; 
    $config['mailtype'] = 'html'; 
    $config['validation'] = TRUE; 
Problemi correlati