и снова отправка почты
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
и снова отправка почты - 2008-07-15 09:39:55.480000
|
|
|
synik
Сообщений: 94
Оценки: 0
Присоединился: 2007-08-15 14:58:32.516666
|
Всем привет ! Сейчас отправлять почту при помощи функции mail() очень плохо , например на известные почтовики почта не приходит или если даже обманул спам фильтр то это не надолго ! Как можно отправлять почту скриптом не используя функцию mail();, чтобы почта 100% приходила на все почтовики ?
|
|
|
RE: и снова отправка почты - 2008-07-15 10:51:46.870000
|
|
|
oRb
Сообщений: 4044
Оценки: 597
Присоединился: 2007-03-28 18:45:06.630000
|
quote:
Как можно отправлять почту скриптом не используя функцию mail(); написать на сокетах Зы: кто-то уже выкладывал подобный скрипт в этом разделе, заюзай поиск.
|
|
|
RE: и снова отправка почты - 2008-07-15 11:22:17.916666
|
|
|
synik
Сообщений: 94
Оценки: 0
Присоединился: 2007-08-15 14:58:32.516666
|
да сам помню что ктото выкладывал уже юзал, но чтото ненахожу !
|
|
|
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
|
|
|
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 а реферера при этом можно сменить на нужный??
|
|
|
RE: и снова отправка почты - 2008-07-15 11:58:53.136666
|
|
|
synik
Сообщений: 94
Оценки: 0
Присоединился: 2007-08-15 14:58:32.516666
|
если честно то даже непойму как им пользоватся !
|
|
|
RE: и снова отправка почты - 2008-07-15 18:29:17.250000
|
|
|
synik
Сообщений: 94
Оценки: 0
Присоединился: 2007-08-15 14:58:32.516666
|
<?php
/*
hvMailer 1.0
Автор скрипта: heaven aka Pascal
http://pascalhp.net/
Использование: direct_mail(<from>, <to>, <text>, [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; //<имя_домена> служба готова к работе
$answer_ok_complete = 250; //Запрошенное действие почтовой транзакции успешно завершилось
$answer_ok_redirect = 251; //Данный адресат не является местным; сообщение будет передано по маршруту <forward-path>
$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<5) return false;
$email = strtolower($email);
for ($j=0; $j<$len; $j++)
{
$code = ord($email[$j]);
if (($code<97) and ($code>122) and ($code<>45) and ($code<>46) and ($code<>64) and ($code<>95) and ($code<>45)) return false;
}
$email = explode('@', $email);
if (count($email) <> 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()<=$timeout)
{
$data = socket_read($socket, 1024);
if (strlen($data)>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>0)
{
$num = intval(substr($data, 0, $sep_pos));
$param = substr($data, $sep_pos+1);
return array('cmd'=>$num, 'param'=>$param);
}
$num = intval($data);
return array('cmd'=>$num, 'param'=>'');
}
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<$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 < 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<$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"=>0, "usec"=>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']<$answer_ok_help) or ($command['cmd']>$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'] <> $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'] <> $answer_ok_complete) return stop(true);
//RCPT TO
$ok=false;
global $answer_ok_redirect;
for ($j=0; $j<$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'] <> $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;
}
?>
ну скрипт то есть , теперь непонятно как он работает как им можно отправить почту? может кто обьяснит ?
|
|
|
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(<from>, <to>, <text>, [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) - список адресов на которые писмо не дошло Примечание: адреса назначения должны содержвть одинаковые имена хостов */ А что тут не понятного?
|
|
|
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"нет";}
запускаю файл через браузер и все пустой экран
|
|
|
RE: и снова отправка почты - 2008-07-16 13:44:54.093333
|
|
|
magistr_bender
Сообщений: 977
Оценки: 0
Присоединился: 2008-02-22 20:10:21.133333
|
а вот такой вопрос: 1) если у меня на локальном кампе смтп сервера не стоит отправится ли сообщение? 2) если хостинг поддерживает смтп, а юзер моего сайта хочет отправить сообщение на мыло кому-нибудь но чтоб мыло <from> было не с моего хостинга а то которое он введёт. возможно ли это? ну я прочитал по быренькому код, и помоиму ничего из этого сделать нельзя, хотя не уверен по этому решил всётаки уточнить
|
|
|
RE: и снова отправка почты - 2008-07-16 19:52:14.476666
|
|
|
synik
Сообщений: 94
Оценки: 0
Присоединился: 2007-08-15 14:58:32.516666
|
ну я тоже так считаю что в этом скрипте чтото нехватает , функция direct_mail(); чтото нечего вобще невозращает или просто этим скриптом нужно знать как пользоватся ! Хотя все делаеш как в инструкции написано и нечего не получается!
|
|
|
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) если у меня на локальном кампе смтп сервера не стоит отправится ли сообщение? Если почитать скрипт, то становиться понятно, что скрипт открывает коннект на прямую с сервером-получателем сообщения.
|
|
|
RE: и снова отправка почты - 2008-07-16 21:28:51.180000
|
|
|
synik
Сообщений: 94
Оценки: 0
Присоединился: 2007-08-15 14:58:32.516666
|
да скрипт правда очень нужен а как его запустить дебагером, что это такой ?
|
|
|
RE: и снова отправка почты - 2008-07-17 05:11:19.780000
|
|
|
AL
Сообщений: 515
Оценки: 0
Присоединился: 2004-07-19 03:19:44
|
<?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;
?>
|
|
|
RE: и снова отправка почты - 2008-07-17 16:57:51.940000
|
|
|
synik
Сообщений: 94
Оценки: 0
Присоединился: 2007-08-15 14:58:32.516666
|
Может кому интерестно выкладываю вам можно сказать шедевр php программирования ! Скрипт отправки почты через сокеты конектится скрипт с любым smtp серваком где есть ваша почта и отправляет почту , лутше функции mail(); На хосте должен быть установлен модуль php-sockets проктически на всех платных хостах он установлен !
<?
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 < 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:<'.$from.'>');
read_smtp_answer($socket); // ответ сервера
echo "OK\n";
echo "Check recipient address ... ";
// Задаем адрес получателя
write_smtp_response($socket, 'RCPT TO:<'.$to.'>');
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->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));
}
?>
|
|
|
|
|