7

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

  $to = "myweb@gmail.com";
  $subject = "Test mail";
  $message = "My message";
  $from = "webp@gmail.com";
  $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 文件中究竟要编辑什么

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

4

8 回答 8

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   = 'me.sender@gmail.com';
$mail->Password   = '123!@#';

$mail->SetFrom('me.sender@gmail.com', $name);
$mail->AddReplyTo('no-reply@mycomp.com','no-reply');
$mail->Subject    = 'subject';
$mail->MsgHTML($body);

$mail->AddAddress('abc1@gmail.com', 'title1');
$mail->AddAddress('abc2@gmail.com', 'title2'); /* ... */

$mail->AddAttachment($fileName);
$mail->send();
于 2014-06-07T15:48:38.420 回答
2

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

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

于 2013-07-08T18:52:26.343 回答
1

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

于 2013-07-08T18:52:56.897 回答
1

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

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

改用“PHP Mailer”(https://github.com/PHPMailer/PHPMailer),它是一个免费的 PHP 类,它可以处理几乎任何内部或外部的 SMTP 服务器,无论有无身份验证,它都能正常工作Linux 和 Windows 上的方式相同,并且它不依赖于 PHP.INI 设置。它带有许多示例,非常强大且易于使用。

于 2013-07-08T19:15:39.817 回答
1

像这样配置你的 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
于 2018-09-20T15:55:15.683 回答
1

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

<?php
if (isset($_POST['name']) && isset($_POST['email'])) {
    $name = $_POST['name'];
    $email = $_POST['email'];
    $to = 'your.email@address.com';
    $subject = "New Message on YourWebsite.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>
于 2019-03-26T10:00:53.030 回答
1

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

安装“fake 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
于 2016-01-29T10:07:33.200 回答
0

通常,当您遇到问题时,最好从手册开始。配置电子邮件的页面解释说,在 MSWindows 和其他所有操作系统上运行的 PHP 邮件命令之间存在很大差异;发布问题以提供有关如何配置系统的该部分以及它正在运行的操作系统的相关信息是一个好主意。

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

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

于 2013-07-08T20:35:01.790 回答