1

Тема: Доступ к внешнему smtp серверу из php4 используя сокеты.

Подскажите пожалуйста новичку, как реализовать посредством php4 доступ к smpt службе физически другого сервера(там работает sendmail) для осуществления через него рассылок? Имеется законный доступ ко всем серверам. Спасибо заранее.

Задача: под учеткой [email protected] с сервера myserver1.ru с помощью php4 заставить послать почту сервер myserver2 на учетку [email protected] сервера myserver3.ru На обоих серверах 1 2 3 подняты почтовые сервера. Диалоги посредством telnet 25 проходят полностью и почта уходит. Привиденный ниже скрипт, запускаемый на 1 сервере, не работает - почта с 2 на три не посылается,  не уходит.  Те надо с 1 сервера заставить сервер 2 посылать письма на сервер 3. Сам сервер 1 только "заставляет" - реально почту должен слать сервер 2 на сервер 3.
Помогите пожалуйста разобраться.

<?php
$server='myserver2.ru';
$to='[email protected]';
$from='[email protected]';
$subject='proba';
$message='proba mail_php';
function socketmail($server, $to, $from, $subject, $message) {
$connect = fsockopen ($server, 25, $errno, $errstr, 30);
fputs($connect, "HELO localhost\r\n");
fputs($connect, "MAIL FROM: $from\n");
fputs($connect, "RCPT TO: $to\n");
fputs($connect, "DATA\r\n");
fputs($connect, "Content-Type: text/plain; charset=iso-8859-1\n");
fputs($connect, "To: $to\n");
fputs($connect, "Subject: $subject\n");
fputs($connect, "\n\n");
fputs($connect, stripslashes($message)." \r\n");
fputs($connect, ".\r\n");
fputs($connect, "RSET\r\n");
}
?>

2

Re: Доступ к внешнему smtp серверу из php4 используя сокеты.

Тут вся инфа что да как. _http://www.cable-com.de/mailsender.php

3

Re: Доступ к внешнему smtp серверу из php4 используя сокеты.

так реально есть что - то по коду? Те - где я что не так написал? Где конкретно ошибся?

4

Re: Доступ к внешнему smtp серверу из php4 используя сокеты.

не работает и то, что дали мне с сайта http://www.rucable.net/We-send-mail-with-smtp-auth.html
и даже не пишет никаких диагностических сообщений....вот беда то :-(

5

Re: Доступ к внешнему smtp серверу из php4 используя сокеты.

да...то что я не бычу - факт конечно...но ведь можно же подсказать точно челу, где ошибся и че дальше смотреть??  :-((

6

Re: Доступ к внешнему smtp серверу из php4 используя сокеты.

Может поддержки сокетов нету?
или ты вот изза этого не видиш сообщения которые должны быть

if ($_REQUEST['action'] == 'Send') {

Попробуй убрать эти кавычки.

7

Re: Доступ к внешнему smtp серверу из php4 используя сокеты.

Я сделал уже все - заработало!! Всем спасибо за участие, если нужен будет реально работающий код - я выложу. :-)

8

Re: Доступ к внешнему smtp серверу из php4 используя сокеты.

Хм, а что тот код который выше не рабочий?

9

Re: Доступ к внешнему smtp серверу из php4 используя сокеты.

а то мне показалось слишком длинным и сложным :-)

<?php
$server='1.1.1.1';
$to='[email protected]';
$from='[email protected]';
$subject='proba';
$message='proba mail_php';
$message="Content-Type: text/plain\r\nTo: $to\r\nSubject: $subject\r\n\r\n$message";
socketmail($server,$to,$from,$subject,$message);

function socketmail($server, $to, $from, $subject, $message) {
    $connect = fsockopen ($server, 25, $errno, $errstr, 30);
    $echo = true;
    smtp($connect,"HELO localhost",$echo);
    smtp($connect,"MAIL FROM: $from",$echo);
    smtp($connect,"RCPT TO: $to",$echo);
    smtp($connect,"DATA",$echo);
    smtp($connect,"$message\r\n.",$echo);
    smtp($connect,"QUIT",$echo);
}

function smtp($fh,$cmd,$echo=true){
    fputs($fh,"$cmd\r\n");
    $s = fgets($fh);
    if ($echo) echo "$s";
    return $s;

}
?>

вот :-)

10

Re: Доступ к внешнему smtp серверу из php4 используя сокеты.

при этом весь диалог с сервером выводится и просматривается отдельно!  :-)

11

Re: Доступ к внешнему smtp серверу из php4 используя сокеты.

Понятно.
В коде все понятно мне, но скажу одно, что тут плохая обработка данных. Если письмо не уйдет, по не видимым причинами, то и не узнаеш ушло оно или нет.
А принцип работы тот же, кроме того что обработчик ответов SMTP парсит ответы сервера немного подругому.

Удачи! smile

12

Re: Доступ к внешнему smtp серверу из php4 используя сокеты.

dio пишет:

smtp($connect,"HELO localhost",$echo);

лучше писать реальное имя... по крайне мере ко мне бы не пришло письмо при таком ответе

13 (25-11-2005 11:42:37 отредактировано dio)

Re: Доступ к внешнему smtp серверу из php4 используя сокеты.

В данном случае это не играет особой роли, так как передается ip адрес запрашивающей стороны, как, например,  в случае пинга....можно себя пинговать по ip? Можно конечно, но можно же и так #ping localhost - результат будет один и тот же. Так же можно было написать вместо localhost  -  127.0.0.1
Только что проверил свои слова - все так и работает :-)

14

Re: Доступ к внешнему smtp серверу из php4 используя сокеты.

ну вопрос был:

dio пишет:

Доступ к внешнему smtp серверу

поэтому я сказал.

15

Re: Доступ к внешнему smtp серверу из php4 используя сокеты.

не, ну да...конечно, просто вот тут  smtp($connect,"HELO localhost",$echo);
php скрипт передает через localhost ip клиента smtp, который вызывает сервер на диалог.

16

Re: Доступ к внешнему smtp серверу из php4 используя сокеты.

crash пишет:
dio пишет:

smtp($connect,"HELO localhost",$echo);

лучше писать реальное имя... по крайне мере ко мне бы не пришло письмо при таком ответе

и ок мне бы тоже...

17

Re: Доступ к внешнему smtp серверу из php4 используя сокеты.

а мне приходит :-)

18

Re: Доступ к внешнему smtp серверу из php4 используя сокеты.

dio пишет:

не, ну да...конечно, просто вот тут  smtp($connect,"HELO localhost",$echo);
php скрипт передает через localhost ip клиента smtp, который вызывает сервер на диалог.

у меня идет проверка имени хоста на наличие ip или МХ в DNS и если нет, то до посылает не очень далеко)

19

Re: Доступ к внешнему smtp серверу из php4 используя сокеты.

ну блин...забили все насмерть...напали на одного....  :-)

20

Re: Доступ к внешнему smtp серверу из php4 используя сокеты.

Ну почему, дельные советы...

Зачем принимать письма не от авторизированных клиентов с несужествующим хостом, или с хостом без почтовой записи? Зачем принимать письма для не своих адресов? Какой нормальный сервер будет в хело представляться не смоим именем (а моим к примеру)?