2014-12-06 4 views
1

C 소켓을 사용하여 우편 번호를 통해 이메일을 보내는 방법은 무엇입니까? 이 때문에 내가 여기에 넣어 것이다 대답없는 메시지 proggramlyC 소켓을 사용하여 우편물을 통해 전자 메일을 보내는 방법은 무엇입니까?

struct sockaddr_in addr; 
char message[] = "MAIL From: [email protected]\n \"[email protected]\"\n\"Test mail\"\n\"This is a test email\""; 
char buf[512]; 
//creating socket 

int sock = socket(AF_INET, SOCK_DGRAM , 0); 
//address parameters 

addr.sin_family = AF_INET; 
//connection port 
addr.sin_port = htons(8); 

// Inet 127.0.0.1. 
addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); 

sendto(sock, message, sizeof(message), 0, (struct sockaddr *)&addr, sizeof(addr)); 
close(sock); 
+0

을 만드는 방법; 실제 라이브러리를 사용하여 메일을 보낼 것을 제안하고 싶습니다. – LyingOnTheSky

+0

예, 도서관이 내 작업에 좋은 점은 소켓을 사용한다는 것입니다. –

+0

죄송합니다. * 후위는 라이브러리라고 생각하지 않았습니다. – LyingOnTheSky

답변

-1

찾을 솔루션

#include <stdio.h> 
#include <stdlib.h> 
#include <errno.h> 
#include <sys/types.h> 
#include <sys/socket.h> 
#include <netinet/in.h> 
#include <string.h> 

int main(int argc, char** argv) 
{ 
    int i; 
    struct sockaddr_in addr; 
    //commands for server 
    char* commands[] = {"eclo localhost\n", "mail from:[email protected]\n", "rcpt to:[email protected]\n", "data\n", "Subject: Тест\n\nТест\n", "\n.\n", "quit\n"}; 



    //creating socket 
    int sock = socket(AF_INET, SOCK_STREAM , 0); 
    if(sock < 0) 
    { 
     perror("error with creation of socket"); 
     return -errno; 
    } 

    //parameters 
    addr.sin_family = AF_INET; 
    //port 25 
    addr.sin_port = htons(25); 

    // Inet 127.0.0.1. 
    addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); 

    //connecting to server 
    if (connect(sock, (struct sockaddr*)&addr, sizeof(addr)) == -1) 
    { 
    perror("error with creation of socket"); 
     return -errno; 
    } 

    //sending commands 
    for(i = 0; i < sizeof(commands)/4; i++) 
     send(sock, commands[i], strlen(commands[i]), 0); 

    //closing connection 
    close(sock); 

    return (EXIT_SUCCESS); 
} 
+0

이러한 명령은 부분적으로 잘못되었습니다 ("ehlo"대신 "eclo", "\ r \ n"및 "\ n \"이외의 "\ n") 그리고 서버의 응답도 확인하지 않았습니다. 이는 관용 서버에서만 작동하며, 다른 서버는 전송을 거부하거나 IP를 스팸 발송자로 블랙리스트에 올릴 수도 있습니다. 이 작업을 수행하는 방법에 대한 [SMTP 프로토콜] (http://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol)을 확인하십시오. –