288 / 229 / 27
Регистрация: 13.06.2010
Сообщений: 744
1

SMTP mail

08.02.2012, 14:00. Показов 5368. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Хочу выразить огромную благодарность пользователю crautcher за код отсылки почты по smtp
Пытаюсь его использовать: (вместо username и *** конечно же реальные почтовые ящики и пароли)

Требуется отправка почты за счет перехода по ссылке.. типа: site/smtpmail.php
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
<?php
 
$to = "username@gmail.com"; 
$hdrs = "Content-type: text/plain; charset = utf-8";
$subj = "Сообщение с вашего сайта";
 
if (isset($_POST['name'])) {$name = $_POST['name'];}
if (isset($_POST['email'])) {$to = $_POST['email'];}
if (isset($_POST['subject'])) {$subj = $_POST['subj'];}
if (isset($_POST['message'])) {$mess = $_POST['mess'];}
 
$mess = "Имя пославшего: $name \nЭлектронный адрес: $email \nСообщение: $mess";
 
$config['smtp_username'] = 'username@mail.ru'; //Смените на имя своего почтового ящика.
$config['smtp_port'] = '25'; // Порт работы. Не меняйте, если не уверены.
$config['smtp_host'] = 'smtp.mail.ru'; //сервер для отправки почты
$config['smtp_password'] = '***'; //пароль
$config['smtp_charset'] = 'UTF-8'; //кодировка сообщений.
$config['smtp_from'] = 'username'; //Ваше имя - или имя Вашего сайта. Будет показывать при прочтении в поле "От кого"
 
 
function smtpmail($mail_to, $subject, $message, $headers='') {
        global $config;
        $SEND =   "Date: ".date("D, d M Y H:i:s") . " UT\r\n";
        $SEND .=   'Subject: =?'.$config['smtp_charset'].'?B?'.base64_encode($subject)."=?=\r\n";
        if ($headers) $SEND .= $headers."\r\n\r\n";
        else
        {
                $SEND .= "Reply-To: ".$config['smtp_username']."\r\n";
                $SEND .= "MIME-Version: 1.0\r\n";
                $SEND .= "Content-Type: text/plain; charset=\"".$config['smtp_charset']."\"\r\n";
                $SEND .= "Content-Transfer-Encoding: 8bit\r\n";
                $SEND .= "From: \"".$config['smtp_from']."\" <".$config['smtp_username'].">\r\n";
                $SEND .= "To: $mail_to <$mail_to>\r\n";
                $SEND .= "X-Priority: 3\r\n\r\n";
        }
        $SEND .=  $message."\r\n";
         if( !$socket = fsockopen($config['smtp_host'], $config['smtp_port'], $errno, $errstr, 30) ) {
              return false;
         }
 
            if (!server_parse($socket, "220", __LINE__)) return false;
 
            fputs($socket, "HELO " . $config['smtp_host'] . "\r\n");
            if (!server_parse($socket, "250", __LINE__)) {
               fclose($socket);
               return false;
            }
            fputs($socket, "AUTH LOGIN\r\n");
            if (!server_parse($socket, "334", __LINE__)) {
               fclose($socket);
               return false;
            }
 
            fputs($socket, base64_encode($config['smtp_username']) . "\r\n");
            if (!server_parse($socket, "334", __LINE__)) {
               fclose($socket);
               return false;
            }
            fputs($socket, base64_encode($config['smtp_password']) . "\r\n");
            if (!server_parse($socket, "235", __LINE__)) {
               fclose($socket);
echo "<b>smtp_password is failed: $config['smtp_password'] <p>";
#$subj = "sdf";
#echo "<b>just test: $subj <p>";
             return false;
            }
            fputs($socket, "MAIL FROM: <".$config['smtp_username'].">\r\n");
            if (!server_parse($socket, "250", __LINE__)) {
               fclose($socket);
               return false;
            }
            fputs($socket, "RCPT TO: <" . $mail_to . ">\r\n");
 
            if (!server_parse($socket, "250", __LINE__)) {
               fclose($socket);
               return false;
            }
            fputs($socket, "DATA\r\n");
 
            if (!server_parse($socket, "354", __LINE__)) {
               fclose($socket);
               return false;
            }
            fputs($socket, $SEND."\r\n.\r\n");
 
            if (!server_parse($socket, "250", __LINE__)) {
               fclose($socket);
               return false;
            }
            fputs($socket, "QUIT\r\n");
            fclose($socket);
            return TRUE;
}
 
function server_parse($socket, $response, $line = __LINE__) {
        global $config;
    while (substr($server_response, 3, 1) != ' ') {
        if (!($server_response = fgets($socket, 256))) {
                  return false;
                }
    }
    if (!(substr($server_response, 0, 3) == $response)) {
                  return false;
        }
    return true;
}
 
$send = smtpmail($to, $subj, $mess, $hdrs);
if ($send == 'true') {
  echo "<b>Спасибо за отправку вашего сообщения!<p>";
}
else {
  echo "<p><b>Ошибка. Сообщение не отправлено!";
}
?>
Результат: функция smtpmail вернула false из строки 89
1) Что может являться причиной? (адрес и пароль точно ввожу верные)
2) Как вывести то, что пытаюсь в строке 63
3) Правильно организован сам код?

с PHP только начал разбираться, прошу строго не судить, заранее благодарен
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.02.2012, 14:00
Ответы с готовыми решениями:

Вместо mail() использовать SMTP
всегда использовал для отправки писем mail() но на одном хостере не отправляется написал им пришол...

smtp gmail
Здравствуйте Программисты, как организовать отправку письмеца через сервер gmail?? Раньше у меня...

SMTP Отправка почты
Дорогие товарищи. Друг мне подогрел скрипт но не сказал что куда и почему. Своими мозгами пытался...

SMTP сессия с SSL
Сразу пишу что я не пыхпыхник, пишу на плюсах - проблема такова при логине на SMTP сервер получаю...

6
2432 / 2282 / 594
Регистрация: 27.05.2011
Сообщений: 7,798
08.02.2012, 14:06 2
PHP
1
2
3
4
5
6
7
8
$send = smtpmail('crautcher@gmail.com', 'some', 'test');
 
if ($send == 'true') {
  echo "<b>Спасибо за отправку вашего сообщения!<p>";
}
else {
  echo "<p><b>Ошибка. Сообщение не отправлено!";
}

мне пришло письмо ,
ааа там еще в настройках эмайла на сайте надо открыть доступ
1
288 / 229 / 27
Регистрация: 13.06.2010
Сообщений: 744
08.02.2012, 14:16  [ТС] 3
Цитата Сообщение от crautcher Посмотреть сообщение
там еще в настройках эмайла на сайте надо открыть доступ
В смысле на хостинге?
На том бесплатном, услугами которого пользуюсь не предоставляется в распоряжение почтовый ящик..
Собственно поэтому я и обрадовался, когда увидел ваш код.. Напрасно?
0
2432 / 2282 / 594
Регистрация: 27.05.2011
Сообщений: 7,798
08.02.2012, 14:20 4
Цитата Сообщение от __bool Посмотреть сообщение
В смысле на хостинге?
На том бесплатном, услугами которого пользуюсь не предоставляется в распоряжение почтовый ящик..
Собственно поэтому я и обрадовался, когда увидел ваш код.. Напрасно?
нет в настройках аккаунта эмайла , а может и не надо я уже не помню , на гмайле точно надо . попробуй просто конфиг , 2 функции , и отправить письмо без всяких постов и условий. я эту функцию написал именно потому что на моем хосте заблочена функция mail
1
288 / 229 / 27
Регистрация: 13.06.2010
Сообщений: 744
08.02.2012, 14:36  [ТС] 5
crautcher, получилось))) Ваш код свое дело сделал..
Сейчас тогда по-немногу буду добавлять своего..

Добавлено через 10 минут
Ошибку еще нашел у себя (строка 10)

PHP
1
2
3
4
5
$mess = 'default message';
if (isset($_POST['message'])) {$mess = $_POST['message'];}
...
 
$send = smtpmail('username@gmail.com', 'some', $mess);
Почему такое может не работать (приходит default message)?
Верно отправляю сообщение?
smtp1.php?message=12345
0
2432 / 2282 / 594
Регистрация: 27.05.2011
Сообщений: 7,798
08.02.2012, 14:54 6
Цитата Сообщение от __bool Посмотреть сообщение
PHP
1
2
$mess = 'default message';
if (isset($_POST['message'])) {$mess = $_POST['message'];}
Почему такое может не работать (приходит default message)?
Верно отправляю сообщение?
smtp1.php?message=12345
нет , это методом $_GET , а не $_POST
1
288 / 229 / 27
Регистрация: 13.06.2010
Сообщений: 744
08.02.2012, 15:23  [ТС] 7
Спасибо, работает
0
08.02.2012, 15:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.02.2012, 15:23
Помогаю со студенческими работами здесь

Капризы smtp сервера
Скрипт отправки почты целый год нормально работал и вдруг перестал. Пытаясь понять, в чем дело,...

Сложность в работе в SMTP
Здравствуйте! Пытаюсь работать с отправкой писем через SMTP: $config = 'webgoby@yandex.ru'; ...

Не удается подключиться к узлу SMTP
Здравствуйте! Подскажите пожалуйста, почему выходит такое сообщение?: SMTP...

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru