Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
johnybgoode

Не работает авторизация на SMTP сервере

19.12.2012, 01:56. Показов 2934. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Возникла такая проблема. Мне нужно написать простейшую авторизацию на smtp-сервере. Я погуглил, нашёл, вот эту статью, и попробовал сделать, что-то похожее. Но авторизация у меня не заработала. Подскажите, пожалуйста, что я сделал неправильно? Вот мой код
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
ob_implicit_flush();
header('content-type: text/html; charset=windows-1251');
define('CRLF',"\r\n");
$fp = fsockopen("smtp.gmail.ru", 25, $errNo, $errStr, 5);
echo fgets($fp,1024).'<br />';
fputs($fp, "EHLO smtp.yandex.ru".CRLF);
echo fgets($fp,1024).'<br />';
fputs($fp, "AUTH LOGIN".CLRF);
echo fgets($fp,1024).'<br />';
fputs($fp, $_POST("login").CRLF);
echo fgets($fp,1024).'<br />';
fputs($fp, $_POST("password").CRLF);
echo fgets($fp,1024).'<br />';
require "sending.php";
?>
значения переменыых "login" и "password" берутся из форм, этот скрипт - обработчик формы)

Добавлено через 4 часа 16 минут
С авторизацией разобрался) Но теперь не могу сообщение оправить.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<!DOCTYPE HTML>
<?php
ob_implicit_flush();
header('content-type: text/html; charset=windows-1251');
define('CRLF',"\r\n");
global $fp, $mailfrom;
$mailfrom=$_POST["login"];
$fp = fsockopen("smtp.google.com", 25, $errNo, $errStr, 5);
echo fgets($fp,1024).'<br />';
fputs($fp, "EHLO smtp.google.com ".CRLF);
echo fgets($fp,1024).'<br />';
fputs($fp, "AUTH LOGIN".CLRF);
echo fgets($fp,1024).'<br />';
fputs($fp,  $_POST["login"].CRLF);
echo fgets($fp,1024).'<br />';
fputs($fp, $_POST["password"].CRLF);
echo fgets($fp, 1024).'<br />';
require "sending.php";
$msg="AAA";
$where="<main.void@yandex.ru>";
$subject="aaa";
fputs($fp, "SEND FROM {$mailfrom}".CRLF);
echo fgets($fp,1024).'<br />';
fputs($fp, "RCPT TO {$where}".CRLF);
echo fgets($fp,1024).'<br />';
fputs($fp, "DATA".CRLF);
echo fgets($fp,1024).'<br />';
fputs($fp,"To: {$where}".CRLF.CRLF);
fputs($fp,"Subject: {$subject}".CLRF);
fputs($fp, $msg.CLRF.CLRF);
echo fgets($fp,1024).'<br />';
fputs($fp, "QUIT".CRLF);
и сервер не выводит ответы по echo) просто форма открывается "sending.php". Правда сверху пустое место для вывода сервера оставлено, но самого вывода нет.
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.12.2012, 01:56
Ответы с готовыми решениями:

Авторизация на SMTP сервере
Ребят, такая проблема. Пишу приложение с сокетами на java. Цель - отправка сообщений smtp-серверу. У меня всё получилось кроме авторизации...

Авторизация на SMTP-сервере
Есть простенькое задание для лабы (SMTP-клиент на сокетах). Тестирую на mail.ru. Что отправить аргументом с HELO? Добавлено через 7...

Smtp авторизация Lotus Domino 7
Здравствуйте! Подскажите пожалуйста как можно в Lotus Domino 7, сделать авторизацию на 25 порт. Проблема в том, что сейчас на...

2
14 / 14 / 1
Регистрация: 20.04.2010
Сообщений: 102
19.12.2012, 02:26
SEND FROM - это команда? разве есть такая.
отправка ссобщения:
MAIL FROM:< [adress] >
RCPT TO:< [adress] >
DATA

:<> - обязательно
на yandex точно сработает. на разных ящиках замечал нюансы в общении с сервером
0
johnybgoode
19.12.2012, 19:05
Цитата Сообщение от fit Посмотреть сообщение
SEND FROM - это команда? разве есть такая.
отправка ссобщения:
MAIL FROM:< [adress] >
RCPT TO:< [adress] >
DATA

:<> - обязательно
на yandex точно сработает. на разных ящиках замечал нюансы в общении с сервером
SEND - используется вместо команды MAIL и указыает, что почта должна быть доставлена на терминал пользователя.
c MAIL тоже пробовал, не работало.

Добавлено через 2 часа 5 минут
Цитата Сообщение от johnybgoode Посмотреть сообщение
:<> - обязательно
на yandex точно сработает. на разных ящиках замечал нюансы в общении с сервером
У меня в коде:
PHP
1
$where="<main.void@yandex.ru>";
Пробовал с логином так же сделать, ничего не выходит.

Добавлено через 15 минут
Попробовал прямо из статьи код скопировать и свои данные подставить. Письмо не отправляется всё равно.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
$smtp_server = "smtp.yandex.ru";
$port = 25;
$mydomain = "smtp.yandex.ru";
$username = "main.void";
$password = "*****";//не буду палить свой пароль, в коде он был)
$sender = "main.void@yandex.ru";
$recipient = "johnybgoode777@gmail.com";
$subject = "test";
$content = "test";
 
// Initiate connection with the SMTP server
$handle = fsockopen($smtp_server, $port);
fputs($handle, "EHLO $mydomain\r\n");
 
// SMTP authorization
fputs($handle, "AUTH LOGIN\r\n");
echo fgets($handle,1024).'<br />';
fputs($handle, base64_encode($username)."\r\n");
fputs($handle, base64_encode($password)."\r\n");
echo fgets($handle,1024).'<br />';
 
 
// Send out the e-mail
fputs($handle, "MAIL FROM:<$sender>\r\n");
echo fgets($handle,1024).'<br />';
fputs($handle, "RCPT TO:<$recipient>\r\n");
echo fgets($handle,1024).'<br />';
fputs($handle, "DATA\r\n");
echo fgets($handle,1024).'<br />';
fputs($handle, "To: $recipient\r\n");
echo fgets($handle,1024).'<br />';
fputs($handle, "Subject: $subject\r\n");
echo fgets($handle,1024).'<br />';
fputs($handle, "$content\r\n");
echo fgets($handle,1024).'<br />';
fputs($handle, ".\r\n");
 
// Close connection to SMTP server
fputs($handle, "QUIT\r\n");
Вывод такой получился:
220 smtp2h.mail.yandex.net ESMTP (Want to use Yandex.Mail for your domain? Visit http://pdd.yandex.ru)
250-smtp2h.mail.yandex.net
250-8BITMIME
250-PIPELINING
250-SIZE 42991616
250-STARTTLS
250-AUTH LOGIN PLAIN
250-DSN

Вот сейчас пришло всё-таки!!! С тормозами, но дошло!!!

Добавлено через 3 часа 28 минут
Одна проблема - письмо приходит без текста.
Вот так выглядит код сейчас.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<!DOCTYPE HTML>
<?php
ob_implicit_flush();
header('content-type: text/html; charset=windows-1251');
 
$port = 25;
$mydomain = $_POST["domain"];
$smtp_server = "smtp.".$mydomain;
echo $smtp_server."<br>";
$username = $_POST["login"];
$password = $_POST["password"];
$sender = $username."@".$mydomain;
echo $sender."<br>";
$recipient = $_POST["where"];
$subject = $_POST["about"];
$content = $_POST["msg"];
 
// Initiate connection with the SMTP server
$handle = fsockopen($smtp_server, $port);
fputs($handle, "EHLO $mydomain\r\n");
 
// SMTP authorization
fputs($handle, "AUTH LOGIN\r\n");
fputs($handle, base64_encode($username)."\r\n");
fputs($handle, base64_encode($password)."\r\n");
 
// Send out the e-mail
fputs($handle, "MAIL FROM:<$sender>\r\n");
fputs($handle, "RCPT TO:<$recipient>\r\n");
fputs($handle, "DATA\r\n");
fputs($handle, "To: $recipient\r\n");
fputs($handle, "Subject: $subject\r\n");
fputs($handle, base64_encode($content)."\r\n");
fputs($handle, ".\r\n");
 
// Close connection to SMTP server
fputs($handle, "QUIT\r\n");
 
?>
Строка вида
PHP
1
$username = $_POST["login"];
- данные забираются из формы.

Добавлено через 2 минуты
И ещё - нужно как-то сделать, чтобы файл можно было прикрепить и передать. Кто-нибудь знает, как это сделать?
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.12.2012, 19:05
Помогаю со студенческими работами здесь

JS работает медленно на сервере. На локальном сервере быстро. В чём разница
Вечер добрый Сайт уже загрузил все JS/CSS/HTML. И после этого начинаются лаги. При открытие сайта с локального сервера - всё...

Авторизация на сервере
Гуру, посоветуйте... Есть МОЙ сайт. На нем МОЯ система авторизации написанная с нуля (куки+сессии). Через браузеры работает. ...

Авторизация на сервере
Здравствуйте! &lt;html&gt; &lt;head&gt; &lt;title&gt;Авторизация&lt;/title&gt; &lt;/head&gt; &lt;?php $mylogin = 'admin'; $mypass = '123'; $mylogin2 =...

Авторизация на сервере
привет всем. никак не могу авторизироваться на сервере уже второй день. перепробовал кучу вариантов. вот код метода: public String...

Авторизация на сервере
Клиент-серверное приложение. Решили сделать на сервере авторизацию по логину-паролю. Мне не понятен сам механизм как это работает. Каков...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru