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


255

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


3
我们可以看到您的代码吗?
aizaz

2
如果您不给我们当前的配置,将无法为您提供帮助。
arkascha

1
这与包含Mercury仍然相关(ApacheFriends XAMPP 1.8.2)吗?我想是的,但是如果有人更喜欢水星,请在下面指出。:) 谢谢!
icedwater

Answers:


370

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

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

在该行的开头C:\xampp\php\php.ini查找extension=php_openssl.dll并删除分号,以使SSL适用于localhost的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从localhost通过Gmail发送电子邮件(带有sendmail软件包),请选中PHP + Ubuntu使用gmail形式localhost发送电子邮件


3
除了上述配置,我需要更新sendmail glob.com.au/sendmail
kaz 2013年

1
我必须从XAMMP 1.7.7升级到2.8.2.3-sendmail包含在较新的XAMPP中。几个月前,我尝试在1.7.7上使用更新的sendmail,但无法正常工作-终于忍无可忍,并使用了新的XAMPP,并且按说明工作。
VanAlbert 2014年

2
我相信位置C:\ xampp \ php \ php.ini是指Windows环境。对于Mac,请在xamppfiles / etc中查找您的php.ini文件。
Paul Trotter 2014年

3
@Vikas答案是最好的,但请注意,在smtp_port上使用默认ssl可能无法在某些情况下使用,因为Thirumalai murugan答案实际上为我解决了问题,请使用465
Temitayo 2014年

2
它与XAMPP版本7.0.15完美配合,只是不要忘记从其中删除分号,并登录到您已配置的相同Gmail ID,然后转到以下链接myaccount.google.com/lesssecureapps?pli=1 和允许使用不太安全的应用程序:启用现在,您可以直接从XAMPP本地主机发送邮件
raftaar1191

35

在出于测试目的的XAMPP v3.2.1中,您可以在XAMPP / mailoutput中查看XAMPP发送的电子邮件。就Windows 8而言,这不需要任何其他配置,并且是测试电子邮件的简单解决方案


1
如果这不起作用,请检查c:\xampp\php\php.ini,查找[mail function]并取消注释提到的行mailtodisk.exe。除该行外,使本节中的所有其他行都被注释掉mail.add_x_header
蒂姆·马隆

3
作为我上面的评论的补充,对于XAMPP的最新版本,您可能需要手动添加mailtodisk行。它应该看起来像这样:sendmail_path="C:\xampp\mailtodisk\mailtodisk.exe"
Tim Malone

@TimMalone的其他注释增补。我发现如果以管理员
身份

@sohail:您不必以管理员身份运行XAMPP,但必须授予所有用户写入XAMPP / mailoutput文件夹的权限(右键单击文件夹>安全性>所有用户>编辑权限>完全访问权限)
cheppsn

@TimMalone我已经应用了这两个建议,但是即使经过这么多次尝试,mailoutput目录中也没有任何内容
Vipul Hadiya

25

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

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

只需下载测试邮件服务器工具并按照其网站上的说明安装测试邮件服务器工具

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

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

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

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


7
如果您不信任该站点,则可能要改用codeplex的papercutpapercut.codeplex.com
Marcel Burkhard 2015年

我无需做任何事情即可使其工作,只需安装它即可。
vonUbisch 2015年

我只需要更改端口即可
Pablo SG Pacheco

在这种情况下,用户名和密码是什么?
Eoin

@Eoin用户名和密码是什么?
Vikas Khunteta

23

您可以在没有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

欢呼!


1
这是一个非常好的解决方案,快速简便,我可以直接投入工作。仅用于开发人员时,在本地使用邮件服务器是一件麻烦事。
AdheneManx

1
谢谢,我也用它来测试我的项目。
Piseth Sok,

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 2014年

Iused @Vikas答案,但我使用了您的片段,即使用465作为emtp_port。无论如何,还是要做好
Temitayo 2014年

致命错误:类'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文件)

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

注意

  • 您需要重新启动apache才能重新加载php.ini。
  • 您需要在https://myaccount.google.com/u/1/security中激活Google Less安全应用访问权限
  • 在具有管理员权限的情况下运行Xampp可能会有所帮助。

2

此代码用于来自您的本地主机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";    
    }
?>

0

您必须为此定义SMTP服务器和端口。除了从实时主机发送邮件外,所有其他操作均如此。

这是关于此的有用链接

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


您可以阻止Skype使用端口
80。Skype的

0

只是花了一个多小时试图使这项工作。对于所有因发布的所有建议而遇到同样麻烦的人,它们将无法正常工作:您必须以XAMPP接口重启Apache!只是重新启动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. 返回安全标签并输入应用密码(在“选择应用”下拉菜单中,您可以选择“其他”)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.