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

时间:2013-07-08 18:49:25

标签: php email smtp

我需要使用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文件中编辑的确切内容

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

8 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分: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();

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

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

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

答案 4 :(得分:0)

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

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

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

答案 5 :(得分: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

答案 6 :(得分:0)

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

<?php
if (isset($_POST['name']) && isset($_POST['email'])) {
    $name = $_POST['name'];
    $email = $_POST['email'];
    $to = 'your.email@address.com';
    $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>

答案 7 :(得分:-1)

这是给我答案的链接,我们使用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”文件:

的sendmail

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