마음의 안정을 찾기 위하여 - C/C++ Socket을 SMTP Mail 발송
2353935
379
575
관리자새글쓰기
태그위치로그방명록
별일없다의 생각
dawnsea's me2day/2010
색상(RGB)코드 추출기(Color...
Connection Generator/2010
최승호PD, '4대강 거짓말 검...
Green Monkey**/2010
Syng의 생각
syng's me2DAY/2010
천재 작곡가 윤일상이 기획,...
엘븐킹's Digital Factory/2010
C/C++ Socket을 SMTP Mail 발송
리눅스/리눅스 프로그래밍 | 2011/06/30 16:02
출처 : http://www.cplusplus.com/forum/windows/35333/

#include "io.h"
#include <sys/socket.h>
#include <netdb.h>
#include <stdio.h>

#include "winsock2.h"      /* WSAGetLastError, WSAStartUp  */
#define snprintf _snprintf


static void sendmail_write(
                const int  sock,
                const char *str,
                const char *arg
            ) {
    char buf[4096];

    if (arg != NULL)
        snprintf(buf, sizeof(buf), str, arg);
    else
        snprintf(buf, sizeof(buf), str);

    send(sock, buf, strlen(buf), 0);
}

static int sendmail(
                const char *from,
                const char *to,
                const char *subject,
                const char *body,
                const char *hostname,
                const int   port
            ) {

    struct hostent *host;
    struct sockaddr_in saddr_in;
    int sock = 0;


    WSADATA wsaData;
    if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
        return -1;
    }


    sock = socket(AF_INET, SOCK_STREAM, 0);
    host = gethostbyname(hostname);

    saddr_in.sin_family      = AF_INET;
    saddr_in.sin_port        = htons((u_short)port);
    saddr_in.sin_addr.s_addr = 0;

    memcpy((char*)&(saddr_in.sin_addr), host->h_addr, host->h_length);

    if (connect(sock, (struct sockaddr*)&saddr_in, sizeof(saddr_in)) == -1) {
        return -2;
    }

    sendmail_write(sock, "HELO %s\n",       from);    // greeting
    sendmail_write(sock, "MAIL FROM: %s\n", from);    // from
    sendmail_write(sock, "RCPT TO: %s\n",   to);      // to
    sendmail_write(sock, "DATA\n",          NULL);    // begin data

    // next comes mail headers
    sendmail_write(sock, "From: %s\n",      from);
    sendmail_write(sock, "To: %s\n",        to);
    sendmail_write(sock, "Subject: %s\n",   subject);

    sendmail_write(sock, "\n",              NULL);

    sendmail_write(sock, "%s\n",            body);    // data

    sendmail_write(sock, ".\n",             NULL);    // end data
    sendmail_write(sock, "QUIT\n",          NULL);    // terminate

    close(sock);

    return 0;
}


int main(int argc, char *argv[]) {

    int ret = sendmail(
        "testas@domainname.com",  // from
        "Null665@gmail.com", // to
        "Subject",
        "body",
        "smtp.google.com",
        25
    );

    if (ret != 0)
        fprintf(stderr, "Failed to send mail (code: %i).\n", ret);
    else
        fprintf(stdout, "Mail successfully sent.\n");

    return ret;
}



C:>nslookup
>set type=mx
>domain.com

C:>telnet mail.domain.com 25

220 shinbiro.com ESMTP Sendmail 8.13.8/8.13.8; Thu, 30 Jun 2011 15:36:47 +0900
helo
250 mail.domain.com Hello [210.96.xxx.xxx]
mail from: sender@gmail.com
250 2.1.0 sender@gmail.com....Sender OK
rcpt to: receiver@gmail.com
250 2.1.5 receiver@gmail.com
data
354 Start mail input; end with .
subject: telnet mail test <- 엔터 두 번

telnet mail test
.
250 2.6.0 <6ZYX20mgq00000002@mail.domain.com> Queued mail for delivery
quit
221 2.0.0 mail.domain.com Service closing transmission channel


KT(메가패스)- kornet.net ※인증필요
하나로통신(하나)-mail.hanafos.com ※인증필요
두루넷(thrunet)-smtp.korea.com ※인증필요
신비로(샤크)-mail.shinbiro.com
드림라인-mail.hanafos.com
하이텔(Hitel)-smtp.hitel.net
천리안(Chollian)-mail.chollian.net
LG U+(보라홈넷)-smtp.borahome.net
아이넷(I-net)-mail.nuri.net
나우누리(Nownuri)-mail.nownuri.net
넷츠고(Netsgo)-netsgo.com
채널아이(Channel-i)-mail.channeli.net
엘림넷(Elimnet)-elim.net
인터피아(Interpia)-pop3.interpia.net
키스코(Kisco)-203.233.144.1
미래텔(Miraetel)-miraetel.kornet.nm.kr
경기넷-mail.kg21.net
에듀넷(Edunet)-edunet4u.net
하이텔(Hitel)-smtp.hitel.net
2011/06/30 16:02 2011/06/30 16:02
Article tag list Go to top
View Comment 2
Trackback URL :: 이 글에는 트랙백을 보낼 수 없습니다
From. 구차니 2011/07/02 09:22
답글달기삭제
여담이지만, IIS등으로 SMTP 서버를 만들어 보내보면
일반적인 경우에는 차단된 IP 어드레스로 대규모 포탈에서 팅겨내더라구요 ^^;
From. 그리움 2011/07/04 10:13
삭제
"화이트도메인" 이라는 제도(?)가 있어서, 해당 아이피를 소유하고 있는 서브 도메인으로 등록한다음 발송하면 되는것으로 알고 있습니다.

https://www.kisarbl.or.kr/
PREV : [1] : NEXT
 
 
 
 
: [1] ... [102][103][104][105][106][107][108][109][110] ... [1323] :
«   2024/09   »
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          
전체 (1323)
출판 준비 (0)
My-Pro... (41)
사는 ... (933)
블로그... (22)
My Lib... (32)
게임 ... (23)
개발관... (3)
Smart ... (1)
Delphi (93)
C Builder (0)
Object... (0)
VC, MF... (10)
Window... (1)
Open API (3)
Visual... (0)
Java, JSP (2)
ASP.NET (0)
PHP (6)
Database (12)
리눅스 (29)
Windows (25)
Device... (1)
Embedded (1)
게임 ... (0)
Web Se... (2)
Web, S... (21)
잡다한... (7)
프로젝트 (0)
Personal (0)
대통령... (13)
Link (2)