Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

и снова отправка почты

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Веб-программинг] >> и снова отправка почты
Имя
Сообщение << Старые топики   Новые топики >>
и снова отправка почты - 2008-07-15 09:39:55.480000   
synik

Сообщений: 94
Оценки: 0
Присоединился: 2007-08-15 14:58:32.516666
Всем привет !

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

Как можно отправлять почту скриптом не используя функцию mail();, чтобы почта 100% приходила на все почтовики ?
Post #: 1
RE: и снова отправка почты - 2008-07-15 10:51:46.870000   
oRb

Сообщений: 4044
Оценки: 597
Присоединился: 2007-03-28 18:45:06.630000
quote:

Как можно отправлять почту скриптом не используя функцию mail();

написать на сокетах
Зы: кто-то уже выкладывал подобный скрипт в этом разделе, заюзай поиск.
Post #: 2
RE: и снова отправка почты - 2008-07-15 11:22:17.916666   
synik

Сообщений: 94
Оценки: 0
Присоединился: 2007-08-15 14:58:32.516666
да сам помню что ктото выкладывал уже юзал, но чтото ненахожу !
Post #: 3
RE: и снова отправка почты - 2008-07-15 11:34:33.170000   
oRb

Сообщений: 4044
Оценки: 597
Присоединился: 2007-03-28 18:45:06.630000
Вот нашел http://forum.xakep.ru/fb.aspx?m=1051388
Post #: 4
RE: и снова отправка почты - 2008-07-15 11:39:19.903333   
$_Гоша

Сообщений: 255
Оценки: 0
Присоединился: 2008-06-18 02:55:58.033333

quote:

ORIGINAL: oRb

Вот нашел http://forum.xakep.ru/fb.aspx?m=1051388

а реферера при этом можно сменить на нужный??
Post #: 5
RE: и снова отправка почты - 2008-07-15 11:58:53.136666   
synik

Сообщений: 94
Оценки: 0
Присоединился: 2007-08-15 14:58:32.516666
если честно то даже непойму как им пользоватся !
Post #: 6
RE: и снова отправка почты - 2008-07-15 18:29:17.250000   
synik

Сообщений: 94
Оценки: 0
Присоединился: 2007-08-15 14:58:32.516666
&lt;?php /* hvMailer 1.0 Автор скрипта: heaven aka Pascal http://pascalhp.net/ Использование: direct_mail(&lt;from&gt;, &lt;to&gt;, &lt;text&gt;, [Subject], [Headers]) Пример: direct_mail('from@gameil.com', 'to@gmail.com, to2@gmail.com', 'This is a test', 'Hello') Возвращаемые значения: true - успешно false - не отправлено emails (например test@yahoo.com, noob@usa.net) - список адресов на которые писмо не дошло Примечание: адреса назначения должны содержвть одинаковые имена хостов */ $answer_ok_help = 211; //Ответ о состоянии системы или помощь $answer_ok_ready = 220; //&lt;имя_домена&gt; служба готова к работе $answer_ok_complete = 250; //Запрошенное действие почтовой транзакции успешно завершилось $answer_ok_redirect = 251; //Данный адресат не является местным; сообщение будет передано по маршруту &lt;forward-path&gt; $answer_ok_transmit = 354; //Начинай передачу сообщения. Сообщение заканчивается комбинацией CRLF-точка-CRLF $buffer = ''; $socket = null; $localhost = @$_SERVER['HTTP_HOST']; if ($localhost == '') $localhost = 'localhost'; function ismail($email) { $len = strlen($email); if ($len&lt;5) return false; $email = strtolower($email); for ($j=0; $j&lt;$len; $j++) { $code = ord($email[$j]); if (($code&lt;97) and ($code&gt;122) and ($code&lt;&gt;45) and ($code&lt;&gt;46) and ($code&lt;&gt;64) and ($code&lt;&gt;95) and ($code&lt;&gt;45)) return false; } $email = explode('@', $email); if (count($email) &lt;&gt; 2) return false; if (strstr($email[1], '.') == false) return false; return true; } function stop($bye = false) { global $socket; if ($bye) socket_write($socket, "QUIT\r\n"); socket_close($socket); return false; } function read_command() { global $socket, $buffer; if (!is_resource($socket)) return false; $timeout = time()+3; while (time()&lt;=$timeout) { $data = socket_read($socket, 1024); if (strlen($data)&gt;0) $timeout = time()+3; $buffer .= $data; $timeout = time()+3; $eol_pos = strpos($buffer, "\r\n"); if ($eol_pos === false) {usleep(200); continue;} $data = substr($buffer, 0, $eol_pos); $buffer = substr($buffer, $eol_pos+2); $data = trim($data); $sep_pos = strpos($data, ' '); $num = 0; if ($sep_pos&gt;0) { $num = intval(substr($data, 0, $sep_pos)); $param = substr($data, $sep_pos+1); return array('cmd'=&gt;$num, 'param'=&gt;$param); } $num = intval($data); return array('cmd'=&gt;$num, 'param'=&gt;''); } return false; } function direct_mail($from, $to, $body, $subject = '', $headers = '') { /* Проверка введённых данных */ if (!ismail($from)) return false; $undelivered = ''; $to = explode(', ', $to); $valid_to = array(); $valid_to_cnt = 0; $to_cnt = count($to); $prihost = ''; for ($j=0; $j&lt;$to_cnt; $j++) if (ismail($to[$j])) { $host = explode('@', $to[$j]); $host = $host[1]; if (!$prihost) $prihost = $host; if ($host != $prihost) {$undelivered .= $to[$j] . ', '; continue;} $valid_to[$valid_to_cnt] = $to[$j]; $valid_to_cnt++; } $to = $valid_to; $to_cnt = $valid_to_cnt; unset($valid_to, $valid_to_cnt); if ($to_cnt &lt; 1) return false; if ($body == '') return false; /* Находим живой smtp-сервер */ $mxs = array(); @getmxrr($host, $mxs); $mxs_cnt = count($mxs); if ($mxs_cnt == 0) { $mxs[0] = $host; $mxs_cnt = 1; } global $socket; $connected = false; for ($j=0; $j&lt;$mxs_cnt; $j++) { $socket = @socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if (!is_resource($socket)) return false; $connected = @socket_connect($socket, $mxs[$j], 25); if ($connected) break; } if (!$connected) return false; /* Живой smtp найден, начинаем почтовую транзакцию */ $option = array("sec"=&gt;0, "usec"=&gt;2000); socket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO, $option); socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, $option); //GREETING $command = read_command($socket); if ($command === false) return stop(); global $answer_ok_help, $answer_ok_ready; if (($command['cmd']&lt;$answer_ok_help) or ($command['cmd']&gt;$answer_ok_ready)) return stop(true); //HELO global $localhost, $answer_ok_complete; socket_write($socket, "HELO $localhost\r\n"); $command = read_command($socket); if ($command === false) return stop(); if ($command['cmd'] &lt;&gt; $answer_ok_complete) return stop(true); //MAIL FROM socket_write($socket, "MAIL FROM: $from\r\n"); $command = read_command($socket); if ($command === false) return stop(); if ($command['cmd'] &lt;&gt; $answer_ok_complete) return stop(true); //RCPT TO $ok=false; global $answer_ok_redirect; for ($j=0; $j&lt;$to_cnt; $j++) { socket_write($socket, "RCPT TO: " . $to[$j] . "\r\n"); $answer = read_command($socket); if ($answer === false) return stop(); if (($answer['cmd'] == $answer_ok_complete) or ($answer['cmd'] == $answer_ok_redirect)) $ok = true; else $undelivered .= $to[$j] . ', '; } if (!$ok) return stop(true); //DATA global $answer_ok_transmit; socket_write($socket, "DATA\r\n"); $command = read_command($socket); if ($command === false) return stop(); if ($command['cmd'] &lt;&gt; $answer_ok_transmit) return stop(true); //Send mail $data = ''; if ($subject != '') $data .= "Subject: $subject\r\n"; if ($headers != '') $data .= $headers; $body = str_replace("\r\n.\r\n", "\r\n..\r\n", $body); $data .= "\r\n$body\r\n.\r\n"; socket_write($socket, $data); $command = read_command($socket); if ($command === false) return stop(); if ($command['cmd'] == $answer_ok_complete) $result = true; else $result = false; stop(true); if ($result == true) { if ($undelivered =='') return true; $undelivered = trim($undelivered, ', '); return $undelivered; } else return false; } ?&gt;
ну скрипт то есть , теперь непонятно как он работает как им можно отправить почту?
может кто обьяснит ?
Post #: 7
RE: и снова отправка почты - 2008-07-15 20:23:01.670000   
oRb

Сообщений: 4044
Оценки: 597
Присоединился: 2007-03-28 18:45:06.630000
quote:

/*

hvMailer 1.0
Автор скрипта: heaven aka Pascal
http://pascalhp.net/

Использование: direct_mail(&lt;from&gt;, &lt;to&gt;, &lt;text&gt;, [Subject], [Headers])

Пример: direct_mail('from@gameil.com', 'to@gmail.com, to2@gmail.com', 'This is a test', 'Hello')

Возвращаемые значения:
true - успешно
false - не отправлено
emails (например test@yahoo.com, noob@usa.net) - список адресов на которые писмо не дошло

Примечание: адреса назначения должны содержвть одинаковые имена хостов

*/

А что тут не понятного?
Post #: 8
RE: и снова отправка почты - 2008-07-15 21:20:30.763333   
synik

Сообщений: 94
Оценки: 0
Присоединился: 2007-08-15 14:58:32.516666
ну вот смотри я положил файл на хостинг целиком как есть в самом низу вписал эту функцию
if(direct_mail('отпровитель@mail.ru', 'получатель1@mail.ru, получатель2@mail.ru', 'This is a test', 'Hello')) {print"да";} else {print"нет";}
запускаю файл через браузер и все пустой экран
Post #: 9
RE: и снова отправка почты - 2008-07-16 13:44:54.093333   
magistr_bender

Сообщений: 977
Оценки: 0
Присоединился: 2008-02-22 20:10:21.133333
а вот такой вопрос:
1) если у меня на локальном кампе смтп сервера не стоит отправится ли сообщение?
2) если хостинг поддерживает смтп, а юзер моего сайта хочет отправить сообщение на мыло кому-нибудь но чтоб мыло <from> было не с моего хостинга а то которое он введёт. возможно ли это?

ну я прочитал по быренькому код, и помоиму ничего из этого сделать нельзя, хотя не уверен по этому решил всётаки уточнить
Post #: 10
RE: и снова отправка почты - 2008-07-16 19:52:14.476666   
synik

Сообщений: 94
Оценки: 0
Присоединился: 2007-08-15 14:58:32.516666
ну я тоже так считаю что в этом скрипте чтото нехватает , функция direct_mail(); чтото нечего вобще невозращает

или просто этим скриптом нужно знать как пользоватся !
Хотя все делаеш как в инструкции написано и нечего не получается!
Post #: 11
RE: и снова отправка почты - 2008-07-16 20:52:33.616666   
oRb

Сообщений: 4044
Оценки: 597
Присоединился: 2007-03-28 18:45:06.630000
Да если вам он так нужен - запустите под дебагером, посмотрите в чем там хрень.
В дополнение:
quote:

The socket functions described here are part of an extension to PHP which must be enabled at compile time by giving the –enable-sockets option to configure.

quote:

1) если у меня на локальном кампе смтп сервера не стоит отправится ли сообщение?

Если почитать скрипт, то становиться понятно, что скрипт открывает коннект на прямую с сервером-получателем сообщения.
Post #: 12
RE: и снова отправка почты - 2008-07-16 21:28:51.180000   
synik

Сообщений: 94
Оценки: 0
Присоединился: 2007-08-15 14:58:32.516666
да скрипт правда очень нужен а как его запустить дебагером, что это такой ?
Post #: 13
RE: и снова отправка почты - 2008-07-17 05:11:19.780000   
AL

Сообщений: 515
Оценки: 0
Присоединился: 2004-07-19 03:19:44
&lt;?php $mail_addressee.="test@mailtest.domain"; $mail_theme="Тема сообщения"; $mail_theme=@CONVERT_CYR_STRING($mail_theme,W,K); $mail_message="Тело сообщения"; $mail_message=@CONVERT_CYR_STRING($mail_message,W,K); $mail_sender="sender@mail.domain"; $from_obliged="From: ".$mail_sender."\r\n"; if(MAIL($mail_addressee, $mail_theme, $mail_message, $from_obliged) ? $mailSendError=TRUE : $mailSendError=FALSE); if($mailSendError===TRUE ? $echo="Сообщение успешно отправлено":$echo="Ошибка отправки сообщения"); echo $echo; ?&gt;
Post #: 14
RE: и снова отправка почты - 2008-07-17 16:57:51.940000   
synik

Сообщений: 94
Оценки: 0
Присоединился: 2007-08-15 14:58:32.516666
Может кому интерестно выкладываю вам можно сказать шедевр php программирования !
Скрипт отправки почты через сокеты конектится скрипт с любым smtp серваком где есть ваша почта и отправляет почту , лутше функции mail();
На хосте должен быть установлен модуль php-sockets проктически на всех платных хостах он установлен !

&lt;? header('Content-Type: text/plain;'); error_reporting(E_ALL ^ E_WARNING); ob_implicit_flush(); $address = 'smtp.mail.ru'; // адрес smtp-сервера $port = 25; // порт (стандартный smtp - 25) $login = 'login'; // логин к ящику $pwd = 'password'; // пароль к ящику $from = 'vasy@mail.ru'; // адрес отправителя $to = 'mailto@bk.ru'; // адрес получателя $subject = 'Message subject'; // тема сообщения $message = 'Message text'; // текст сообщения try { // Создаем сокет $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if ($socket &lt; 0) { throw new Exception('socket_create() failed: '.socket_strerror(socket_last_error())."\n"); } // Соединяем сокет к серверу echo 'Connect to \''.$address.':'.$port.'\' ... '; $result = socket_connect($socket, $address, $port); if ($result === false) { throw new Exception('socket_connect() failed: '.socket_strerror(socket_last_error())."\n"); } else { echo "OK\n"; } // Читаем информацию о сервере read_smtp_answer($socket); // Приветствуем сервер write_smtp_response($socket, 'EHLO '.$login); read_smtp_answer($socket); // ответ сервера echo 'Authentication ... '; // Делаем запрос авторизации write_smtp_response($socket, 'AUTH LOGIN'); read_smtp_answer($socket); // ответ сервера // Отравляем логин write_smtp_response($socket, base64_encode($login)); read_smtp_answer($socket); // ответ сервера // Отравляем пароль write_smtp_response($socket, base64_encode($pwd)); read_smtp_answer($socket); // ответ сервера echo "OK\n"; echo "Check sender address ... "; // Задаем адрес отправителя write_smtp_response($socket, 'MAIL FROM:&lt;'.$from.'&gt;'); read_smtp_answer($socket); // ответ сервера echo "OK\n"; echo "Check recipient address ... "; // Задаем адрес получателя write_smtp_response($socket, 'RCPT TO:&lt;'.$to.'&gt;'); read_smtp_answer($socket); // ответ сервера echo "OK\n"; echo "Send message text ... "; // Готовим сервер к приему данных write_smtp_response($socket, 'DATA'); read_smtp_answer($socket); // ответ сервера // Отправляем данные $message = "To: $to\r\n".$message; // добавляем заголовок сообщения "адрес получателя" $message = "Subject: $subject\r\n".$message; // заголовок "тема сообщения" write_smtp_response($socket, $message."\r\n."); read_smtp_answer($socket); // ответ сервера echo "OK\n"; echo 'Close connection ... '; // Отсоединяемся от сервера write_smtp_response($socket, 'QUIT'); read_smtp_answer($socket); // ответ сервера echo "OK\n"; } catch (Exception $e) { echo "\nError: ".$e-&gt;getMessage(); } if (isset($socket)) { socket_close($socket); } // Функция для чтения ответа сервера. Выбрасывает исключение в случае ошибки function read_smtp_answer($socket) { $read = socket_read($socket, 1024); if ($read{0} != '2' && $read{0} != '3') { if (!empty($read)) { throw new Exception('SMTP failed: '.$read."\n"); } else { throw new Exception('Unknown error'."\n"); } } } // Функция для отправки запроса серверу function write_smtp_response($socket, $msg) { $msg = $msg."\r\n"; socket_write($socket, $msg, strlen($msg)); } ?&gt;


Post #: 15
Страниц:  [1]
Все форумы >> [Веб-программинг] >> и снова отправка почты







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.