Настроить почтовый сервер для работы с PHP - PullRequest
0 голосов
/ 07 сентября 2010

Мой текущий проект - это форма, которая получает данные от пользователя.После получения этих данных я должен отправить предупреждение / отчет на несколько адресов электронной почты, включая пользователя, который вставил данные.Почти все запущено, 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.

Я не получаю сообщений об ошибках на странице, поэтому я немного растерялся.Не знаю, что не так.

ОБНОВЛЕНИЕ: Кто-нибудь может порекомендовать хороший почтовый сервер?

Ответы [ 3 ]

0 голосов
/ 08 сентября 2010

Скорее всего, вам нужна аутентификация. Это может быть так же просто, как указание вашего имени пользователя и пароля для учетной записи электронной почты, с которой вы хотите отправить сообщение.

Если это так, я бы предложил вам использовать расширение 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 на вашем сервере не так сложна, как вы думаете.

0 голосов
/ 10 сентября 2010

Хорошо. Получил это на работу. Уф.

Я узнал причину, прочитав много. Это касалось проблемы ретрансляции с сервером обмена SMTP.

Но я бы никогда не добрался туда, если бы не вы, люди. XD

Спасибо всем. =)

0 голосов
/ 07 сентября 2010

Exchange поддерживает обычную доставку почты SMTP (это необходимо, иначе он не мог бы общаться с остальным миром электронной почты), поэтому просто наведите конфигурацию вашего PHP на сервер Exchange, как если бы это был обычный почтовый сервер. *

Некоторые настройки .ini для почты описаны здесь: http://php.net/manual/en/mail.configuration.php#ini.smtp

Если сервер обмена данными не требует аутентификации и будет принимать почту с вашего сервера, это все, что требуется.

Followup:

Вы читали документы на почтовом пакете? метод 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);
}
...