ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
Проблема с SMTP классом [php] |

19.06.2007, 22:48
|
|
Участник форума
Регистрация: 07.01.2007
Сообщений: 259
Провел на форуме: 309455
Репутация:
41
|
|
Проблема с SMTP классом [php]
Написал простенький класс для SMTP, не хочет робить, вернее робит, но только на Yandex.Ru.
PHP код:
<?php
class SMTP
{
# SMTP Hostname
var $Host = "localhost";
# SMTP Server port
var $Port = 25;
# SMTP endline
var $CRLF = "\r\n";
# User
var $Username = "";
# Password
var $Password = "";
# Connection var
var $Connection;
# Timeout
var $timeout = 30;
# Curr code
var $code;
# Debug
var $debug = 1;
# Charset
var $Charset = 'windows-1251';
# type
var $Type = 'html';
function Send($mail, $subject, $message) {
global $Config,$Lang,$Member;
$this->Connection = @fsockopen($this->Host, $this->Port, $errno, $errstr, $this->timeout);
if(empty($this->Connection)) {
return false;
}
$this->get_code();
// EHLO
fputs($this->Connection, "EHLO gopneg" . $this->CRLF);
$this->get_code();
if($this->code != 250) {
if($this->debug == 1) echo '[SMTP class] [Notice] [Server desn\'t accept <b>EHLO</b> message]';
fclose($this->Connection);
return false;
}
// puts the login attempt
fputs($this->Connection, "AUTH LOGIN" . $this->CRLF);
$this->get_code();
if($this->code != 334) {
if($this->debug == 1) echo '[SMTP class] [Notice] [Server desn\'t accept <b>AUTH LOGIN</b> message]';
fclose($this->Connection);
return false;
}
// puts the username
fputs($this->Connection, base64_encode($this->Username) . $this->CRLF);
$this->get_code();
if($this->code != 334) {
if($this->debug == 1) echo '[SMTP class] [Notice] [Wrong username specified]';
fclose($this->Connection);
return false;
}
// puts the password
fputs($this->Connection, base64_encode($this->Password) . $this->CRLF);
$this->get_code();
if($this->code != 235) {
if($this->debug == 1) echo '[SMTP class] [Notice] [Wrong password specified]';
fclose($this->Connection);
return false;
}
fputs($this->Connection,"MAIL FROM:<" . $вар_с_моим_email . ">" . $this->CRLF); // Smtp user
fputs($this->Connection,"RCPT TO:<" . $mail["addr"] . ">" . $this->CRLF); // Recipient
fputs($this->Connection,"DATA" . $this->CRLF); // START Message
fputs($this->Connection,"From: \"Превед!\" <" . $вар_с_моим_email . ">" . $this->CRLF); // HEADER (sender)
fputs($this->Connection,"To: " . $mail["to"] . " <" . $mail["addr"] . ">" . $this->CRLF); // HEADER (message recipient)
fputs($this->Connection,"Subject: ". $subject."" . $this->CRLF); // HEADER (message subject)
fputs($this->Connection,"Content-Type: text/" . $this->Type . "; charset=\"" . $this->Charset . "\"\r\n" . $this->CRLF); // HEADER (content-type and charset)
fputs($this->Connection, $message . $this->CRLF); // Message BODY
fputs($this->Connection,"." . $this->CRLF); // END message
$this->get_code();
if($this->code != 250)
{
if($this->debug == 1) echo '[SMTP class] [Fatal error] [Unrecognised error on message send stage] [#'.htmlspecialchars($this->code).']';
fclose($this->Connection);
return false;
} else {
// exit
if(!empty($this->Connection)) fclose($this->Connection);
// return true
return true;
}
}
function get_code() {
$reply = $this->get_lines();
$code = substr($reply,0,3);
return $this->code = intval($code);
}
function get_lines() {
$data = "";
while($str = fgets($this->Connection,515)) {
$data .= $str;
if(substr($str,3,1) == " ") { break; }
}
return $data;
}
}
?>
Входят данные такого типа:
PHP код:
$Mail = array(
"to" => "Дядя Вася", // Имя лола
"addr" => "vasyamail@mail.ru", // Мыло лола
);
$message = $smtp->Send($Mail,"хай васёк, пошли пидь водку!","Тут литр застоялсо уже, пошли выпьем!");
if($message == 1) { echo "message sended!"; } else { echo "message is not sended"; }
Где я туплю. Не предлагать юзать паблик скрипты, я хочу понять, в чем ошибка.
Последний раз редактировалось Raz0r; 19.06.2007 в 22:55..
|
|
|

19.06.2007, 23:30
|
|
Постоянный
Регистрация: 14.05.2006
Сообщений: 334
Провел на форуме: 1543521
Репутация:
272
|
|
хз може ты много где тупишь, но сразу в глаза бросается это:
PHP код:
// EHLO
fputs($this->Connection, "EHLO gopneg"
не EHLO, а HELO.
и пиши не gopneg, а имя пользователя зареганного на сервере (ну если гопнег, это майл аккуан, то оставь  ). На mail.ru точна проверка на пользователя есть, ну по крайней мере точно была!
|
|
|

19.06.2007, 23:47
|
|
Флудер
Регистрация: 20.11.2006
Сообщений: 3,316
Провел на форуме: 16641028
Репутация:
2371
|
|
Не Helo, а Hello :d
|
|
|

20.06.2007, 00:10
|
|
Постоянный
Регистрация: 14.05.2006
Сообщений: 334
Провел на форуме: 1543521
Репутация:
272
|
|
НЕТ!!! именно с одной L. HELO
|
|
|

20.06.2007, 00:29
|
|
наркоман с медалью
Регистрация: 07.05.2005
Сообщений: 3,704
Провел на форуме: 19975136
Репутация:
4536
|
|
helo для smtp, а на яндексе esmtp
и http://tools.ietf.org/html/rfc1869 к тому же =\
|
|
|

20.06.2007, 05:00
|
|
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
Провел на форуме: 1941233
Репутация:
2726
|
|
не EHLO, а HELO.
и пиши не gopneg, а имя пользователя зареганного на сервере (ну если гопнег, это майл аккуан, то оставь). На mail.ru точна проверка на пользователя есть, ну по крайней мере точно была!
Вот это у вас тут прямо Anti-стандарт. Каждый пишет от балды.
1) HELO и EHLO это разные команды соотв. для SMTP и ESMTP - движков.
2) HELO в данном контексте пишется с одной L
3) После HELO должно идти имя ХОСТА а не юзера и не ящика, как один "умный" человек вам советует.
К топикстартеру: нахер ты вообще это классом сделал?
|
|
|

20.06.2007, 12:10
|
|
Участник форума
Регистрация: 07.01.2007
Сообщений: 259
Провел на форуме: 309455
Репутация:
41
|
|
Можно и функцией конечно.
Вобщем я понял - сначала нужно определить сервер - т.е. Smtp или Esmtp и от этого уже плясать - Ehlo или Helo, после которого уже идет имя хоста.
Спасибо Kez'у и всем другим за разъяснение моей ошибки, очень признателен.
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|