5

我尝试通过我的本地主机 php 发送电子邮件,但问题是我的电子邮件中没有收到任何内容,我应该配置什么?

这是我的代码

$to="someone@gmail.com";
$name="jason";
$subject="test message";
$header="From: $name";
$message="blah blah blah";
$sentmail=mail($to,$subject,$message,$header);

echo $sentmail ? "email send" : "email send fail"?

结果是“电子邮件发送”

4

6 回答 6

4

有两个理由不从您的本地主机发送电子邮件..

  1. 您没有在本地环境中设置邮件服务器
  2. 您没有使用 SMTP 服务来发送电子邮件。

所以要么你必须配置邮件服务器,但我认为这不是一个方便的解决方案。

最好你尝试使用 SMTP 服务。要做到这一点,如果您使用PHPMailer会更好。

这是一个使用 PHPMailer 类的示例。

$mail = new PHPMailer();
$mail->IsSMTP();
$mail->CharSet = 'UTF-8';

$mail->Host       = "mail.example.com"; // SMTP server example
$mail->SMTPDebug  = 0;                     // enables SMTP debug information (for testing)
$mail->SMTPAuth   = true;                  // enable SMTP authentication
$mail->Port       = 25;                    // set the SMTP port for the GMAIL server
$mail->Username   = "username"; // SMTP account username example
$mail->Password   = "password"; 

您可以将此类用于任何类型的电子邮件作为PHP 的替代:mail()

于 2013-07-25T04:55:42.070 回答
2

如果邮件被成功接受投递,邮件函数将返回 TRUE,否则返回 FALSE。

邮件功能不会检查邮件是否到达您的收件箱

http://php.net/manual/en/function.mail.php

无法检查邮件是否已送达,但您可以使用跟踪像素检查收件人是否打开了您的邮件https://support.google.com/dfp_premium/answer/1347585?hl=en

于 2013-07-25T04:39:38.460 回答
0

您应该在您的本地机器中集成一个邮件服务器来发送邮件。如果所有参数都正确,php mail函数返回true,它不会检查发送状态。

阅读此内容,http ://www.zenddeveloper.com/how-to-send-emails-from-localhost-apachephp-server/ 和http://roshanbh.com.np/2007/12/sending-e-mail-来自-localhost-in-php-in-windows-environment.html

于 2013-07-25T04:45:08.843 回答
0

您需要有一个邮件服务器才能在 localhost 中发送电子邮件。检查PHP:在 localhost 中发送邮件

于 2013-07-25T05:02:34.923 回答
0

您需要在标题上包含内容类型。为了使它更容易,您可以编写简单的函数然后调用它。这是一个例子:

 function sendMail($to, $title, $url, $from, $username, $password) {
    $headers  = 'MIME-Version: 1.0' . "\r\n";
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
    $headers .= 'From: '.$title.' <'.$from.'>' . "\r\n";
    $subject = 'Welcome to '.$title;
    $message = 'Thank you for joining <strong>'.$title.'</strong><br /><br />Your username: <strong>'.$username.'</strong><br />Your Password: <strong>'.$password.'</strong><br /><br />You can log-in at: <a href="'.$url.'" target="_blank">'.$title.'</a>';
    return @mail($to, $subject, $message, $headers);
}
于 2013-07-25T05:18:12.403 回答
0

默认情况下,PHP 的mail()函数会将邮件发送到sendmailLinux 上的程序。

要使 sendmail 正常工作,您需要具有正确配置且功能正常的 MTA。例如,postfix 是一个相对容易配置的 MTA。

配置 MTA 时,您可以将其配置为直接发送邮件,作为 Internet 上的邮件服务器,或将您的邮件中继到另一台服务器。

配置您自己的 MTA 以直接传递邮件并不适合轻松愉快的人。发送电子邮件现在变得很复杂,需要大量工作才能让您的邮件被 gmail 或 yahoo 等主要邮件服务器接受。

如果您的 ISP 提供外发邮件服务器并且乐意为您中继邮件,您可以设置 postfix 以通过该服务器中继所有邮件,并为您自己节省一些配置麻烦。如果您使用后缀,则只需像在后缀配置中的空客户端上的后缀下的示例一样设置它。

无论您如何配置邮件服务器,要记住的主要事情是避免将其设置为在传出网络上中继传入的邮件(即,将其设置为开放中继)。在空邮件程序示例配置中,该行inet_interfaces = loopback-only实现了这一点。

请注意,将 postfix 或其他东西设置为 MTA 的替代方法是使用 PHP 自己的内置 SMTP 支持,这实际上意味着您将 PHP 本身用作 MTA,它只将邮件转发到中继。

使用像 postfix 这样的专用 MTA 的优点是可靠性。如果到达外部邮件中继时出现临时问题,Postfix 可以将电子邮件排队。它还会在邮件排队后立即返回,因此您的 PHP 邮件函数将执行得更快,并且在邮件传递到外部邮件中继时无需等待。

于 2013-07-25T05:30:09.183 回答