Come configurare XAMPP per inviare posta da localhost?


255

Sto cercando di inviare posta da localhost. ma non sono in grado di inviare la posta da localhost, quindi qualcuno può dirmi come riconfigurare il mio xampp per inviare posta da localhost


3
Possiamo vedere il tuo codice?
aizaz,

2
Impossibile aiutarti se non ci dai la configurazione corrente.
Arkascha,

1
Questo è ancora rilevante con Mercury incluso (ApacheFriends XAMPP 1.8.2)? Penserei di sì, ma se ci sono persone che preferiscono Mercurio, si prega di indicare di seguito. :) Grazie!
acqua ghiacciata

Risposte:


371

Puoi inviare posta da localhost con il pacchetto sendmail, il pacchetto sendmail è integrato in XAMPP. Quindi, se stai usando XAMPP, puoi facilmente inviare posta da localhost.

ad esempio è possibile configurare C:\xampp\php\php.inie c:\xampp\sendmail\sendmail.iniper gmail inviare posta.

in C:\xampp\php\php.initrova extension=php_openssl.dlle rimuove il punto e virgola dall'inizio di quella riga per far funzionare SSL per gmail per localhost.

nel file php.ini trova [mail function]e modifica

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

Ora aperta C:\xampp\sendmail\sendmail.ini. Sostituisci tutto il codice esistente in sendmail.ini con il seguente codice

[sendmail]

smtp_server=smtp.gmail.com
smtp_port=587
error_logfile=error.log
debug_logfile=debug.log
auth_username=my-gmail-id@gmail.com
auth_password=my-gmail-password
force_sender=my-gmail-id@gmail.com

Ora hai fatto !! crea file php con funzione mail e invia mail da localhost.

PS: non dimenticare di sostituire my-gmail-id e my-gmail-password nel codice sopra. Inoltre, non dimenticare di rimuovere le chiavi duplicate se hai copiato le impostazioni dall'alto. Ad esempio commentare la seguente riga se esiste un altro sendmail_path : sendmail_path="C:\xampp\mailtodisk\mailtodisk.exe"nel file php.ini

Ricorda inoltre di riavviare il server utilizzando il pannello di controllo XAMMP in modo che le modifiche abbiano effetto.

Per gmail, controlla https://support.google.com/accounts/answer/6010255 per consentire l'accesso da app meno sicure.

Per inviare e-mail su Linux (con pacchetto sendmail) tramite Gmail da localhost, controlla PHP + Ubuntu Invia e-mail usando gmail da localhost .


3
a parte le configurazioni di cui sopra, dovevo aggiornare il mio sendmail glob.com.au/sendmail
kaz

1
Ho dovuto eseguire l'aggiornamento da XAMMP 1.7.7 a 2.8.2.3 - sendmail è incluso nel nuovo XAMPP. Ho provato a utilizzare un nuovo sendmail con 1.7.7 qualche mese fa e non sono riuscito a farlo funzionare - finalmente ho morso il proiettile e ho usato il nuovo XAMPP e funziona come descritto.
VanAlbert,

2
Credo che la posizione C: \ xampp \ php \ php.ini si riferisca agli ambienti Windows. Per mac cerca in xamppfiles / etc il tuo file php.ini.
Paul Trotter,

3
La risposta di @Vikas è stata la migliore, ma per favore nota che l'uso dell'ssl predefinito su smtp_port potrebbe non funzionare in determinate condizioni, usando 465 come la risposta di Thirumalai murugan mi ha effettivamente risolto il problema
Temitayo

2
Funziona perfettamente con XAMPP versione 7.0.15 Non dimenticare di rimuovere il punto e virgola da esso e accedere allo stesso ID Gmail che hai configurato, quindi vai al link seguente myaccount.google.com/lesssecureapps?pli=1 e Consenti app meno sicure: ON Ora puoi inviare la posta direttamente
dall'host

35

In XAMPP v3.2.1 a scopo di test è possibile visualizzare le e-mail che XAMPP invia in XAMPP / mailoutput. Nel mio caso su Windows 8 ciò non richiedeva alcuna configurazione aggiuntiva ed era una soluzione semplice per testare la posta elettronica


1
E se questo non funziona, controlla c:\xampp\php\php.ini, cerca [mail function]e rimuovi il commento dalla riga menzionata mailtodisk.exe. Mantieni commentate tutte le altre righe di questa sezione tranne mail.add_x_headerquella.
Tim Malone,

3
Come aggiunta al mio commento sopra, per le versioni più recenti di XAMPP, potrebbe essere necessario aggiungere manualmente la riga del mailtodisk. Dovrebbe assomigliare a questo:sendmail_path="C:\xampp\mailtodisk\mailtodisk.exe"
Tim Malone,

Un addendum aggiuntivo per commentare da @TimMalone. Ho scoperto che la posta sarebbe stata scritta su XAMPP / mailoutput solo se si eseguiva XAMPP come admin
sohail

@sohail: non è necessario eseguire XAMPP come amministratore ma è necessario autorizzare tutti gli utenti a scrivere nella cartella XAMPP / mailoutput (fare clic con il tasto destro sulla cartella> sicurezza> tutti gli utenti> modifica autorizzazioni> accesso completo)
cheppsn

@TimMalone Ho applicato entrambi i suggerimenti ma nulla nella directory mailoutput anche dopo tanti tentativi
Vipul Hadiya,

25

È molto semplice inviare e-mail su localhost o server locale

Nota: sto usando il software del server di posta di prova su Windows 7 64 bit con Xampp installato

Basta scaricare lo strumento del server di posta di prova e installarlo secondo le istruzioni fornite sul sito Web Test Mail Server Tool

Ora devi cambiare solo due righe nel php.inifile

  1. Trova [mail function]e rimuovi i due punti che è prima;smtp = localhost
  2. Metti il ​​punto e virgola prima sendmail_path = "C:\xampp\mailtodisk\mailtodisk.exe"

Non è necessario modificare nient'altro, ma se non si ricevono ancora e-mail che controllare per SMTP port, il numero di porta deve essere lo stesso.

Il metodo sopra è per le impostazioni predefinite fornite dal software Xampp.


7
Se non ti fidi di quel sito, potresti voler usare papercut da codeplex: papercut.codeplex.com .
Marcel Burkhard

Non ho dovuto fare nulla per farlo funzionare, basta installarlo.
vonUbisch,

Ho dovuto cambiare il porto però
Pablo SG Pacheco il

Che cos'è username e password in questa istanza?
Eoin

@Eoin nome utente e password di cosa?
Vikas Khunteta,

23

Puoi provare a inviare la posta sul tuo PC senza Internet

dovresti usare Papercut questa semplice applicazione per testare l'invio di posta. e non è necessario configurare nulla.

Basta eseguirlo e provare a inviare e-mail di prova:

test_sendmail.php

<?php
$to = "somebody@example.com";
$subject = "My subject";
$txt = "Hello world!";
$headers = "From: webmaster@example.com" . "\r\n" .
"CC: somebodyelse@example.com";

mail($to,$subject,$txt,$headers);
?>

e vedrai questo:

inserisci qui la descrizione dell'immagine

Spero che tu abbia una buona giornata. puoi trovarmi su Youtube per ulteriori tutorial Piseth Sok

Cheer!


1
Questa è davvero un'ottima soluzione, facile e veloce e riesco a mettermi subito al lavoro. Farcela con i server di posta localmente è una seccatura quando è solo per gli sviluppatori.
AdheneManx,

1
Grazie l'ho usato anche per testare il mio progetto.
Piseth ha cantato il

19

Devi configurare SMTP sul tuo server. Puoi utilizzare G Suite SMTP di Google gratuitamente:

<?php

$mail = new PHPMailer(true);

// Send mail using Gmail
if($send_using_gmail){
    $mail->IsSMTP(); // telling the class to use SMTP
    $mail->SMTPAuth = true; // enable SMTP authentication
    $mail->SMTPSecure = "ssl"; // sets the prefix to the servier
    $mail->Host = "smtp.gmail.com"; // sets GMAIL as the SMTP server
    $mail->Port = 465; // set the SMTP port for the GMAIL server
    $mail->Username = "your-gmail-account@gmail.com"; // GMAIL username
    $mail->Password = "your-gmail-password"; // GMAIL password
}

// Typical mail data
$mail->AddAddress($email, $name);
$mail->SetFrom($email_from, $name_from);
$mail->Subject = "My Subject";
$mail->Body = "Mail contents";

try{
    $mail->Send();
    echo "Success!";
} catch(Exception $e){
    // Something went bad
    echo "Fail :(";
}

?>

Leggi di più PHPMailer qui .


La risposta di @Vikas è stata la migliore, ma tieni presente che l'utilizzo dell'ssl predefinito su smtp_port potrebbe non funzionare in determinate condizioni, utilizzando 465 poiché questa risposta ha dichiarato che in realtà è stato risolto per me
Temitayo,

Ho usato la risposta @Vikas ma ho usato un frammento del tuo, cioè usando 465 come emtp_port. Ottimo lavoro comunque
Temitayo

Errore irreversibile: classe 'PHPMailer' non trovata in C: \ xampp \ htdocs \ myweb \ email_script.php sulla linea 82
Shafizadeh,

8

Come nella mia esperienza personale, ho scoperto che una cosa molto simile alla risposta di Vikas Dwivedi funzionerà perfettamente.

Passaggio 1 (file php.ini)

Nel file php.ini che si trova in xampp\php\php.ini. Modificare le impostazioni come segue:

 extension=php_openssl.dll
 [mail function]
 sendmail_path =":\xampp7\sendmail\sendmail.exe -t"
 mail.add_x_header=On

Disattiva le altre variabili mail funcitoninserendole ;prima. per esempio;smtp_port=25

Passaggio 2 (file sendmail.ini)

In sendmail.ini che si trova in xampp \ sendmail \ semdmail.ini cambia quanto segue:

 smtp_server=smtp.gmail.com
 smtp_port=465
 smtp_ssl=auto
 auth_username=address@gmail.com
 auth_password=YourPassword

Passaggio 3 (codice)

Crea un file php e usa quanto segue:

 <?php
    mail($to, "subject", "body", "From: ".$from);
 ?>

Avviso

  • È necessario riavviare apache per poter ricaricare php.ini.
  • devi attivare l'accesso all'app Google Meno sicuro in https://myaccount.google.com/u/1/security
  • Potrebbe essere utile eseguire Xampp con il permesso di amministratore.

2

Questo codice viene utilizzato per la posta dal tuo localhost XAMPP e dal tuo account Gmail. Questo codice è molto semplice e per me prova a provare te stesso.

Di seguito cambia nel file php.ini

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

Di seguito cambia nel file sendmail.ini

smtp_server=smtp.gmail.com
smtp_port=587
error_logfile=error.log
debug_logfile=debug.log 
auth_username=yourmail@gmail.com 
auth_password=your-gmail-password 
force_sender=yourmail@gmail.com  

Si prega di scrivere il codice di belove nel file PHP per inviare e-mail

<?php 
    $to = "tomail@gmail.com";
    $subject = "Test Mail";
    $headers = "From: from_mail@gmail.com\r\n";
    $headers .= "Reply-To: replytomail@gmail.com\r\n";
    $headers .= "CC: theassassin.edu@gmail.com\r\n";
    $headers .= "MIME-Version: 1.0\r\n";
    $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
    $message = '<html><body>';
    $message .= '<img src="//css-tricks.com/examples/WebsiteChangeRequestForm/images/wcrf-header.png" alt="Website Change Request" />';
    $message .= '<table rules="all" style="border-color: #666;" cellpadding="10">';
    $message .= "<tr style='background: #eee;'><td><strong>Name:</strong> </td><td>Details</td></tr>";
    $message .= "<tr><td><strong>Email:</strong> </td><td>Details</td></tr>";
    $message .= "<tr><td><strong>Type of Change:</strong> </td><td>Details</td></tr>";
    $message .= "<tr><td><strong>Urgency:</strong> </td><td>Details</td></tr>";
    $message .= "<tr><td><strong>URL To Change (main):</strong> </td><td>Details</td></tr>";
    $addURLS = 'google.com';
    if (($addURLS) != '') {
        $message .= "<tr><td><strong>URL To Change (additional):</strong> </td><td>" . $addURLS . "</td></tr>";
    }
    $curText = 'dummy text';           
    if (($curText) != '') {
        $message .= "<tr><td><strong>CURRENT Content:</strong> </td><td>" . $curText . "</td></tr>";
    }
    $message .= "<tr><td><strong>NEW Content:</strong> </td><td>New Text</td></tr>";
    $message .= "</table>";
    $message .= "</body></html>";

    if(mail($to,$subject,$message,$headers))
    {
        echo "Mail Send Sucuceed";
    }
    else{
        echo "Mail Send Failed";    
    }
?>

0

Devi definire un SMTPserver e una porta per questo. Tutti tranne l'invio di mail da host live.

Questo è un link utile a riguardo .

NB: la porta non deve essere utilizzata. Si prega di fare attenzione che, alcune applicazioni come Skypeutilizzano le porte predefinite e impediscono l'invio di posta.


Puoi impedire a skype di usare la porta 80. è sulle impostazioni di connessione di skype
astroanu

0

ho trascorso più di un'ora a cercare di farlo funzionare. per tutti coloro che hanno lo stesso problema con tutti i suggerimenti pubblicati che non funzionano: devi riavviare Apache nella tua interfaccia XAMPP! il riavvio di XAMPP non funzionerà !!


0

Ho provato molti modi per inviare una mail da XAMPP Localhost, ma poiché XAMPP non ha un certificato SSL, la mia richiesta e-mail è stata bloccata da Gmail o provider di servizi SMTP simili.

Quindi ho usato MailHog per il server SMTP locale, quello che devi fare è semplicemente eseguirlo. localhost: 1025 è per il server smtp, localhost: 8025 è per il server di posta, dove è possibile controllare le e-mail inviate.

ecco il mio codice:

    require_once "src/PHPMailer.php";
    require_once "src/SMTP.php";
    require_once "src/Exception.php";

    $mail = new PHPMailer\PHPMailer\PHPMailer();

      //Server settings
    $mail->SMTPDebug = 3;                      // Enable verbose debug output
    $mail->isSMTP();                                            // Send using SMTP
    $mail->Host       = 'localhost';                    // Set the SMTP server to send through
    $mail->Port       = 1025;                                    // TCP port to connect to
    // $mail->Username   = '';                     // SMTP username
    // $mail->Password   = '';                               // SMTP password
    // $mail->SMTPAuth   = true;                                   // Enable SMTP authentication
    // $mail->SMTPSecure = 'tls';         // Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` also accepted

    //Recipients
    $mail->setFrom('testtoo@testto.com', 'Mailer');
    $mail->addAddress('testtoo@webbamail.com', 'Joe User');     // Add a recipient

    // Content
    $mail->isHTML(true);                                  // Set email format to HTML
    $mail->Subject = 'Here is the subject';
    $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';

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

Link al repository Github di MailHog


0

oltre a tutte le risposte si ricorda che nel sendmail.inifile:

auth_password = this-is- Not -your-Gmail-password

a causa di nuovi problemi di sicurezza di Google, è necessario seguire questi passaggi per creare una password dell'applicazione a questo scopo:

  1. vai su https://accounts.google.com/ nella scheda Sicurezza
  2. attiva la verifica in due passaggi
  3. torna alla scheda sicurezza e crea una password per l'app (nel menu a discesa Seleziona app puoi scegliere "altro")
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.