PHP mail()函数& PHMailer怀疑

时间:2015-06-05 08:11:56

标签: php email phpmailer

我对PHP中的邮件选项几乎没有疑问。

  1. 无论我读过什么,我都无法在没有SMTP的情况下从localhost发送邮件。这是正确的吗?

  2. 要使用PHP mail()函数从localhost发送邮件,我需要对这两个文件进行一些更改。一个是' php.ini' &安培;另一个是sendmail.ini'。更改设置smtp_server,port,username&密码。这个选项对我来说很完美。我用这个发了邮件。只是想确认我是否按照正确的方式从localhost发送邮件?

  3. 如果我只需要发送简单的邮件,mail()函数和& PHPMailer?

  4. 更改了两个ini文件(php.ini& sendmail.ini)后,我使用的是' https://github.com/PHPMailer/PHPMailer'在页面的末尾,但该示例不起作用。我在PHPMailer示例中使用了相同的SMTP,我在' sendmail.ini'中使用了它,但仍然无法正常工作。但是如果我在PHPMailer示例中注释掉SMTP部分,那就是

    /*$mail->isSMTP(); // Set mailer to use SMTP $mail->Host = 'smtp1.example.com;smtp2.example.com'; $mail->SMTPAuth = true; // Enable SMTP authentication $mail->Username = 'user@example.com'; // SMTP username $mail->Password = 'secret'; // SMTP password $mail->SMTPSecure = 'tls'; //Enable TLS encryption, {SSL {1}}

  5. 然后它工作得非常好。我不知道为什么我要注释掉SMTP部分?

    请帮我澄清疑惑。 提前致谢

2 个答案:

答案 0 :(得分:2)

  

无论我读过什么,我都无法在没有SMTP的情况下从localhost发送邮件。这是对的吗?

您需要有邮件服务器(如linux sendmail)来发送邮件。您可以使用服务器的内置邮件服务器或连接到SMTP。 PHP没有内置邮件服务器/“postman”

  

使用PHP mail()函数从localhost发送邮件时,我需要对这两个文件进行一些更改。一个是'php.ini'&另一个是'sendmail.ini'。更改设置smtp_server,port,username&密码。这个选项对我来说很完美。我用这个发了邮件。只是想确认我是否按照正确的方式从localhost发送邮件?

只要你正确设置你的主机名/域名/ dns记录就行了,否则你的邮件会落入垃圾/垃圾邮箱。阅读有关SPF记录的更多信息。

  

如果我只需发送简单的邮件,mail()函数和& PHPMailer?

PHPMailer默认使用mail()。 PHPMailer是mail()的简单易用的界面/层,因此您不必自己编写复杂的邮件头。在STMP的情况下,phpmailer使用sockets

  

更改了两个ini文件(php.ini和sendmail.ini)后,我使用的是页面末尾“https://github.com/PHPMailer/PHPMailer”上给出的示例,但该示例无效。我在'sendmail.ini'中使用的PHPMailer示例中使用相同的SMTP,但仍然无法正常工作。但是如果我在PHPMailer示例中注释掉SMTP部分,那就是

检查echo 'Mailer Error: ' . $mail->ErrorInfo;说的是什么

答案 1 :(得分:1)

因此,如果您想从本地计算机发送需要MTA(邮件传输代理)的电子邮件,那么您之前所写的内容是正确的。

如果您使用Linux或Windows,您可以安装Postfix,有很好的工具可以创建一个本地邮件服务器来捕获所有本地邮件。配置本地Postfix以捕获所有传入的邮件有点复杂。

https://www.hmailserver.com/

PHP的默认邮件功能使用sendmail将您的电子邮件发送到全世界​​。当您拥有像PHPMailer这样的库或者我更喜欢 SwiftMailer 时。然后你有很多功能,如通过SMTP发送。

通常 sendmail 会将您的电子邮件重定向到现有的MTA。 Sendmail 是早期的遗留物,大多数程序 sendmail 兼容。

你最后的问题。如果您注释掉$mail->isSMTP();行,那么您通过本地中继(sendmail)发送邮件,那么您可能没有安装openssl?并且您无法通过TLS连接到您的smtp服务器。您应该检查端口587是否已打开且可用。

要获得更好的错误信息,您可以使用$mail->ErrorInfo;查看发生的情况。