如何配置XAMPP以从本地主机发送邮件?

288

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


3
可以让我们看看你的代码吗? - aizaz
2
如果您不提供当前配置,我们将无法提供帮助。 - arkascha
1
这个问题是否仍然适用于包含 Mercury(ApacheFriends XAMPP 1.8.2)的版本?我认为是的,但如果有人更喜欢 Mercury,请在下面指出。 :) 谢谢! - icedwater
11个回答

408
您可以使用内置的sendmail包从本地主机发送邮件,sendmail包已经集成在XAMPP中。因此,如果您正在使用XAMPP,则可以轻松地从本地主机发送邮件。
例如,您可以配置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:不要忘记在上面的代码中替换< strong> my-gmail-id 和< strong> my-gmail-password 。此外,如果您从上面复制设置,请勿忘记删除重复键。例如,如果php.ini文件中有另一个< strong> sendmail_path :sendmail_path =“C:\ xampp \ mailtodisk \ mailtodisk.exe”,请注释以下行。
还要记得使用XAMMP控制面板重新启动服务器,以便更改生效。
对于Gmail,请查看https://support.google.com/accounts/answer/6010255以允许来自非安全应用程序的访问。
引用块:
要通过Gmail从localhost发送Linux上的电子邮件(使用sendmail软件包),请查看PHP+ Ubuntu使用gmail表单发送电子邮件 localhost

3
除了上述的配置之外,我需要更新我的sendmail。http://glob.com.au/sendmail/ - Karina
2
我相信位置 C:\xampp\php\php.ini 是指 Windows 环境。对于 Mac,请查找 xamppfiles/etc 中的 php.ini 文件。 - Paul Trotter
3
@Vikas的回答是最好的,但请注意,在某些情况下使用smtp_port上的默认ssl可能无法正常工作,正如Thirumalai murugan的回答所述,使用465实际上为我解决了这个问题。 - Temitayo
3
使用XAMPP 7.0.15版本非常完美。只需记得从中删除分号,同时登录到已配置的Gmail账户,然后转到以下链接 https://myaccount.google.com/lesssecureapps?pli=1并允许不安全的应用:开启现在,您可以直接从XAMPP本地主机发送电子邮件。 - raftaar1191
3
截至2022年5月,谷歌已经封锁了必须使用的“较不安全的访问方式”以使其正常工作。这个功能只在Google Workspace账户中才能使用。有没有人知道是否仍然有其他方法来实现此功能?(或者推荐其他服务组合) - scunliffe
显示剩余21条评论

39
在 XAMPP v3.2.1 中,为了测试目的,您可以在 XAMPP/mailoutput 中查看 XAMPP 发送的电子邮件。在我的情况下,这不需要任何额外的配置,是一个简单的测试电子邮件的解决方案。注意要保留原有的 html 标签。

3
如果这不起作用,请检查你的 c:\xampp\php\php.ini 文件,找到 [mail function] 部分,并取消注释提到 mailtodisk.exe 的那一行。除了 mail.add_x_header 这一行之外,请保持该部分中的其他所有行都被注释掉。 - Tim Malone
9
作为对我上面评论的补充说明,对于较新版本的XAMPP,您可能需要手动添加mailtodisk行。它应该看起来像这样:sendmail_path="C:\xampp\mailtodisk\mailtodisk.exe" - Tim Malone
1
对@TimMalone评论的额外补充。我发现只有在以管理员身份运行XAMPP时,邮件才会被写入到XAMPP/mailoutput中。 - sohail
@sohail:你不必以管理员身份运行XAMPP,但你必须允许所有用户对XAMPP/mailoutput文件夹进行写入权限(右键单击文件夹>安全>所有用户>编辑权限>完全控制)。 - cheppsn
1
@TimMalone 我已经尝试了两个建议,但是即使尝试了很多次,邮件输出目录中仍然没有任何内容。 - Vipul Hadiya
只是想感谢@TimMalone——迄今为止在Windows上查看生成的邮件最简单的方法 - Jono

38

您可以在没有互联网的情况下在电脑中测试发送邮件

您可以使用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

加油!


3
这是一个非常好的解决方案,快速简便,我可以直接开始工作。只是为了开发时在本地折腾邮件服务器很麻烦。 - AdheneManx
3
谢谢!我也用这个来测试我的项目。 - Piseth Sok
哇,这太棒了!不需要任何设置或配置。它只是工作! - train

25

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

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

只需下载测试邮件服务器工具,并根据其网站上给出的说明进行安装Test Mail Server Tool

现在,您只需要在php.ini文件下更改两行内容即可。

  1. 查找[mail function]并删除分号,该分号位于;smtp = localhost之前
  2. sendmail_path = "C:\xampp\mailtodisk\mailtodisk.exe"之前放置分号

您不需要更改其他任何内容,但如果您仍然无法接收电子邮件,请检查SMTP端口,端口号必须相同。

以上方法适用于Xampp软件提供的默认设置。


7
如果您不信任该网站,您可能想使用来自CodePlex的Papercut代替:https://papercut.codeplex.com/。 - Marcel Burkhard
我不需要做任何事情就能让它工作,只需安装即可。 - vonUbisch
我只需要更改端口即可。 - Pablo S G Pacheco
在此情况下,用户名和密码是什么? - Eoin
1
这就做到了。XAMPP PHP,Thunderbird 作为客户端。易于启动和运行。 - JayJay123
显示剩余2条评论

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的更多信息,请在此处阅读。


@Vikas的回答是最好的,但请注意,在某些情况下使用smtp_port上的默认ssl可能无法工作,使用465就像这个答案所述实际上为我解决了问题。 - Temitayo
我使用了@Vikas的答案,但我使用了你的片段,即将465用作emtp_port。无论如何都做得很好。 - Temitayo
严重错误:在C:\xampp\htdocs\myweb\email_script.php的82行中找不到“PHPMailer”类 - Shafizadeh

9

根据我的个人经验,我发现与Vikas Dwivedi的答案非常相似的方法也可以很好地解决问题。

步骤1(php.ini文件)

在位于xampp\php\php.ini的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\sendmail.ini的文件中,将如下更改:

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

第三步(代码)

创建一个php文件,并使用以下代码:

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

注意

  • 为了重新加载php.ini,您需要重新启动apache。
  • 您需要在https://myaccount.google.com/u/1/security中激活Google的不安全应用程序访问权限。
  • 以管理员权限运行Xampp可能会有帮助。

4
除了所有的答案之外,请注意在sendmail.ini文件中:

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

由于谷歌的新安全问题,您需要按照以下步骤为此目的创建一个应用程序密码:
  1. 进入https://accounts.google.com/安全选项卡
  2. 启用两步验证(使用任何可用选项)
  3. 返回到安全选项卡(在原始的两步验证所在同一部分下)并新建 App 密码 (在选择应用程序下拉菜单中,可以选择“其他”)
最后,请注意,如果您只是使用应用程序而不是自己编写 PHP 代码,则可能需要将 Sendmail 设置为首选选项。
以管理员身份运行 XAMPP 也可以解决任何文件访问问题。

1
谢谢,这是非常关键的一部分。 - Water Man

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文件中以发送电子邮件:
<?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

刚刚花了一个多小时尝试让它工作。对于所有遇到相同问题的人,所有已发布的建议都不起作用:您必须在XAMPP界面中重新启动Apache!仅重新启动XAMPP是不起作用的!!


我认为这应该作为评论发布 - Jeromy Adofo

0

您需要定义一个SMTP服务器和端口。除了像从活动主机发送邮件之外的所有内容。

这是有关此问题的有用链接

NB:端口应该是未使用的。请注意,一些应用程序(如Skype)使用默认端口,从而阻止发送邮件。


你可以防止Skype使用80端口。它在Skype的连接设置中。 - astroanu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接