404 / 360 / 36
Регистрация: 11.10.2010
Сообщений: 1,907
1

SMTP

13.08.2011, 18:45. Показов 3720. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Написал такой код для отправки эл-почты
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
#include <windows.h>
#include <winsock2.h>
#include <stdio.h>
int SendMail();
int InitSocket(int major,int minor);
int main()
{
    if (!SendMail())
        printf("Error");
    return 0;
}
int SendMail()
{
    const char *msg="Date: 13 August 2011\r\nFROM: [email]aramo1996@rambler.ru[/email]\r\nTO: [email]aramcpp@gmail.com[/email]\r\nSUBJECT: Hello\r\nHello!\r\n";
    SOCKET sock_smtp=NULL;
    struct sockaddr_in address;
    char status[300];
    int iResult=0;
    if (!InitSocket(1,1)) return 0;
    sock_smtp=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    if (sock_smtp==INVALID_SOCKET)
    {
        WSACleanup();
        return 0;
    }
    struct hostent *d_addr;
    d_addr=gethostbyname("smtp.rambler.ru");
    address.sin_port=htons(25);
    address.sin_addr.s_addr=*((unsigned *)d_addr->h_addr);
    address.sin_family=AF_INET;
    if (connect(sock_smtp,(struct sockaddr *)&address,sizeof(struct sockaddr_in)))
    {
        closesocket(sock_smtp);
        WSACleanup();
        return 0;
    }
    iResult=recv(sock_smtp,status,300,0);
    if (iResult==SOCKET_ERROR)
        goto error_end;
    status[iResult]='\0';
    OutputDebugString(status);
    sprintf(status,"HELO %s\r\n","gmail.com");
    send(sock_smtp,status,strlen(status),0);
    iResult=recv(sock_smtp,status,300,0);
    if (iResult==SOCKET_ERROR)
        goto error_end;
    status[iResult]='\0';
    OutputDebugString(status);
    sprintf(status,"MAIL FROM:<%s>\r\n","aramcpp@gmail.com");
    send(sock_smtp,status,strlen(status),0);
    iResult=recv(sock_smtp,status,300,0);
    if (iResult==SOCKET_ERROR)
        goto error_end;
    status[iResult]='\0';
    OutputDebugString(status);
    sprintf(status,"RCPT TO:<%s>\r\n","aramcpp@gmail.com");
    send(sock_smtp,status,strlen(status),0);
    iResult=recv(sock_smtp,status,300,0);
    if (iResult==SOCKET_ERROR)
        goto error_end;
    status[iResult]='\0';
    OutputDebugString(status);
    sprintf(status,"DATA \r\n","aramcpp@gmail.com");
    send(sock_smtp,status,strlen(status),0);
    iResult=recv(sock_smtp,status,300,0);
    if (iResult==SOCKET_ERROR)
        goto error_end;
    status[iResult]='\0';
    OutputDebugString(status);
    sprintf(status,"%s\r\n.\r\n",msg);
    send(sock_smtp,status,strlen(status),0);
    iResult=recv(sock_smtp,status,300,0);
    if (iResult==SOCKET_ERROR)
        goto error_end;
    status[iResult]='\0';
    OutputDebugString(status);
    sprintf(status,"QUIT\r\n");
    send(sock_smtp,status,strlen(status),0);
    iResult=recv(sock_smtp,status,300,0);
    if (iResult==SOCKET_ERROR)
        goto error_end;
    status[iResult]='\0';
    OutputDebugString(status);
    closesocket(sock_smtp);
    WSACleanup();
    return 1;
error_end:
    closesocket(sock_smtp);
    WSACleanup();
    return 0;
}
int InitSocket(int major,int minor)
{
    WSADATA socketInfo;
    WORD wVersioSocket;
    int iError;
    wVersioSocket=MAKEWORD(major,minor);
    iError=WSAStartup(wVersioSocket,&socketInfo);
    if (iError!=0)
    {
        WSACleanup();
        return 0;
    }
    return 1;
}
но программа не отправляет письмо, пробывал и другие сорцы из инета не не один не отправлял. Можете дать рабочий пример.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.08.2011, 18:45
Ответы с готовыми решениями:

Как отправить почту не используя smtp (добавить в sender функции smtp)
здравствуйте, быть может я не до конца понимаю принципы взаимодействия клиента, smtp сервера, и...

Как создать SMTP-сервер на VB (чтобы прога отправляла по РОР3, не используя провайдеров SMTP)
Всем привет! Подскажите, плиз, ссылков на тему! А то я нарыл только что-то типа 'Отправка по...

SMTP
Здравствуйте, нужна помощь по программной отправке e-mail. Взял код с сайта...

SMTP
Здравствуйте, может кто нибудь скинуть пример как эти настройки можно прикрутить в delphi ...

7
204 / 205 / 16
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
13.08.2011, 19:03 2
А на выводе что? Может сервер отлуп отдает?
Вообще лучше всего такие вещи можно потестить на телнете банальном.
открываешь, подключаешься, пишешь руками команды.

PS: код ужасен
0
404 / 360 / 36
Регистрация: 11.10.2010
Сообщений: 1,907
13.08.2011, 19:04  [ТС] 3
villu, телнет почему то нормально не работает.
0
204 / 205 / 16
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
13.08.2011, 19:05 4
в чем это выражается?
давай по порядку все ходы
0
404 / 360 / 36
Регистрация: 11.10.2010
Сообщений: 1,907
13.08.2011, 19:06  [ТС] 5
villu, пишу адрес а он вылетает, пишет какая-то ошибка.
0
204 / 205 / 16
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
13.08.2011, 19:08 6
ну вот что-то типа
~$ telnet smtp.mail.ru 25
Trying 94.100.177.1...
Connected to smtp.mail.ru.
Escape character is '^]'.
220 smtp15.mail.ru ESMTP ready
helo mail.ru
250 smtp15.mail.ru
mail from : test@mail.ru
250 2.0.0 OK
-----------
в общем нужна чёткая диагностика, куда подключается, что отвечает и какие ошибки по дороге встречаются.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12454 / 7479 / 1752
Регистрация: 25.07.2009
Сообщений: 13,755
14.08.2011, 01:37 7
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от aram_gyumri Посмотреть сообщение
пишет какая-то ошибка.
Так и пишет - "какая-то ошибка"? Вообще смелое решение - едва подключившись сразу пытаться письмо отправить. А поздороваться, а авторизоваться - не? Короче, правильно вам говорят - прочитайте поподробнее про SMTP и с телнетом всё-таки разберитесь...

Добавлено через 3 часа 11 минут
aram_gyumri, вот грубый набросок в линуксовом варианте. Ответы сервера не проверяются, просто на консоль выводятся. Но письмо отправилось и пришло...
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <netdb.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
 
const char strServerName[] = "smtp.mail.ru";
const char strEhlo[] = "EHLO ip_or_your_domain_name\r\n";
const char strAuthType[] = "AUTH LOGIN\r\n";
const char strLogin[] = "base64_encoded_login\r\n";
const char strPassword[] = "base64_encoded_password\r\n";
const char strMailFrom[] = "MAIL FROM: <sender@mail.ru>\r\n";
const char strRcptTo[] = "RCPT TO: <recipient@yandex.ru>\r\n";
const char strData[] = "DATA\r\n";
const char strMailBody[] = "from: [email]sender@mail.ru[/email]\r\nto: [email]recipient@yandex.ru[/email]\r\nsubject: hendmade mail\r\n\r\nHelo there!\r\n.\r\n";
const char strQuit[] = "QUIT\r\n";
 
int main(void){
    char bufResponse[BUFSIZ + 1];
    int n, sockFd;
    struct hostent * hPtr;
    struct sockaddr_in servAddr;
    
    if ( ( hPtr = gethostbyname(strServerName) ) == NULL ){
        fprintf(stderr, "Can't resolve server by name!\n");
        exit(1);
    }
    
    if ( ( sockFd = socket(AF_INET, SOCK_STREAM, 0) ) < 0 ){
        fprintf(stderr, "Can't create socket!\n");
        exit(1);
    }
    
    memset(&servAddr, 0, sizeof(struct sockaddr_in));
    servAddr.sin_family = AF_INET;
    servAddr.sin_port = htons(25);
    memcpy(&servAddr.sin_addr, *(hPtr->h_addr_list), sizeof(struct in_addr));
    
    if ( connect(sockFd, (struct sockaddr*)&servAddr, sizeof(struct sockaddr_in)) ){
        fprintf(stderr, "Can't connect to server!\n");
        exit(1);
    }
    
    n = strlen(strEhlo);
    if ( write(sockFd, strEhlo, n) != n ){
        fprintf(stderr, "Error while sending EHLO\n");
        exit(1);
    }
    
    if ( ( n = read(sockFd, bufResponse, BUFSIZ) ) < 1 ){
        fprintf(stderr, "Error reading response from server!\n");
        exit(1);
    }
    bufResponse[n] = '\0';
    fprintf(stderr, "Response after EHLO: %s\n", bufResponse);
    
    n = strlen(strAuthType);
    if ( write(sockFd, strAuthType, n) != n ){
        fprintf(stderr, "Error while sending auth type\n");
        exit(1);
    }
    
    if ( ( n = read(sockFd, bufResponse, BUFSIZ) ) < 1 ){
        fprintf(stderr, "Error reading response from server!\n");
        exit(1);
    }
    bufResponse[n] = '\0';
    fprintf(stderr, "Response after AUTH LOGIN: %s\n", bufResponse);
    
    n = strlen(strLogin);
    if ( write(sockFd, strLogin, n) != n ){
        fprintf(stderr, "Error while sending login!\n");
        exit(1);
    }
    
    if ( ( n = read(sockFd, bufResponse, BUFSIZ) ) < 1 ){
        fprintf(stderr, "Error reading response from server!\n");
        exit(1);
    }
    bufResponse[n] = '\0';
    fprintf(stderr, "Response after sending login: %s\n", bufResponse);
    
    n = strlen(strPassword);
    if ( write(sockFd, strPassword, n) != n ){
        fprintf(stderr, "Error while sending password!\n");
        exit(1);
    }
    
    if ( ( n = read(sockFd, bufResponse, BUFSIZ) ) < 1 ){
        fprintf(stderr, "Error reading response from server!\n");
        exit(1);
    }
    bufResponse[n] = '\0';
    fprintf(stderr, "Response after sending password: %s\n", bufResponse);
    
    n = strlen(strMailFrom);
    if ( write(sockFd, strMailFrom, n) != n ){
        fprintf(stderr, "Error while sending sender address!\n");
        exit(1);
    }
    
    if ( ( n = read(sockFd, bufResponse, BUFSIZ) ) < 1 ){
        fprintf(stderr, "Error reading response from server!\n");
        exit(1);
    }
    bufResponse[n] = '\0';
    fprintf(stderr, "Response after sending mail from: %s\n", bufResponse);
    
    n = strlen(strRcptTo);
    if ( write(sockFd, strRcptTo, n) != n ){
        fprintf(stderr, "Error while sending reciver address!\n");
        exit(1);
    }
    
    if ( ( n = read(sockFd, bufResponse, BUFSIZ) ) < 1 ){
        fprintf(stderr, "Error reading response from server!\n");
        exit(1);
    }
    bufResponse[n] = '\0';
    fprintf(stderr, "Response after sending rcpt to: %s\n", bufResponse);
    
    n = strlen(strData);
    if ( write(sockFd, strData, n) != n ){
        fprintf(stderr, "Error while sending data!\n");
        exit(1);
    }
    
    if ( ( n = read(sockFd, bufResponse, BUFSIZ) ) < 1 ){
        fprintf(stderr, "Error reading response from server!\n");
        exit(1);
    }
    bufResponse[n] = '\0';
    fprintf(stderr, "Response after sending data to: %s\n", bufResponse);
    
    n = strlen(strMailBody);
    if ( write(sockFd, strMailBody, n) != n ){
        fprintf(stderr, "Error while sending mail body!\n");
        exit(1);
    }
    
    if ( ( n = read(sockFd, bufResponse, BUFSIZ) ) < 1 ){
        fprintf(stderr, "Error reading response from server!\n");
        exit(1);
    }
    bufResponse[n] = '\0';
    fprintf(stderr, "Response after sending mail body to: %s\n", bufResponse);
    
    n = strlen(strQuit);
    if ( write(sockFd, strQuit, n) != n ){
        fprintf(stderr, "Error while sending quit!\n");
        exit(1);
    }
    
    if ( close(sockFd) ){
        fprintf(stderr, "Can't properly close connection!\n");
        exit(1);
    }
    
    fprintf(stderr, "Message sent.\n");
    
    exit(0);
}
base64 онлайн кодировщиков в сети полно, ну и адреса отправителя/получателя правильные должны быть...
3
404 / 360 / 36
Регистрация: 11.10.2010
Сообщений: 1,907
14.08.2011, 10:16  [ТС] 8
easybudda, огромное спасибо
0
14.08.2011, 10:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.08.2011, 10:16
Помогаю со студенческими работами здесь

SMTP
Кто может написать пример работы билдера с smtp

Не работает SMTP
Указываю следующие данные: Хост: smtp.yandex.ru Тип защиты: SSL Порт: 465 Логин:...

SMTP ошибка
Добрый вечер! При отправке писем с помощью формы Contact Form 7 появляется ошибка: Ошибка при...

SMTP на VESTA CP
Взял VPS сервер. Установил VESTA CP. Настроил записи. 3астрял :wall: Где прописывается в...


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

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

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