Форум программистов, компьютерный форум, киберфорум
PHP: сети
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.85/20: Рейтинг темы: голосов - 20, средняя оценка - 4.85
0 / 0 / 2
Регистрация: 09.07.2012
Сообщений: 34
1

Отправка писем с localhost путем авторизации на SMTP

29.10.2013, 11:59. Просмотров 4192. Ответов 12
Метки нет (Все метки)


Доброго времени суток.

Задача: нужен скрипт для рассылки писем (по сути автоматизация действий с почтовой программой), поэтому выполняться будет на localhost.

Есть такой код:

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<?php
 
$SmtpServer="smtp.yandex.ru";
 
$SmtpPort="25";
 
$SmtpUser="my_email@yandex.ru";
 
$SmtpPass="my_password";
 
 
class SMTPClient
{
function SMTPClient ($SmtpServer, $SmtpPort, $SmtpUser, $SmtpPass, $from, $to, $subject, $body)
{
$this->SmtpServer = $SmtpServer;
$this->SmtpUser = base64_encode ($SmtpUser);
$this->SmtpPass = base64_encode ($SmtpPass);
$this->from = $from;
$this->to = $to;
$this->subject = $subject;
$this->body = $body;
if ($SmtpPort == "")
{
$this->PortSMTP = 25;
}
else
{
$this->PortSMTP = $SmtpPort;
}
}
function SendMail ()
{
    $HTTP_HOST = "localhost";
if ($SMTPIN = fsockopen ($this->SmtpServer, $this->PortSMTP))
{
fputs ($SMTPIN, "EHLO ".$HTTP_HOST."\r\n");
$talk["hello"] = fgets ( $SMTPIN, 1024 );
fputs($SMTPIN, "auth login\r\n");
$talk["res"]=fgets($SMTPIN,1024);
fputs($SMTPIN, $this->SmtpUser."\r\n");
$talk["user"]=fgets($SMTPIN,1024);
fputs($SMTPIN, $this->SmtpPass."\r\n");
$talk["pass"]=fgets($SMTPIN,256);
fputs ($SMTPIN, "MAIL FROM: <".$this->from.">\r\n");
$talk["From"] = fgets ( $SMTPIN, 1024 );
fputs ($SMTPIN, "RCPT TO: <".$this->to.">\r\n");
$talk["To"] = fgets ($SMTPIN, 1024);
fputs($SMTPIN, "DATA\r\n");
$talk["data"]=fgets( $SMTPIN,1024 );
fputs($SMTPIN, "To: <".$this->to.">\r\nFrom: <".$this->from.">\r\nSubject:".$this->subject."\r\n\r\n\r\n".$this->body."\r\n.\r\n");
$talk["send"]=fgets($SMTPIN,256);
fputs ($SMTPIN, "QUIT\r\n");
fclose($SMTPIN);
}
return $talk;
}
}
 
$to = "adresat@yandex.ru";
$from = "my_email";
$subject = "test mail.";
$body = "Hello!\n\nI type this message to test php script.\n\nThanx.";
$SMTPMail = new SMTPClient ($SmtpServer, $SmtpPort, $SmtpUser, $SmtpPass, $from, $to, $subject, $body);
$SMTPChat = $SMTPMail->SendMail();
 
?>
запускаю скрипт в консоли (Windows 7), выполнение успешно, ни предупреждений, ни ошибок нет, а письма не доходят.

В чем может быть дело?

Спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.10.2013, 11:59
Ответы с готовыми решениями:

SMTP отправка писем
Задумался, а как сделать отправку на чистом C++. Перерыл всё... И ничего, нет, они есть, но на...

Отправка писем по протоколу SMTP
Мне нужен простой способ отправлять email письма прямо из приложения в фоновом режиме. Я нашёл один...

SMTP отправка писем с авторизацией
Доброго дня , друзья подскажите вот есть код , нужно сделать отправку писем через SMTP с...

Отправка писем через smtp
&lt;?php ini_set( 'html_errors', false ); $_POST = 'mymail@yandex.ru'; - почта, куда придет письмо...

12
65 / 63 / 10
Регистрация: 16.07.2010
Сообщений: 287
29.10.2013, 13:17 2
Странное дело у вас скрипт обрабатывается на локале а получать данные должен с веба.
Смысл такой 127.0.0.1 - это локальный ip который присвоен любому компьютеру.
То есть создайте в директории где у вас localhost папку с названием yandex.ru- перезагрузите сервер. Потом напишите тему украли yandex.ru.
Короче локал настроен так по умолчанию что доступа из интернета к вашим файлам нет.
0
0 / 0 / 2
Регистрация: 09.07.2012
Сообщений: 34
29.10.2013, 13:27  [ТС] 3
Добавлено через 34 секунды
Тогда какое значение должен иметь $HTTP_HOST, чтобы обрабатывался smtp.yandex.ru ?
0
65 / 63 / 10
Регистрация: 16.07.2010
Сообщений: 287
29.10.2013, 13:49 4
wiseman92, С локала не стоит этого делать. Так как необходимо будет открыть доступ к директории из интернета. Регистрируйте тест на хостах и там пробуйте. Как открыть доступ к локальной папке читайте документацию к установленному серверу, но я вам не советую этого делать.
0
0 / 0 / 2
Регистрация: 09.07.2012
Сообщений: 34
29.10.2013, 13:59  [ТС] 5
то есть если нужно отправить письма скриптом, мне нужно хост регать? неужели нет решения проще? допустим по телнету?
0
65 / 63 / 10
Регистрация: 16.07.2010
Сообщений: 287
29.10.2013, 14:54 6
есть открывайте доступ к папке из интернета. но я вам этого делать не советую.

Добавлено через 15 минут
wiseman92, Вы каким сервером пользуетесь?
0
0 / 0 / 2
Регистрация: 09.07.2012
Сообщений: 34
29.10.2013, 16:08  [ТС] 7
Я не стал ставить себе SMTP-сервер. Я сначала хотел сделать соединение на сокетах с сервером yandex. Однажды использовал SwiftMailer для отправки почты через SMTP yandex, поэтому решил попробовать аналогично на своей машине.
0
65 / 63 / 10
Регистрация: 16.07.2010
Сообщений: 287
29.10.2013, 16:23 8
каким образом у вас обрабатываются php скрипты?
0
0 / 0 / 2
Регистрация: 09.07.2012
Сообщений: 34
29.10.2013, 16:27  [ТС] 9
Скачал php с офсайта, настроил PATH, запускаю скрипт: C:\php5\>php script.php
0
65 / 63 / 10
Регистрация: 16.07.2010
Сообщений: 287
29.10.2013, 16:31 10
wiseman92, И что вы этим хотите добиться?
0
0 / 0 / 2
Регистрация: 09.07.2012
Сообщений: 34
29.10.2013, 20:46  [ТС] 11
Извините, но вас не понимаю. Скрипты у меня выполняются, если вы про это. Интерпретатор настроен.
0
363 / 334 / 38
Регистрация: 29.03.2011
Сообщений: 838
30.10.2013, 05:29 12
wiseman92, на пыхе через сокеты с Smtp работать, это конечно - жесть, но вполне возможно.
у php есть такая вещь: http://www.php.net/manual/en/features.commandline.interactive.php - попробуйте пошагово вашу SendMail потестить. Подозрение, что яндексу что-то не понравился какой-нибудь параметр и он вас тихо отшивает (из-за спамеров появилась такая привычка у почтовиков). Какой именно - сейчас уже не вспомню, раньше так напрямую телнетом игрался. - лучше поглядите ответ или прям в пыхе или по старинке, телнетом.

skremet, Не понимаю, при чём тут доступ из интернета, посмотрите на код: ТС заходит в свой ящик как и любой почтовый клиент и может творить там что захочет, пока протокол соблюдает.
0
0 / 0 / 2
Регистрация: 09.07.2012
Сообщений: 34
30.10.2013, 11:32  [ТС] 13
Я подключался вручную по telnet к yandex, та же ошибка.( Логин и пароль прогонял через encode().
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.10.2013, 11:32

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Отправка Писем Во Внешний Smtp Сервер
При отправке писем другим smtp серверам, поле &quot;от кого&quot; заменяется записью интернет адрес с...

Не работает отправка писем по SMTP на windows 7
IdSMTP-&gt;Host = &quot;smtp.&quot; + scbServ-&gt;Text.LowerCase(); IdSMTP-&gt;UserId = sedLog-&gt;Text; ...

Отправка писем через SMTP с авторизацией
Доброго времени суток. Я начинающий и не с первого раза все выходит=) вот добрался до одной главы в...

Отправка писем с localhost используя pear: Mail
У меня такой вопрос надо чет настраивать в php, или гдето еще чтоб отсылать письма с localhost...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.