Отправляет email-рассылки с помощью сервиса Sendsay

[TC] PHP: Отправка почты через сокет

Vande omentaina, tiflocomp!
Народ, есть такая задача:нужно отправить
много писем сразу (нотификация о новых
записях в блоге). Если пользоваться функцией
Mail()в цикле, то она будет "хлопать
дверями", то есть каждый раз после отправки
очередного письма закрывать SMTP-коннект.
Вот что я делаю (нашёл этот скрипт и слегка его модифицировал под
себя):

<?
function socketmail($to, $subject, $message) {
$from="Oire.org Administration <elensu***@o*****.org>";
$connect = fsockopen ("smtp.yandex.ru", 25, $errno, $errstr, 30);
if ($connect) {
$out="HELO localhost\r\n";
$out.="MAIL FROM: <elensu***@o*****.org>\n";
$out.="RCPT TO: <arthael***@y*****.ru>\n";
$out.="DATA\r\n";
$out.="Content-Type: text/plain; charset=utf-8\n";
$out.="From: $from\n";
$out.="To: $to\n";
$out.="Subject: $subject\n";
$out.="\n\n";
$out.=$message." \r\n";
$out.=".\r\n";
$out.="RSET\r\n";
fwrite ($connect, $out);
fclose ($connect);
} else {
die ("Error: ".$errstr." ($errno)");
}
}

socketmail ("arthael***@y*****.ru", "this is a socket mail test", "Testing sending
mail");

Результат - ничего. Ни сообщений об ошибке, ни письма в ящике.
Мне посоветовали сначала сделать то же самое по телнету, по телнету
всё нормально.
Спасибо!

Ответить   Tue, 23 Feb 2010 12:52:24 +0200 (#1010495)

 

Ответы:

Приветствую всех.
Андрей пишет:

Функция mail не открывает (и не закрывает) интернет-соединение, а передает сообщение
системной утилите для отправки почты (как правило, sendmail).

Прежде имеет смысл прочитать спецификацию протокола SMTP.
Там вполне доступно описан процесс правильного обмена данными и поддерживаемые
команды.
Приведенный вами скрипт, как минимум, не отрабатывает ответы сервера, а сервер
на каждую команду возвращает код ошибки/успеха.

Сообщения об ошибке у вас нет, потому что вы контролируете только ошибки сокета,
а сокетное соединение у вас устанавливается без проблем. Ответы smtp-сервера
вы игнорируете, поэтому ничего об ошибках (или успехах) smtp-сессии и не знаете.
К примеру, модифицируем ваш код так:
...
$out="HELO localhost\r\n";
fwrite($connect,$out);
echo fgets($connect,1024) ."<br>";
Ответ сервера:
220 smtp11.mail.yandex.net (Want to use Yandex.Mail for your domain? Visit http://pdd.yandex.ru)

$out="MAIL FROM: <elensu***@o*****.org>\r\n";
fwrite($connect,$out);
echo fgets($connect,1024)."<br>";
Ответ сервера: 250 smtp11.mail.yandex.net

И так далее для каждой отдельной команды... Кстати, ответы серверана следующую
команду:
554 5.7.1 <elensu***@o*****.org>: Sender address rejected: Access denied

Очевидно, что отправку сообщения и обработку ответов следует оформить в виде
отдельной функции или метода.

Успехов. Анатолий.

Ответить   "i_chay" Tue, 23 Feb 2010 20:17:33 +0400 (#1010628)

 

Доброе время суток всем!!! Пересылаю письмо своего приятеля ,ещё не
подписанного на данную рассылку! По возможнсти предоставьте интересующую его
информацию!

Доброго времени суток!
На днях занялся чисткой компьютера и случайно удалил важные файлы.
Подскажите пожалуйста, какой программой можно востановить удаленные из
корзины файлы, а также затереть не нужные?
Заранее спасибо, Алексей. Пишите по адресу: aleksei_***@i*****.ru

Ответить   Радиомастер Tue, 23 Feb 2010 14:23:33 +0300 (#1010688)