Jak skonfigurować XAMPP do wysyłania poczty z hosta lokalnego?

255

Próbuję wysłać pocztę z hosta lokalnego. ale nie jestem w stanie wysłać poczty z localhost, więc każdy może mi powiedzieć, jak zmienić konfigurację mojego xampp, aby wysyłał mail z localhost

farid szejk
źródło
3
Czy możemy zobaczyć Twój kod?
aizaz
2
Nie można pomóc, jeśli nie podasz nam bieżącej konfiguracji.
arkascha
1
Czy nadal dotyczy to dołączonego oprogramowania Mercury (ApacheFriends XAMPP 1.8.2)? Myślę, że tak, ale jeśli są ludzie preferujący Merkurego, proszę wskazać poniżej. :) Dzięki!
icedwater

Odpowiedzi:

370

Możesz wysyłać pocztę z hosta lokalnego za pomocą pakietu sendmail, pakiet sendmail jest wbudowany w XAMPP. Więc jeśli używasz XAMPP, możesz łatwo wysyłać pocztę z localhost.

na przykład możesz skonfigurować C:\xampp\php\php.inii c:\xampp\sendmail\sendmail.inidla Gmaila wysyłać pocztę.

w C:\xampp\php\php.iniznajdź extension=php_openssl.dlli usuń średnik na początku tego wiersza, aby protokół SSL działał dla Gmaila dla hosta lokalnego.

w pliku php.ini znajdź [mail function]i zmień

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

Teraz otwarty C:\xampp\sendmail\sendmail.ini. Zastąp cały istniejący kod w sendmail.ini następującym kodem

[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

Teraz już skończyłeś !! utwórz plik php z funkcją mail i wyślij pocztę z localhost.

PS: nie zapomnij zastąpić my-gmail-id i my-gmail-password w powyższym kodzie. Nie zapomnij również usunąć duplikatów kluczy, jeśli skopiowałeś ustawienia z góry. Na przykład skomentuj następujący wiersz, jeśli istnieje inna ścieżka_wysyłki : sendmail_path="C:\xampp\mailtodisk\mailtodisk.exe"w pliku php.ini

Pamiętaj także o ponownym uruchomieniu serwera za pomocą panelu sterowania XAMMP, aby zmiany zostały wprowadzone.

W przypadku Gmaila sprawdź https://support.google.com/accounts/answer/6010255, aby umożliwić dostęp z mniej bezpiecznych aplikacji.

Aby wysłać wiadomość e-mail w systemie Linux (z pakietem sendmail) za pośrednictwem Gmaila z hosta lokalnego, sprawdź PHP + Ubuntu Wyślij wiadomość e-mail za pomocą Gmaila z adresu localhost .

Vikas Dwivedi
źródło
3
inne niż powyższe konfiguracje, musiałem zaktualizować mój sendmail glob.com.au/sendmail
kaz
1
Musiałem uaktualnić z XAMMP 1.7.7 do 2.8.2.3 - sendmail jest zawarty w nowszym XAMPP. Próbowałem użyć nowszego sendmaila z wersją 1.7.7 kilka miesięcy temu i nie mogłem go uruchomić - w końcu ugryzłem kulę i użyłem nowego XAMPP i działa zgodnie z opisem.
VanAlbert
2
Uważam, że lokalizacja C: \ xampp \ php \ php.ini odnosi się do środowisk Windows. W systemie Mac poszukaj w pliku xamppfiles / etc pliku php.ini.
Paul Trotter
3
Odpowiedź @ Vikas była najlepsza, ale należy pamiętać, że użycie domyślnego ssl na smtp_port może nie działać w pewnych warunkach, przy użyciu 465, ponieważ odpowiedź Thirumalai murugan faktycznie naprawiła to dla mnie
Temitayo
2
Działa idealnie z XAMPP w wersji 7.0.15 Po prostu nie zapomnij usunąć z niego średnika, a także zaloguj się do tego samego identyfikatora Gmaila, który skonfigurowałeś, a następnie przejdź do poniższego łącza myaccount.google.com/lesssecureapps?pli=1 i Zezwalaj na mniej bezpieczne aplikacje: WŁ. Teraz możesz wysłać pocztę bezpośrednio z lokalnego hosta XAMPP
raftaar1191
35

W XAMPP v3.2.1 do celów testowych możesz zobaczyć e-maile, które XAMPP wysyła w XAMPP / mailoutput. W moim przypadku w systemie Windows 8 nie wymagało to żadnej dodatkowej konfiguracji i było prostym rozwiązaniem do testowania poczty e-mail

Paul Trotter
źródło
1
A jeśli to nie działa, sprawdź swoją c:\xampp\php\php.ini, [mail function]odszukaj i odkomentuj wspomnianą linię mailtodisk.exe. Zachowaj komentarz co drugi wiersz w tej sekcji, z wyjątkiem mail.add_x_headerjednego.
Tim Malone
3
Jako dodatek do mojego powyższego komentarza, w przypadku nowszych wersji XAMPP może być konieczne ręczne dodanie wiersza mailtodisk. Powinno to wyglądać sendmail_path="C:\xampp\mailtodisk\mailtodisk.exe"
Tim Malone
Dodatkowy dodatek do komentarza @TimMalone. Odkryłem, że poczta będzie zapisywana do XAMPP / mailoutput tylko jeśli uruchomisz XAMPP jako administrator
sohail
@sohail: Nie musisz uruchamiać XAMPP jako administrator, ale musisz zezwolić wszystkim użytkownikom na pisanie do folderu XAMPP / mailoutput (kliknij prawym przyciskiem myszy folder> bezpieczeństwo> wszyscy użytkownicy> uprawnienia do edycji> pełny dostęp)
cheppsn
@ TimMalone Zastosowałem obie sugestie, ale nic w katalogu mailoutput nawet po tylu próbach
Vipul Hadiya
25

Wysyłanie wiadomości e-mail na localhost lub lokalnym serwerze jest bardzo proste

Uwaga: używam oprogramowania testowego serwera poczty w systemie Windows 7 64bit z zainstalowanym Xampp

Wystarczy pobrać narzędzie testowe serwera pocztowego i zainstalować zgodnie z instrukcją podaną na stronie internetowej Test Mail Server Tool

Teraz musisz zmienić tylko dwa wiersze w php.inipliku

  1. Znajdź [mail function]i usuń średnik, który był wcześniej;smtp = localhost
  2. Wcześniej umieść średnik sendmail_path = "C:\xampp\mailtodisk\mailtodisk.exe"

Nie musisz zmieniać niczego innego, ale jeśli nadal nie otrzymujesz wiadomości e-mail, ale sprawdź SMTP port, numer portu musi być taki sam.

Powyższa metoda dotyczy ustawień domyślnych dostarczonych przez oprogramowanie Xampp.

Vikas Khunteta
źródło
7
Jeśli nie ufasz tej witrynie, możesz zamiast tego użyć Papercut z codeplex: papercut.codeplex.com .
Marcel Burkhard
Nie musiałem nic robić, aby działał, wystarczy go zainstalować.
vonUbisch,
Musiałem tylko zmienić port
Pablo SG Pacheco,
Co to jest nazwa użytkownika i hasło w tym przypadku?
Eoin,
@Eoin nazwa użytkownika i hasło czego?
Vikas Khunteta
23

Możesz przetestować wysyłanie poczty na swoim komputerze bez Internetu

powinieneś użyć Papercut tej prostej aplikacji do przetestowania wysyłania poczty. i nie musisz niczego konfigurować.

Po prostu uruchom go i spróbuj przetestować wysyłanie poczty:

test_sendmail.php

<?php
$to = "[email protected]";
$subject = "My subject";
$txt = "Hello world!";
$headers = "From: [email protected]" . "\r\n" .
"CC: [email protected]";

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

i zobaczysz to:

wprowadź opis zdjęcia tutaj

Mam nadzieję, że będziesz miał dobry dzień. możesz mnie znaleźć na Youtube po więcej samouczków Piseth Sok

Dopingować!

Piseth Sok
źródło
1
To naprawdę świetne rozwiązanie, szybkie i łatwe, a ja mogę od razu zabrać się do pracy. Lokalne zajmowanie się serwerami pocztowymi jest kłopotliwe, gdy dotyczy tylko programistów.
AdheneManx
1
Dzięki, wykorzystałem to również do przetestowania mojego projektu.
Piseth Sok
19

Musisz skonfigurować SMTP na swoim serwerze. Możesz użyć G Suite SMTP firmy Google za darmo:

<?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 = "[email protected]"; // 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 :(";
}

?>

Przeczytaj więcej o PHPMailer tutaj .

Thirumalai murugan
źródło
Odpowiedź @ Vikas była najlepsza, ale należy pamiętać, że użycie domyślnego ssl na smtp_port może nie działać w określonych warunkach, przy użyciu 465, ponieważ ta odpowiedź rzeczywiście naprawiła go dla mnie
Temitayo
Użyłem odpowiedzi @Vikas, ale użyłem twojego fragmentu, tj. Używając 465 jako emtp_port. W każdym razie dobra robota
Temitayo,
Błąd krytyczny: nie znaleziono klasy „PHPMailer” w C: \ xampp \ htdocs \ myweb \ email_script.php w linii 82
Shafizadeh
7

Podobnie jak w moim osobistym doświadczeniu, stwierdziłem, że odpowiedź bardzo podobna do odpowiedzi Vikasa Dwivedi będzie działać dobrze.

Krok 1 (plik php.ini)

W pliku php.ini znajdującym się w xampp\php\php.ini. Zmień ustawienia na następujące:

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

Wyłącz inne zmienne mail funciton, umieszczając ;je przed nimi. na przykład;smtp_port=25

Krok 2 (plik sendmail.ini)

W sendmail.ini znajdującym się w xampp \ sendmail \ semdmail.ini zmień na:

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

Krok 3 (kod)

Utwórz plik php i użyj:

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

Ogłoszenie

  • Musisz ponownie uruchomić Apache, aby przeładować php.ini.
  • musisz aktywować Google Mniej bezpieczny dostęp do aplikacji w https://myaccount.google.com/u/1/security
  • Może pomóc uruchomić Xampp z uprawnieniami administratora.
M at
źródło
2

Ten kod jest używany w przypadku poczty z lokalnego hosta XAMPP i konta Gmail. Ten kod jest bardzo łatwy i działa dla mnie, spróbuj sam.

Poniżej Zmień w pliku 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 

Poniżej Zmień w pliku 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  

Napisz kod w swoim pliku PHP, aby wysłać e-mail

<?php 
    $to = "[email protected]";
    $subject = "Test Mail";
    $headers = "From: [email protected]\r\n";
    $headers .= "Reply-To: [email protected]\r\n";
    $headers .= "CC: [email protected]\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";    
    }
?>
Kishan Sorathiya
źródło
0

W tym celu musisz zdefiniować SMTPserwer i port. Wszystko oprócz wysyłania maili z żywych hostów.

To jest przydatny link w tym zakresie .

Uwaga: Port nie powinien być używany. Pamiętaj, że niektóre aplikacje, takie jak, Skypeużywają domyślnych portów i tam, uniemożliwiając wysyłanie poczty.

Wisznu R.
źródło
Możesz uniemożliwić skypeowi korzystanie z portu 80. jest on
ustawiony w
0

spędziłem ponad godzinę próbując sprawić, by to zadziałało. dla wszystkich, którzy mają ten sam problem z niedziałającymi wszystkimi sugestiami: musisz zrestartować Apache w swoim interfejsie XAMPP! ponowne uruchomienie XAMPP nie będzie działać !!

użytkownik3065579
źródło
0

Próbowałem na wiele sposobów, aby wysłać pocztę z XAMPP Localhost, ale ponieważ XAMPP nie ma certyfikatu SSL, moje zapytanie zostało zablokowane przez Gmaila lub podobnych dostawców usług SMTP.

Następnie użyłem MailHog do lokalnego serwera smtp, wystarczy go uruchomić. localhost: 1025 jest dla serwera smtp, localhost: 8025 jest dla serwera poczty, na którym możesz sprawdzić wysłane e-maile.

oto mój kod:

    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('[email protected]', 'Mailer');
    $mail->addAddress('[email protected]', '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 do repozytorium MailHog Github

uyghurbeg
źródło
0

oprócz wszystkich odpowiedzi należy pamiętać, że w sendmail.inipliku:

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

ze względu na nowe obawy związane z bezpieczeństwem Google, wykonaj następujące kroki, aby utworzyć hasło aplikacji w tym celu:

  1. przejdź na https://accounts.google.com/ na karcie bezpieczeństwa
  2. włącz weryfikację dwuetapową
  3. wróć do karty bezpieczeństwa i utwórz hasło do aplikacji (w menu rozwijanym wybierz aplikację możesz wybrać „inne”)
ashkan nasirzadeh
źródło