วิธีกำหนดค่า XAMPP เพื่อส่งจดหมายจาก localhost


255

ฉันพยายามส่งจดหมายจาก localhost แต่ฉันไม่สามารถส่งจดหมายจาก localhost ได้ดังนั้นใครสามารถบอกฉันได้ว่าวิธีการกำหนดค่า xampp ของฉันเพื่อส่งจดหมายจาก localhost


3
เราเห็นรหัสของคุณได้ไหม
aizaz

2
เป็นไปไม่ได้ที่จะช่วยถ้าคุณไม่ให้การตั้งค่าปัจจุบันกับเรา
arkascha

1
สิ่งนี้ยังเกี่ยวข้องกับ Mercury หรือไม่ (ApacheFriends XAMPP 1.8.2) ฉันคิดว่าใช่ แต่ถ้ามีคนชอบปรอทกรุณาระบุด้านล่าง :) ขอบคุณ!
icedwater

ซ้ำเป็นไปได้ของsendmail.exe เปิดในการส่งจดหมาย
Pascal

คำตอบ:


371

คุณสามารถส่งจดหมายจาก localhost ด้วยแพ็คเกจ sendmail, แพคเกจ sendmail นั้นอยู่ใน XAMPP ดังนั้นหากคุณใช้ XAMPP คุณสามารถส่งจดหมายจาก localhost ได้อย่างง่ายดาย

ตัวอย่างเช่นคุณสามารถกำหนดค่าC:\xampp\php\php.iniและc:\xampp\sendmail\sendmail.iniให้ Gmail ส่งอีเมล

ในการC:\xampp\php\php.iniค้นหาextension=php_openssl.dllและลบเครื่องหมายอัฒภาคจากจุดเริ่มต้นของบรรทัดนั้นเพื่อให้ SSL ใช้งานได้กับ gmail สำหรับ localhost

ในไฟล์ php.ini ค้นหา[mail function]และเปลี่ยนแปลง

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

C:\xampp\sendmail\sendmail.iniตอนนี้เปิด แทนที่รหัสที่มีอยู่ทั้งหมดใน sendmail.ini ด้วยรหัสต่อไปนี้

[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

ตอนนี้คุณได้ทำ !! สร้างไฟล์ php ด้วยฟังก์ชั่นเมลและส่งเมลจาก localhost

PS: อย่าลืมแทนที่my-gmail-idและ my-gmail-passwordในรหัสด้านบน นอกจากนี้อย่าลืมลบคีย์ที่ซ้ำกันหากคุณคัดลอกการตั้งค่าจากด้านบน ตัวอย่างเช่นคอมเม้นต์บรรทัดต่อไปนี้หากมีsendmail_pathอีกอัน: sendmail_path="C:\xampp\mailtodisk\mailtodisk.exe"ในไฟล์ php.ini

อย่าลืมรีสตาร์ทเซิร์ฟเวอร์โดยใช้แผงควบคุม XAMMP เพื่อให้การเปลี่ยนแปลงมีผล

สำหรับ gmail โปรดตรวจสอบhttps://support.google.com/accounts/answer/6010255เพื่ออนุญาตการเข้าถึงจากแอปที่ปลอดภัยน้อยกว่า

ส่งอีเมลบน Linux (กับแพคเกจ sendmail) ผ่าน Gmail จาก localhost โปรดตรวจสอบPHP + Ubuntu ส่งอีเมลโดยใช้แบบฟอร์มการ localhost


3
อื่น ๆ นอกเหนือจากการกำหนดค่าดังกล่าวข้างต้นที่ผมต้องปรับปรุง sendmail ของฉันglob.com.au/sendmail
Kaz

1
ฉันต้องอัปเกรดจาก XAMMP 1.7.7 เป็น 2.8.2.3 - sendmail รวมอยู่ใน XAMPP ที่ใหม่กว่า ฉันลองใช้ sendmail ที่ใหม่กว่าด้วย 1.7.7 เมื่อไม่กี่เดือนที่ผ่านมาและไม่สามารถใช้งานได้ - ในที่สุดก็กระสุนและใช้ XAMPP ใหม่และใช้งานได้ตามที่อธิบายไว้
VanAlbert

2
ฉันเชื่อว่าตำแหน่งที่ตั้ง C: \ xampp \ php \ php.ini หมายถึงสภาพแวดล้อมของ windows สำหรับ mac ดูใน xamppfiles / etc สำหรับไฟล์ php.ini ของคุณ
พอลทร็อตเตอร์

3
@Vikas คำตอบดีที่สุด แต่โปรดทราบว่าการใช้ ssl เริ่มต้นบน smtp_port อาจใช้งานไม่ได้ในบางสถานการณ์โดยใช้ 465 เนื่องจากคำตอบของ Thirumalai murugan ได้ระบุไว้จริง ๆ แล้วแก้ไขให้ฉัน
Temitayo

2
มันทำงานได้อย่างสมบูรณ์แบบกับ XAMPP เวอร์ชัน 7.0.15 อย่าลืมลบเซมิโคลอนออกจากนั้นและลงชื่อเข้าใช้ Gmail ID เดียวกับที่คุณกำหนดค่าจากนั้นไปที่ลิงค์ด้านล่างmyaccount.google.com/lesssecureapps?pli=1 และ อนุญาตแอปที่ปลอดภัยน้อยลง: เปิดตอนนี้คุณสามารถส่งจดหมายโดยตรงจาก XAMPP localhost
raftaar1191

35

ใน XAMPP v3.2.1 เพื่อการทดสอบคุณสามารถดูอีเมลที่ XAMPP ส่งใน XAMPP / mailoutput ในกรณีของฉันใน Windows 8 สิ่งนี้ไม่จำเป็นต้องมีการกำหนดค่าเพิ่มเติมใด ๆ และเป็นวิธีง่ายๆในการทดสอบอีเมล


1
และถ้าไม่ได้ทำงานตรวจสอบของคุณc:\xampp\php\php.iniมองหา[mail function]และ uncomment mailtodisk.exeบรรทัดที่กล่าวถึง ให้ทุกบรรทัดอื่น ๆ ในส่วนนี้แสดงความคิดเห็นยกเว้นสายmail.add_x_headerหนึ่ง
Tim Malone

3
ในฐานะที่เป็นส่วนเสริมสำหรับความคิดเห็นของฉันด้านบนสำหรับ XAMPP รุ่นล่าสุดคุณอาจต้องเพิ่มบรรทัด mailtodisk ด้วยตนเอง ควรมีลักษณะบางอย่างเช่นนี้:sendmail_path="C:\xampp\mailtodisk\mailtodisk.exe"
ทิมมาโลน

ภาคผนวกเพิ่มเติมเพื่อแสดงความคิดเห็นจาก @TimMalone ฉันพบว่าเมลจะถูกเขียนไปที่ XAMPP / mailoutput เท่านั้นหากใช้ XAMPP ในฐานะผู้ดูแลระบบ
sohail

@sohail: คุณไม่ต้องเรียกใช้ XAMPP ในฐานะผู้ดูแล แต่คุณต้องให้สิทธิ์ผู้ใช้ทุกคนในการเขียนไปยังโฟลเดอร์ XAMPP / mailoutput (คลิกขวาที่โฟลเดอร์> ความปลอดภัย> ผู้ใช้ทั้งหมด> แก้ไขสิทธิ์> เข้าถึงแบบเต็ม)
cheppsn

@TimMalone ข้าพเจ้าได้ใช้ทั้งข้อเสนอแนะ แต่ไม่มีอะไรในไดเรกทอรี mailoutput แม้พยายามหลังจากหลาย
Vipul Hadiya

25

มันง่ายมากที่จะส่งอีเมลบน localhost หรือเซิร์ฟเวอร์ท้องถิ่น

หมายเหตุ: ฉันใช้ซอฟต์แวร์เซิร์ฟเวอร์อีเมลทดสอบใน Windows 7 64 บิตที่ติดตั้ง Xampp

เพียงดาวน์โหลดเครื่องมือเมลเซิร์ฟเวอร์ทดสอบและติดตั้งตามคำแนะนำที่ระบุบนเว็บไซต์เครื่องมือทดสอบเซิร์ฟเวอร์อีเมล

ตอนนี้คุณต้องเปลี่ยนเพียงสองบรรทัดภายใต้php.iniไฟล์

  1. ค้นหา[mail function]และลบเซมิโคลอนที่อยู่ก่อนหน้า;smtp = localhost
  2. ใส่กึ่งโคลอนก่อน sendmail_path = "C:\xampp\mailtodisk\mailtodisk.exe"

คุณไม่จำเป็นต้องเปลี่ยนแปลงอะไรอีก แต่ถ้าคุณยังไม่ได้รับอีเมลมากกว่าตรวจสอบSMTP portหมายเลขพอร์ตจะต้องเหมือนกัน

วิธีการข้างต้นใช้สำหรับการตั้งค่าเริ่มต้นโดยซอฟต์แวร์ Xampp


7
ถ้าคุณไม่ไว้ใจเว็บไซต์ที่คุณอาจต้องการที่จะใช้กระดาษตัดจาก CodePlex แทน: papercut.codeplex.com
Marcel Burkhard

ฉันไม่ต้องทำอะไรเพื่อให้มันทำงานได้แค่ติดตั้ง
vonUbisch

ฉันแค่ต้องเปลี่ยนพอร์ตแม้ว่า
Pablo SG Pacheco

ชื่อผู้ใช้และรหัสผ่านในกรณีนี้คืออะไร?
Eoin

@ ชื่อผู้ใช้และรหัสผ่านของอะไร
Vikas Khunteta

23

คุณสามารถทดสอบส่งอีเมลในพีซีของคุณโดยไม่ใช้อินเทอร์เน็ต

คุณควรใช้Papercutแอพพลิเคชั่นนี้เพื่อทดสอบการส่งจดหมาย และคุณไม่จำเป็นต้องกำหนดค่าอะไรเลย

เพียงแค่เรียกใช้และลองทดสอบส่งอีเมล:

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

และคุณจะเห็นสิ่งนี้:

ป้อนคำอธิบายรูปภาพที่นี่

ฉันหวังว่าคุณจะมีวันที่ดี คุณสามารถหาฉันบนYoutubeสำหรับการกวดวิชาเพิ่มเติมPiseth Sok

เชียร์!


1
นี่เป็นวิธีแก้ปัญหาที่ยอดเยี่ยมง่ายรวดเร็วและฉันสามารถทำงานได้ทันที การบรรจุกับเซิร์ฟเวอร์อีเมลในพื้นที่เป็นเรื่องที่ยุ่งยากเมื่อเป็นเพียงการพัฒนา
AdheneManx

1
ขอบคุณฉันใช้สิ่งนี้เพื่อทดสอบโครงการของฉันด้วย
Piseth Sok

19

คุณต้องกำหนดค่าSMTPบนเซิร์ฟเวอร์ของคุณ คุณสามารถใช้G Suite SMTPโดย Google ได้ฟรี:

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

?>

อ่านเพิ่มเติมเกี่ยวกับที่นี่PHPMailer


@Vikas คำตอบดีที่สุด แต่โปรดทราบว่าการใช้ ssl เริ่มต้นบน smtp_port อาจใช้งานไม่ได้ในบางสถานการณ์โดยใช้ 465 เนื่องจากคำตอบนี้ระบุไว้แล้วจริง ๆ แล้วแก้ไขให้ฉัน
Temitayo

Iused @Vikas คำตอบ แต่ฉันใช้ชิ้นส่วนจากคุณเช่นใช้ 465 เป็น emtp_port ทำงานได้ดีอยู่แล้ว
Temitayo

ข้อผิดพลาดร้ายแรง:ไม่พบคลาส 'PHPMailer' ใน C: \ xampp \ htdocs \ myweb \ email_script.php ที่บรรทัดที่ 82
Shafizadeh

7

จากประสบการณ์ส่วนตัวของฉันฉันพบว่าคำตอบของ Vikas Dwivedi คล้ายกันมากก็ใช้ได้ดี

ขั้นตอนที่ 1 (ไฟล์ php.ini)

ในไฟล์ php.ini xampp\php\php.iniตั้งอยู่ใน เปลี่ยนการตั้งค่าต่อไปนี้:

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

ปิดตัวแปรอื่น ๆmail funcitonโดยวาง;ไว้ข้างหน้า เช่น;smtp_port=25

ขั้นตอนที่ 2 (ไฟล์ sendmail.ini)

ใน sendmail.ini อยู่ใน xampp \ sendmail \ semdmail.ini เปลี่ยนเป็นสิ่งต่อไปนี้:

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

ขั้นตอนที่ 3 (รหัส)

สร้างไฟล์ php และใช้สิ่งต่อไปนี้:

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

แจ้งให้ทราบ

  • คุณต้องรีสตาร์ท apache เพื่อให้ php.ini โหลดซ้ำ
  • คุณต้องเปิดใช้งานการเข้าถึงแอปที่ปลอดภัยน้อยลงของ Google ในhttps://myaccount.google.com/u/1/security
  • มันอาจช่วยให้เรียกใช้ Xampp ด้วยสิทธิ์ผู้ดูแลระบบ

2

รหัสนี้ใช้สำหรับจดหมายจาก localhost XAMPP และบัญชี Gmail ของคุณ รหัสนี้ง่ายมากและใช้งานได้สำหรับฉันลองด้วยตัวเอง

ด้านล่างเปลี่ยนในไฟล์ 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 

ด้านล่างเปลี่ยนเป็นไฟล์ 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  

โปรดเขียนโค้ด belove ในไฟล์ PHP ของคุณเพื่อส่งอีเมล

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

คุณต้องกำหนดSMTPเซิร์ฟเวอร์และพอร์ตสำหรับสิ่งนี้ ทั้งหมดยกเว้นชอบส่งอีเมลจากโฮสต์สด

นี้เป็นลิงค์ที่มีประโยชน์เกี่ยวกับเรื่องนี้

หมายเหตุ: พอร์ตควรไม่ได้ใช้ โปรดระวังว่าแอพพลิเคชั่นบางตัวเช่นSkypeใช้พอร์ตเริ่มต้นและป้องกันการส่งเมล


คุณสามารถป้องกัน skype ไม่ให้ใช้พอร์ต 80 ได้ในการตั้งค่าการเชื่อมต่อของ skype
astroanu

0

ใช้เวลากว่าหนึ่งชั่วโมงในการพยายามทำงานนี้ สำหรับทุกคนที่มีปัญหาเดียวกันกับคำแนะนำทั้งหมดที่โพสต์ไม่ทำงาน: คุณต้องรีสตาร์ท Apache ใน XAMPP inrerface ของคุณ! เพิ่งเริ่มต้น XAMPP จะไม่ทำงาน !!


0

ฉันลองหลายวิธีในการส่งจดหมายจาก XAMPP Localhost แต่เนื่องจาก XAMPP ไม่มีใบรับรอง SSL คำขออีเมลของฉันถูกบล็อกโดย Gmail หรือผู้ให้บริการ SMTP ที่คล้ายกัน

จากนั้นฉันก็ใช้ MailHog สำหรับเซิร์ฟเวอร์ smtp ในพื้นที่สิ่งที่คุณต้องทำก็แค่เรียกใช้ localhost: 1025 ใช้สำหรับเซิร์ฟเวอร์ smtp, localhost: 8025 ใช้สำหรับเมลเซิร์ฟเวอร์ซึ่งคุณสามารถตรวจสอบอีเมลที่คุณส่ง

นี่คือรหัสของฉัน:

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

ลิงก์ที่เก็บ MailHog Github


0

นอกจากคำตอบทั้งหมดโปรดทราบว่าในsendmail.iniไฟล์:

auth_password = นี้-ล์ไม่ด์ของคุณใช้ Gmail รหัสผ่าน

เนื่องจากข้อกังวลด้านความปลอดภัยของ google ใหม่คุณควรทำตามขั้นตอนเหล่านี้เพื่อสร้างรหัสผ่านแอปพลิเคชันเพื่อจุดประสงค์นี้:

  1. ไปที่https://accounts.google.com/ในแท็บความปลอดภัย
  2. เปิดการยืนยันแบบสองขั้นตอน
  3. กลับไปที่แท็บความปลอดภัยและสร้างรหัสผ่านสำหรับแอป (ในเมนูแบบเลื่อนลงเลือกแอพคุณสามารถเลือก 'อื่น ๆ ')
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.