279

我正在尝试从本地主机发送邮件。但我无法从本地主机发送邮件,所以任何人都可以告诉我如何重新配置​​我的 xampp 以从本地主机发送邮件

4

11 回答 11

400

您可以使用 sendmail 包从 localhost 发送邮件,sendmail 包在 XAMPP 中内置。因此,如果您使用的是 XAMPP,那么您可以轻松地从 localhost 发送邮件。

例如,您可以配置C:\xampp\php\php.inic:\xampp\sendmail\sendmail.ini让 gmail 发送邮件。

C:\xampp\php\php.ini查找extension=php_openssl.dll并从该行的开头删除分号,以使 SSL 为本地主机的 gmail 工作。

在 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 文件并从本地主机发送邮件。

PS:不要忘记在上面的代码中替换my-gmail-idmy-gmail-password 。此外,如果您从上面复制设置,请不要忘记删除重复的键。例如,如果在 php.ini 文件中有另一个sendmail_path ,请在下面的行中添加注释:sendmail_path="C:\xampp\mailtodisk\mailtodisk.exe"

还记得使用 XAMMP 控制面板重新启动服务器,以使更改生效。

对于 gmail,请检查https://support.google.com/accounts/answer/6010255以允许从不太安全的应用程序访问。

要在 Linux 上通过 Gmail 从 localhost 发送电子邮件(带有 sendmail 包),请检查PHP+Ubuntu Send email using gmail form localhost

于 2013-08-12T10:57:03.610 回答
39

在用于测试目的的 XAMPP v3.2.1 中,您可以看到 XAMPP 在 XAMPP/mailoutput 中发送的电子邮件。在我的 Windows 8 上,这不需要任何额外的配置,是测试电子邮件的简单解决方案

于 2015-07-13T13:41:07.060 回答
34

您可以在没有 Internet 的情况下测试在您的 PC 中发送邮件

你应该使用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

欢呼!

于 2017-09-08T03:38:00.983 回答
26

在本地主机或本地服务器上发送电子邮件非常简单

注意:我在安装了 Xampp 的 Windows 7 64 位上使用测试邮件服务器软件

只需下载测试邮件服务器工具并根据其网站上给出的说明安装测试邮件服务器工具

现在您只需要更改php.ini文件下的两行

  1. 查找[mail function]并删除之前的分号;smtp = localhost
  2. 把分号放在前面sendmail_path = "C:\xampp\mailtodisk\mailtodisk.exe"

您不需要更改任何其他内容,但如果您仍然没有收到电子邮件而不是检查SMTP port,则端口号必须相同。

以上方法为Xampp软件提供的默认设置。

于 2014-04-14T13:21:53.430 回答
19

您必须在服务器上配置SMTP。您可以免费使用Google 提供的G Suite SMTP

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

于 2013-04-12T07:25:13.050 回答
9

根据我的个人经验,我发现与 Vikas Dwivedi 答案非常相似的事情会很好地工作。

第 1 步(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 文件)

在位于 xampp\sendmail\semdmail.ini 的 sendmail.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);
 ?>

注意

于 2019-02-02T11:17:30.577 回答
3

此代码用于来自本地 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  

请在您的 PHP 文件中写入 belove 代码以发送电子邮件

<?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";    
    }
?>
于 2019-03-05T17:32:44.193 回答
1

除了所有答案,请注意sendmail.ini文件中的内容:

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

由于新的谷歌安全问题,您应该按照以下步骤为此目的设置应用程序密码:

  1. 在安全选项卡中转到https://accounts.google.com/
  2. 开启两步验证
  3. 返回安全选项卡并设置应用程序密码(在选择应用程序下拉菜单中,您可以选择“其他”)
于 2020-04-22T23:43:33.447 回答
0

刚刚花了一个多小时试图完成这项工作。对于所有发布的所有建议都无法正常工作的问题的每个人:您必须在您的 XAMPP 界面中重新启动 Apache!只是重新启动 XAMPP 将不起作用!

于 2014-01-02T13:46:50.657 回答
0

您必须为此定义SMTP服务器和端口。除了从实时主机发送邮件之外。

这是一个有用的链接

注意:该端口应该未使用。请注意,某些应用程序喜欢Skype使用默认端口并阻止发送邮件。

于 2013-04-12T07:25:55.850 回答
0

我尝试了很多方法从 XAMPP 本地主机发送邮件,但由于 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 存储库链接

于 2020-02-26T09:18:48.107 回答