【问题标题】:Configure mail server to work with PHP配置邮件服务器以使用 PHP
【发布时间】:2010-09-07 16:51:12
【问题描述】:

我当前的项目是一个接收用户输入的表单。 收到该数据后,我必须向几个电子邮件地址发送警告/报告,包括插入数据的用户。 几乎所有东西都已启动并运行,Apache、MySQL、PHP。

现在我从来没有安装过邮件服务器来使用 PHP,所以我有点迷路了。

我的雇主在他的服务器上安装了 MS Exchange 2007。我应该使用它,我将如何开始配置 php 以使用它? Exchange 2007 需要什么(参数)?

如果没有,您是否建议在装有 Apache+MySQL+PHP 的同一台机器上为此目的安装一个新的邮件服务器?

我更倾向于使用已经存在的 Exchange 服务器,但我在一些在线文章中读到它不是最容易配置的东西。

更新:

<?php
include("Mail/Mail.php");
/* mail setup recipients, subject etc */
$recipients = "mail@mail.com";
$headers["From"] = "mail@mail.com";
$headers["To"] = "someone@mail.com";
$headers["Subject"] = "User feedback";
$mailmsg = "Hello, This is a test.";
/* SMTP server name, port, user/passwd */
$smtpinfo["host"] = "mail.name.com";
$smtpinfo["port"] = "25";
$smtpinfo["auth"] = true;
$smtpinfo["username"] = "username";
$smtpinfo["password"] = "pass";
/* Create the mail object using the Mail::factory method */
$mail_object =& Mail::factory("smtp", $smtpinfo);
/* Ok send mail */
$mail_object->send($recipients, $headers, $mailmsg);
?>

使用上面的示例,我无法通过 Exchange 2007 发送邮件。

我在页面上没有输出错误,所以我有点迷路了。不知道怎么回事。

更新:谁能推荐一个好的邮件服务器?

【问题讨论】:

    标签: php mysql apache exchange-server-2007


    【解决方案1】:

    您很可能需要身份验证。这可以简单到将您的用户名和密码提供给您要发送的电子邮件帐户。

    如果是这种情况,我建议您使用 PEAR Mail 扩展程序。有一个名为 factory 的函数允许您使用 smtp 服务器进行身份验证。 (包括 SSL 加密,如果您发现您的服务器需要它)

    http://pear.php.net/manual/en/package.mail.mail.factory.php

    你的代码看起来有点像这样:

    $smtp = Mail::factory('smtp',
      array ('host' => $host,
       'port' => $port,
       'auth' => true,
       'username' => $username,
       'password' => $password));
    
    $mail = $smtp->send($to, $headers, $body);
    

    在您的服务器上安装 PEAR 扩展并不像您想象的那么难。

    【讨论】:

    • 我现在正在网上寻找 PEAR 以及如何安装它。稍后会回复结果。 :)
    • 只是我的运气。似乎 php_phar.dll 应该存在于 ext 目录中,但在我的情况下它不是。尝试安装梨时出现各种错误。 :S
    【解决方案2】:

    Exchange 支持常规 SMTP 邮件传递(它必须这样做,否则它无法与电子邮件世界的其他部分通信),因此只需将您的 PHP 配置指向 Exchange 服务器,就好像它是一个常规邮件服务器一样。

    有一些用于邮件的 .ini 设置,记录在这里:http://php.net/manual/en/mail.configuration.php#ini.smtp

    假设交换服务器不需要身份验证并且会接受来自您服务器的邮件,这就是所有应该要求的。

    跟进:

    您是否阅读了 Mail 包中的文档? send() 方法在成功时返回 TRUE,或者在失败时返回 PEAR_Error 对象。它将包含有关发送尝试失败的任何详细信息,很可能您想要$PEAR_Error:message。完整详情:http://pear.php.net/package/PEAR/docs/1.9.1/PEAR/PEAR_Error.html。从

    更改您的代码
    $mail_object->send($recipients, $headers, $mailmsg);
    

    $status = $mail_object->send($recipients, $headers, $mailmsg);
    if ($status !== TRUE) {
        die("Error sending mail: " . $status::message);
    }
    

    【讨论】:

    • 当你提到身份验证是什么意思?在正常情况下不应该要求吗?
    • 某些邮件服务器必须“登录”才能与您有任何关系。例如,大多数邮件服务器不允许从“外部”他们自己的网络通过它们发送邮件,但如果您对其进行身份验证,则允许通过它们来证明您是“本地”用户。
    • 如果你不能让PEAR包工作,你可以试试PHPMailer:phpmailer.worxware.com简单免费,效果很好。
    • 我正在使用 PHPmailer。感谢您的提示。
    【解决方案3】:

    好的。让它工作。 唷。

    看了很多遍才知道原因。这是关于 smtp 交换服务器的中继问题。

    但如果不是因为你们,我永远不会到达那里。 xD

    谢谢大家。 =)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-12
      • 1970-01-01
      • 2018-04-14
      • 1970-01-01
      • 2015-11-13
      • 2011-02-26
      • 2011-05-04
      相关资源
      最近更新 更多