Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

SMPT - как с ним работать

8.5K
09 февраля 2007 года
sith
57 / / 09.02.2007
Начав изучение инет-програмирвоания с толкнулся с проблемой такого рода...
... отправляю на почтовый сервер простые запросы а он молчит... если кто знает выложите основные концепции работы с почтой и если возможно фрагменты кода...
... само описание протокола есть у меня но что делать с ним дальше... не знаю...
... заранее благодарен
20K
09 февраля 2007 года
Amstell
2 / / 28.07.2006
если у вас есть док по протоколу смтп. покажите ссылку на ресурс пожалуйста.
1.9K
09 февраля 2007 года
InterWen
331 / / 16.09.2006
А можно ознакомиться с примером?
Вы уверены, что подключение УСПЕШНО?
Стукните Телнетом скажем на smtp.mail.ru:2525, сразу после подключения должен бы придти первый ответ сервера - приветствие, подумайте, что сделано не так.
З.Ы. на POP3 легче тренироваться :) Получить почту, получить листинг и.т.д. Да и с авторизацией там попроще, нет необходимости декодировать в base64, если это конечно станет проблемой.


2 Amstell

Вообще-то в идеале не док, а RFC, номер... забыл какой-то там...
А, вот кажется:
http://www.faqs.org/rfcs/rfc821.html
http://www.faqs.org/rfcs/rfc2821.html
Если документация на буржуйском недоступна, поищите переведенные, либо для начала первая ссылка из Яндекса по основным командам СМТП в помощь - http://www.aboutmail.ru/articles/rfc/smtp_3.html
8.5K
09 февраля 2007 года
sith
57 / / 09.02.2007
Вот фрагмент кода метод который вызываеться после открытия соединения

protected void handleConnection(Socket client){
try {

PrintWriter out = SocketUtil.getWriter(client);
// SocketUtil -вспомогательный класс где создаються потоки
InputStream in = client.getInputStream();
byte[] response = new byte[1000];
out.println("HELO");
//После этой команды тишина... ответа от срвера не приходит...
in.read(response);
out.println("EXPN sex");
int numBytes = in.read(response);
System.out.write(response,0,numBytes);
out.println("QUIT");
client.close();

}
catch (IOException ex) {
}
11K
09 февраля 2007 года
0ver10PD
45 / / 05.12.2005
Цитата: sith
Вот фрагмент кода метод который вызываеться после открытия соединения
...
byte[] response = new byte[1000];
out.println("HELO");
//После этой команды тишина... ответа от срвера не приходит...
in.read(response);
...


Попробуй после
out.println("HELO");
добавить
out.flush();

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

8.5K
09 февраля 2007 года
sith
57 / / 09.02.2007
0ver10PD
все равно не хочет... просто матроская тишина...есть какието методы которые позволяют производить мониторинг подключения... или как сделать такой код что бы можно было смотреть... мол подключился или нет... как идет обмен данными...
6.6K
09 февраля 2007 года
Aoli
185 / / 22.01.2007
Аааа. Я над этим не один день голову ломал :)
Хитрость в том, что надо посылать еще символы 16 и 13 - возврат каретки и перевод строки :)
Пробуй так:
 
Код:
byte[] response = new byte[1000];
out.println("HELO" + "\r\n");
out.flush();
// Ответ должен придти
in.read(response);

P.S. сейчас уже точно не помню последовательность символов: или \r\n или \n\r. Одна из них работает.
8.5K
09 февраля 2007 года
sith
57 / / 09.02.2007
увы но опять мимо, тишина как в гробу...
8.5K
10 февраля 2007 года
sith
57 / / 09.02.2007
Ура... всем большое спасибо... за помощь... разобрался...
... проблема состояла в том что основные смтп сервера которыми я пытался пользоваться сиьно навороченные... только я обратился к серверу своего провайдера сразу все полетело как по маслу...
... единственное что еще бы я хотел узнать в этой тебе это...
... как в смтп протокле проходить авторизацию
... как разделять в письме отдельно заголовок... отдельно подпись и текст самого письма... и можно ли с помощью смтп загружать к письму файлы...
1.9K
10 февраля 2007 года
InterWen
331 / / 16.09.2006
Говорил же, по Телнету пробивай для начала :)

Авторизацию?

Возьмем mail.ru (smtp.mail.ru:2525)

HELO/EHLO (любвоь-морковь, тут и так все ясно), далее
AUTH LOGIN [your_login]
логин отсылается в base64
сервер ответит с виду абра-кадаброй, но на самом деле это уже кодированная в base64 строка, гласящая что-то вроде "введите пароль" (если конечно логин принят, т.е. это корректные base64 данные), отсылаем пароль, также в base64. Если все ОК, авторизация успешна, если нет, возможно "invalid base64 data" или ещё чего.

Как кодировать в base64? Сам хотел бы знать, чтобы ручками все не делать :) Встроенных ф-й в Джава для этого вроде нет, хотя где-то в сети видел соотв. класс.
8.5K
10 февраля 2007 года
sith
57 / / 09.02.2007
через тел нет не получаеться отправить логид... говорит что "invalid base64 data" ... что делать..?
1.9K
10 февраля 2007 года
InterWen
331 / / 16.09.2006
Так значит не в base64 и вводишь, если я говорил о пользе проведения исследований через Телнет (прежде чем браться за редактор кода), вовсе не означает что существуют какие-то отличия в работе с сервером.
Телнет - не господь бог, на него действуют те же законы, что и на создаваемое тобой приложение, а в данном случае - ЛОГИН И ПАРОЛЬ ДОЛЖНЫ БЫТЬ КОРРЕКТНЫМИ base64 ДАННЫМИ ;)
Дерзай.

Можешь перекинуть ПХПшной base64_encode(string str); свой логин в подобающий вид и пробовать дальше.
Повторюсь - без понятия, как (де)кодировать средствами Java.
6.6K
10 февраля 2007 года
Aoli
185 / / 22.01.2007
А как (де)кодировать средствами Java в соседнем топике про pop3 ;)
8.5K
10 февраля 2007 года
sith
57 / / 09.02.2007
незнаете какие команды нужно использовать что бы отделить заголовок письма от текста... и можно ли прикреплять файлы и как...???
1.9K
10 февраля 2007 года
InterWen
331 / / 16.09.2006
Все что до первого "\r\n\r\n" - заголовок, после - текст ;)

ПХП фрагмент:

$headers = "MIME-Version: 1.0\r\n";
$headers.= "Content-type: text/html; charset=Windows-1251\r\n";
$headers.= "Subject: Hello world...\r\n";
$headers.= "\r\n";

при дальнейшем добавлении строки пойдет уже собственно ТЕКСТ сообщения.


Кстати, если ты внимательно читал спецификацию, то наверняка заметил, закончить письмо (в случае ручного ввода по Телнету это буде именно сигнал об окончании ввода) необходимо ТОЧКОЙ на отдельной строке, т.е. что-то вроде:
"\r\n.\r\n"
8.5K
10 февраля 2007 года
sith
57 / / 09.02.2007
спасибо... с заголовком я уже разобрался... внимательно прочитал...
20K
11 февраля 2007 года
Amstell
2 / / 28.07.2006
Цитата: InterWen
Говорил же, по Телнету пробивай для начала
Как кодировать в base64? Сам хотел бы знать, чтобы ручками все не делать :) Встроенных ф-й в Джава для этого вроде нет, хотя где-то в сети видел соотв. класс.



вечный вопрос.. как же кодировать в base64!!!

уря пхпшная ф-ция помогла=) спасибо.

8.5K
12 февраля 2007 года
sith
57 / / 09.02.2007
Amstell а можно мне как не грамотному разтолковать про эти пхпшные функции... фрагмент кода если можно.. .как пользоваться...
6.0K
12 февраля 2007 года
bsna
56 / / 28.11.2006
String username = "name";
String passwd = "passwd"
String input = username + ":" + passwd;
String encoding = new sun.misc.BASE64Encoder().encode(input.getBytes());
connection.setRequestProperty("Authorization","Basic " + encoding);
connection.connect();
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог