我注意到其他几个帖子与我的问题类似,但发现它们并非特定于我的场景,或者我只是不太了解事情。
我的情况:我正在尝试使用PHP mail()函数从LAMP服务器发送邮件。我想将邮件转发到另一个专用邮件服务器。
问题:似乎我无法发送邮件......有时候。有时它似乎能够向域外的帐户发送邮件,但无法将任何邮件发送到域/网络内的帐户。我看到日志经常抱怨它无法对域控制器进行身份验证...但是它不应该担心它应该吗?
我想我感到困惑的部分是PHP mail()函数是否自动为服务器创建SMTP消息?或者我是否必须设置php.ini设置以查看localhost,然后配置sendmail / postfix以将邮件发送到邮件服务器。另外,如果我只指定LAMP服务器尝试连接邮件服务器,为什么还要费心去验证域控制器呢?
希望有人可以帮助我解决这个问题。它已经困扰了我一段时间,但一直无法找到解决方案。 谢谢,
答案 0 :(得分:2)
开始使用Swiftmailer(documentation)或PhpMailer,您的生活会更轻松......
require_once 'lib/swift_required.php';
$transport = Swift_MailTransport::newInstance();
$mailer = Swift_Mailer::newInstance($transport);
$message = Swift_Message::newInstance('Wonderful Subject')
->setFrom(array('john@doe.com' => 'John Doe'))
->setTo(array('receiver@domain.org', 'other@domain.org' => 'A name'))
->setBody('Here is the message itself');
$mailer->send($message);
$mail = new PHPMailer(); // defaults to using php "mail()"
$mail->SetFrom('name@yourdomain.com', 'First Last');
$mail->AddReplyTo("name@yourdomain.com","First Last");
$mail->AddAddress("whoto@otherdomain.com", "John Doe");
$mail->Subject = "PHPMailer Test Subject via mail(), basic";
$mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test
$mail->MsgHTML($body);
$mail->AddAttachment("images/phpmailer.gif"); // attachment
$mail->AddAttachment("images/phpmailer_mini.gif"); // attachment
if(!$mail->Send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "Message sent!";
}
我更喜欢Swiftmailer,但你选择了你最好的选择; - )
答案 1 :(得分:2)
PHP mail()函数是否自动创建SMTP消息 服务器?或者我必须设置php.ini设置来查看 localhost然后配置sendmail / postfix以发送消息 邮件服务器
PHP的mail()函数本身并没有做那么多。在linux上,它通常使用php.ini中定义的设置连接到sendmail或类似的本地实例。从示例php.ini中查看此部分:
[mail function]
; For Win32 only.
; SMTP = localhost
; smtp_port = 25
; For Win32 only.
;sendmail_from = me@example.com
; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
sendmail_path = /usr/sbin/sendmail -t -i
对于Windows,mail()使用配置端口的SMTP服务器。对于linux,使用定义的sendmail路径。
换句话说,Windows上的PHP mail()函数连接到SMTP服务器,无论是本地还是远程。 Linux上的PHP mail()不能这样做。在Linux上,该功能仅使用您需要自己设置以连接到SMTP服务器的本地sendmail安装。这种配置的替代方案是使用PHPMailer,Swiftmailer,Zend_Mail或类似的,它们自己提供SMTP功能。
如果我,为什么要打扰域控制器进行身份验证呢 仅指定LAMP服务器尝试连接邮件 服务器
我远非成为这方面的专家,但据我所知,您需要在网络中经过身份验证的用户才能访问邮件所需的外部资源。域控制器提供这种权限。