如何配置PHP发送电子邮件?

问题描述 投票:6回答:8

我需要使用php脚本向我的网站用户发送邮件。我试过在php中使用邮件功能。 我的代码如下:

  $to = "[email protected]";
  $subject = "Test mail";
  $message = "My message";
  $from = "[email protected]";
  $headers = "From:" . $from;
  mail($to,$subject,$message,$headers);

当我尝试运行程序时,这就是我得到的:

 Warning: mail(): Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set().

请告诉我在$ from变量中包含哪些地址。我需要一个smtp服务器吗?如何使用localhost发送邮件?请告诉我在php.ini文件中要编辑的内容

我对这一切都很陌生..请帮帮我..

php email smtp
8个回答
3
投票

您需要在本地计算机上设置smtp服务才能发送电子邮件。有很多可用的免费搜索谷歌。

如果您拥有一台服务器或VPS上传该脚本,它将正常工作。


3
投票

请改用PHPMailer:https://github.com/PHPMailer/PHPMailer

如何使用它:

require('./PHPMailer/class.phpmailer.php');
$mail=new PHPMailer();
$mail->CharSet = 'UTF-8';

$body = 'This is the message';

$mail->IsSMTP();
$mail->Host       = 'smtp.gmail.com';

$mail->SMTPSecure = 'tls';
$mail->Port       = 587;
$mail->SMTPDebug  = 1;
$mail->SMTPAuth   = true;

$mail->Username   = '[email protected]';
$mail->Password   = '123!@#';

$mail->SetFrom('[email protected]', $name);
$mail->AddReplyTo('[email protected]','no-reply');
$mail->Subject    = 'subject';
$mail->MsgHTML($body);

$mail->AddAddress('[email protected]', 'title1');
$mail->AddAddress('[email protected]', 'title2'); /* ... */

$mail->AddAttachment($fileName);
$mail->send();

1
投票

您将无法通过其他人邮件服务器发送邮件。请咨询您的主机提供商如何发送电子邮件。尝试从没有PHP的服务器发送电子邮件,您可以使用任何电子邮件客户端,如Outook。在它工作之后,尝试使用您的电子邮件客户端SMTP(发送电子邮件)配置配置PHP.ini。


1
投票

这不适用于本地主机,但上传到服务器上,此代码应该可以解决问题。只需确保输入您自己的$ to行电子邮件地址。

<?php
if (isset($_POST['name']) && isset($_POST['email'])) {
    $name = $_POST['name'];
    $email = $_POST['email'];
    $to = '[email protected]';
    $subject = "New Message on KristjanMark.com";
    $body = '<html>
                <body>
                    <h2>Title</h2>
                    <br>
                    <p>Name:<br>'.$name.'</p>
                    <p>Email:<br>'.$email.'</p>

                </body>
            </html>';

//headers
$headers = "From: ".$name." <".$email.">\r\n";
$headers = "Reply-To: ".$email."\r\n";
$headers = "MIME-Version: 1.0\r\n";
$headers = "Content-type: text/html; charset-utf-8";

//send
$send = mail($to, $subject, $body, $headers);
if ($send) {
    echo '<br>';
    echo "Success. Thanks for Your Message.";
} else {
    echo 'Error.';
}
}
?>

<html>
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        <form action="" method="post">
            <input type="text" name="name" placeholder="Your Name"><br>
            <input type="text" name="email" placeholder="Your Email"><br>
            <button type="submit">Subscribe</button>
        </form>
    </body>
</html>

0
投票

当你遇到问题时,通常是一个好的起点是the manualconfiguring email上的页面解释了在MSWindows上运行的PHP邮件命令与其他所有操作系统之间存在很大差异;发布问题以提供有关如何配置系统部分以及运行的操作系统的相关信息时,这是一个好主意。

您的PHP配置为与SMTP服务器通信 - 这是MSWindows计算机的默认设置,但您没有安装MTA或阻止连接。虽然对于运行自己的MTA的商业网站来说,可操作的列表中存在相当高的位置,但这并不是一项简单的练习 - 您确实需要知道您正在做什么才能安全配置和运行。在您的情况下使用由其他人配置和管理的服务会更有意义。

由于您将使用Gmail地址连接到远程MTA,因此您应该使用Gmail的服务器;您将需要SMTP身份验证和可能的SSL支持 - PHP中的mail()函数都不支持它们。这里有一个简单的例子,使用swiftmailer with gmail或者这是一个example using phpmailer


0
投票

这是给我答案的链接,我们使用gmail:

安装“假的sendmail for Windows”。如果您不使用XAMPP,可以在此处下载:http://glob.com.au/sendmail/sendmail.zip

修改php.ini文件以使用它(注释掉其他行):

邮件功能

仅适用于Win32。

SMTP = smtp.gmail.com
smtp_port = 25
For Win32 only.
sendmail_from = <e-mail username>@gmail.com

仅适用于Unix。

您也可以提供参数(默认值:sendmail -t -i)。

sendmail_path = "C:\xampp\sendmail\sendmail.exe -t"

(忽略“仅限Unix”位,因为我们实际上使用的是sendmail)

然后,您必须在安装sendmail的目录中配置“sendmail.ini”文件:

发邮件

smtp_server=smtp.gmail.com
smtp_port=25
error_logfile=error.log
debug_logfile=debug.log
auth_username=<username>
auth_password=<password>
force_sender=<e-mail username>@gmail.com

0
投票

像这样配置你的php.ini

SMTP = smtp.gmail.com

[mail function]
; XAMPP: Comment out this if you want to work with an SMTP Server like Mercury

; SMTP = smtp.gmail.com

; smtp_port = 465

; For Win32 only.
; http://php.net/sendmail-from
;sendmail_from = postmaster@localhost

0
投票

要解决此问题,您必须检查您的PHP.INI以及服务器中的邮件服务设置。

但我最好的建议是忘记mail()功能。它取决于PHP.INI设置,它的配置因平台(Linux或Windows)而异,并且它无法处理SMTP身份验证,这是当前的一大麻烦。太头疼了。

使用“PHP Mailer”代替(https://github.com/PHPMailer/PHPMailer),它是免费提供的PHP类,它可以处理几乎所有SMTP服务器,无论是内部还是外部,有或没有身份验证,它在Linux和Windows上的工作方式完全相同,并且它赢了不依赖于PHP.INI设置。它附带了许多示例,它非常强大且易于使用。

© www.soinside.com 2019 - 2024. All rights reserved.