Bagaimana cara mengkonfigurasi XAMPP untuk mengirim email dari localhost?

255

Saya mencoba mengirim email dari localhost. tetapi saya tidak dapat mengirim surat dari localhost sehingga siapa pun dapat memberitahu saya bahwa cara mengkonfigurasi ulang xampp saya untuk mengirim email dari localhost

sharih farid
sumber
3
Bisakah kami melihat kode Anda?
aizaz
2
Tidak mungkin membantu jika Anda tidak memberi kami konfigurasi saat ini.
arkascha
1
Apakah ini masih relevan dengan Merkuri yang disertakan (ApacheFriends XAMPP 1.8.2)? Saya akan berpikir ya, tetapi jika ada orang yang lebih memilih Merkurius, harap sebutkan di bawah ini. :) terima kasih!
es
Kemungkinan duplikat sendmail.exe terbuka saat mengirim surat
Pascal

Jawaban:

371

Anda dapat mengirim email dari localhost dengan paket sendmail, paket sendmail inbuild di XAMPP. Jadi jika Anda menggunakan XAMPP maka Anda dapat dengan mudah mengirim email dari localhost.

misalnya Anda dapat mengkonfigurasi C:\xampp\php\php.inidan c:\xampp\sendmail\sendmail.iniuntuk gmail untuk mengirim email.

di C:\xampp\php\php.initemukan extension=php_openssl.dlldan hapus tanda titik koma dari awal baris itu untuk membuat SSL berfungsi untuk gmail untuk localhost.

dalam file php.ini cari [mail function]dan ubah

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

Sekarang Buka C:\xampp\sendmail\sendmail.ini. Ganti semua kode yang ada di sendmail.ini dengan kode berikut

[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

Sekarang kamu sudah selesai !! buat file php dengan fungsi email dan kirim email dari localhost.

PS: jangan lupa ganti my-gmail-id dan my-gmail-password di kode di atas. Juga, jangan lupa untuk menghapus kunci duplikat jika Anda menyalin pengaturan dari atas. Misalnya komentar mengikuti baris ini jika ada sendmail_path lain : sendmail_path="C:\xampp\mailtodisk\mailtodisk.exe"di file php.ini

Ingat juga untuk me-restart server menggunakan panel kontrol XAMMP sehingga perubahannya berlaku.

Untuk gmail, silakan periksa https://support.google.com/accounts/answer/6010255 untuk memungkinkan akses dari aplikasi yang kurang aman.

Untuk mengirim email di Linux (dengan paket sendmail) melalui Gmail dari localhost, periksa PHP + Ubuntu Kirim email menggunakan formulir gmail localhost .

Vikas Dwivedi
sumber
3
selain konfigurasi di atas, saya perlu memperbarui sendmail glob.com.au/sendmail
kaz
1
Saya harus memutakhirkan dari XAMMP 1.7.7 ke 2.8.2.3 - sendmail termasuk dalam XAMPP yang lebih baru. Saya mencoba menggunakan sendmail yang lebih baru dengan 1.7.7 beberapa bulan yang lalu dan tidak bisa berfungsi - akhirnya menggigit peluru dan menggunakan XAMPP baru dan berfungsi seperti yang dijelaskan.
VanAlbert
2
Saya percaya lokasi C: \ xampp \ php \ php.ini merujuk ke lingkungan windows. Untuk mac lihat di xamppfiles / etc untuk file php.ini Anda.
Paul Trotter
3
@Vikas menjawab adalah yang terbaik, tetapi harap dicatat bahwa menggunakan ssl default di smtp_port mungkin tidak berfungsi dalam kondisi tertentu, menggunakan 465 karena Thirumalai murugan jawaban telah benar-benar memperbaikinya untuk saya
Temitayo
2
Ini berfungsi sempurna dengan XAMPP versi 7.0.15 Jangan lupa untuk menghapus tanda titik koma darinya dan juga login ke id Gmail yang sama yang telah Anda konfigurasi kemudian buka tautan di bawah myaccount.google.com/lesssecureapps?pli=1 dan Izinkan aplikasi yang kurang aman: HIDUP Sekarang Anda dapat mengirim Mail langsung dari XAMPP localhost
raftaar1191
35

Dalam XAMPP v3.2.1 untuk tujuan pengujian Anda dapat melihat email yang XAMPP kirim dalam XAMPP / mailoutput. Dalam kasus saya di Windows 8 ini tidak memerlukan konfigurasi tambahan dan merupakan solusi sederhana untuk menguji email

Paul Trotter
sumber
1
Dan jika ini tidak berhasil, periksa c:\xampp\php\php.ini, cari [mail function], dan batalkan komentar pada baris yang menyebutkan mailtodisk.exe. Biarkan setiap baris lainnya di bagian ini dikomentari kecuali untuk yang mail.add_x_headersatu.
Tim Malone
3
Sebagai tambahan komentar saya di atas, untuk versi XAMPP yang lebih baru, Anda mungkin perlu menambahkan baris mailtodisk secara manual. Seharusnya terlihat seperti ini:sendmail_path="C:\xampp\mailtodisk\mailtodisk.exe"
Tim Malone
Tambahan tambahan untuk komentar dari @TimMalone. Saya menemukan bahwa surat hanya akan ditulis ke XAMPP / mailoutput jika menjalankan XAMPP sebagai admin
sohail
@sohail: Anda tidak harus menjalankan XAMPP sebagai admin tetapi Anda harus memberikan izin kepada semua pengguna untuk menulis ke folder XAMPP / mailoutput (klik kanan pada folder> keamanan> semua pengguna> edit izin> akses penuh)
cheppsn
@TimMalone Saya telah menerapkan kedua saran tetapi tidak ada dalam direktori mailoutput bahkan setelah mencoba begitu banyak
Vipul Hadiya
25

Sangat mudah untuk mengirim email di localhost atau server lokal

Catatan: Saya menggunakan perangkat lunak server surat uji pada Windows 7 64bit dengan Xampp diinstal

Cukup unduh alat uji server surat dan instal sesuai dengan instruksi yang diberikan di situs web Alat Uji Server Surat

Sekarang Anda hanya perlu mengubah dua baris di bawah php.inifile

  1. Temukan [mail function]dan hapus titik koma yang sebelumnya;smtp = localhost
  2. Masukkan tanda titik koma sebelumnya sendmail_path = "C:\xampp\mailtodisk\mailtodisk.exe"

Anda tidak perlu mengubah apa pun, tetapi jika Anda masih belum mendapatkan email selain memeriksa untuk itu SMTP port, nomor port harus sama.

Metode di atas adalah untuk pengaturan default yang disediakan oleh perangkat lunak Xampp.

Vikas Khunteta
sumber
7
Jika Anda tidak mempercayai situs itu, Anda mungkin ingin menggunakan potongan kertas dari codeplex sebagai gantinya: papercut.codeplex.com .
Marcel Burkhard
Saya tidak perlu melakukan apa pun untuk membuatnya bekerja, cukup instal.
vonUbisch
Saya hanya perlu mengubah port
Pablo SG Pacheco
Apa nama pengguna & kata sandi dalam contoh ini?
Eoin
@Gunakan nama pengguna & kata sandi apa?
Vikas Khunteta
23

Anda dapat menguji kirim email di PC Anda tanpa Internet

Anda harus menggunakan Papercut aplikasi sederhana ini untuk menguji mengirim email. dan Anda tidak perlu mengkonfigurasi apa pun.

Jalankan saja dan coba tes kirim email:

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);
?>

dan Anda akan melihat ini:

masukkan deskripsi gambar di sini

Saya harap Anda akan memiliki hari yang baik. Anda dapat menemukan saya di Youtube untuk tutorial lebih lanjut Piseth Sok

Bersorak!

Piseth Sok
sumber
1
Ini adalah solusi yang sangat hebat, cepat mudah dan saya bisa langsung bekerja. Menjejali server mail secara lokal adalah hal yang merepotkan ketika hanya untuk dev.
AdheneManx
1
Terima kasih saya menggunakan ini untuk menguji proyek saya juga.
Piseth Sok
19

Anda harus mengkonfigurasi SMTP di server Anda. Anda dapat menggunakan SMTP G Suite oleh Google secara gratis:

<?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 :(";
}

?>

Baca lebih lanjut di PHPMailer sini .

Thirumalai murugan
sumber
@Vikas menjawab adalah yang terbaik, tetapi harap dicatat bahwa menggunakan ssl default pada smtp_port mungkin tidak berfungsi dalam kondisi tertentu, menggunakan 465 karena jawaban ini telah menyatakan benar-benar memperbaikinya untuk saya
Temitayo
Saya menggunakan @Vikas menjawab tetapi saya menggunakan sebuah fragmen dari Anda yaitu menggunakan 465 sebagai emtp_port. Kerja bagus sih
Temitayo
Kesalahan fatal: Kelas 'PHPMailer' tidak ditemukan di C: \ xampp \ htdocs \ myweb \ email_script.php on line 82
Shafizadeh
8

Seperti dalam pengalaman pribadi saya, saya menemukan bahwa hal yang sangat mirip dengan jawaban Vikas Dwivedi akan bekerja dengan baik.

Langkah 1 (file php.ini)

Dalam file php.ini terletak di xampp\php\php.ini. Ubah pengaturan sebagai berikut:

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

Matikan variabel lain di bawah mail funcitondengan meletakkan ;sebelum mereka. misalnya;smtp_port=25

Langkah 2 (file sendmail.ini)

Di sendmail.ini yang terletak di xampp \ sendmail \ semdmail.ini ubah sebagai berikut:

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

Langkah 3 (kode)

Buat file php dan gunakan yang berikut ini:

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

Memperhatikan

  • Anda harus memulai ulang apache agar php.ini dapat dimuat ulang.
  • Anda perlu mengaktifkan akses aplikasi Google Kurang aman di https://myaccount.google.com/u/1/security
  • Mungkin membantu menjalankan Xampp dengan izin Admin.
Tikar
sumber
2

Kode ini digunakan untuk surat dari XAMPP host lokal Anda dan akun Gmail Anda. Kode ini sangat mudah dan berfungsi untuk saya coba sendiri.

Di bawah ini Ubah 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 bawah ini Ubah 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  

Silakan tulis kode belove di file PHP Anda untuk mengirim email

<?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
sumber
0

Anda harus menentukan SMTPserver dan port untuk ini. Semua kecuali suka mengirim email dari host langsung.

Ini adalah tautan yang bermanfaat mengenai hal ini .

NB: Port harus tidak digunakan. Harap berhati-hati, Beberapa aplikasi suka Skypemenggunakan port default dan mencegah pengiriman email.

Wisnu R
sumber
Anda dapat mencegah skype dari menggunakan port 80. pengaturan koneksi pada skype
astroanu
0

hanya menghabiskan lebih dari satu jam mencoba membuat ini berhasil. untuk semua orang yang memiliki masalah yang sama dengan semua saran yang diposting tidak berfungsi: Anda harus memulai ulang Apache di XAMPP Anda di muka! restart XAMPP tidak akan berfungsi !!

pengguna3065579
sumber
0

Saya mencoba banyak cara untuk mengirim email dari XAMPP Localhost, tetapi karena XAMPP belum memiliki Sertifikat SSL, permintaan email saya diblokir oleh Gmail atau penyedia Layanan SMTP serupa.

Lalu saya menggunakan MailHog untuk server smtp lokal, yang perlu Anda lakukan hanyalah menjalankannya. localhost: 1025 untuk server smtp, localhost: 8025 untuk server mail, tempat Anda dapat memeriksa email yang Anda kirim.

ini kode saya:

    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!";
    }

Tautan Repositori MailHog Github

uyghurbeg
sumber
0

selain semua jawaban, harap dicatat bahwa dalam sendmail.inifile:

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

karena masalah keamanan Google yang baru, Anda harus mengikuti langkah-langkah ini untuk membuat kata sandi aplikasi untuk tujuan ini:

  1. buka https://accounts.google.com/ di tab keamanan
  2. aktifkan verifikasi dua langkah
  3. kembali ke tab keamanan dan buat kata sandi aplikasi (dalam menu tarik-turun pilih aplikasi Anda dapat memilih 'lain')
ashkan nasirzadeh
sumber