목차
메일보내기 프로그램 작성
o 개요
o 프로그램 요구사항
o 주요변수의 사용방법
o 프로젝트 수행 절차 :
SMTP를 이용한 mail sending 프로그램 작성 도우미
o Example A에서 사용된 표기법
1. 소켓 생성
2. 220 rglapache SMTP NAVIEG 2.1 bld 63; Thu, 17 Oct 2002 09:18:30 -0700
3. HELO localhost
4. 250 rglapache Hello
5. MAIL FROM: test@testingsmtp.com
6. 250 <test@testingsmtp.com>... Sender ok
7. RCPT TO: richlowe@internet--tips.net
8. 250 <richlowe@internet-tips.net>... Recipient ok
9. 본문 보내기 : 본문(message)는 header와 body로 구성되어 있다
10. 250 M2002101709193007556 Message accepted for delivery
11 QUIT
Example2. (from handout) :
o Example2의 표기법
o 추가적인 유의사항 :
o 개요
o 프로그램 요구사항
o 주요변수의 사용방법
o 프로젝트 수행 절차 :
SMTP를 이용한 mail sending 프로그램 작성 도우미
o Example A에서 사용된 표기법
1. 소켓 생성
2. 220 rglapache SMTP NAVIEG 2.1 bld 63; Thu, 17 Oct 2002 09:18:30 -0700
3. HELO localhost
4. 250 rglapache Hello
5. MAIL FROM: test@testingsmtp.com
6. 250 <test@testingsmtp.com>... Sender ok
7. RCPT TO: richlowe@internet--tips.net
8. 250 <richlowe@internet-tips.net>... Recipient ok
9. 본문 보내기 : 본문(message)는 header와 body로 구성되어 있다
10. 250 M2002101709193007556 Message accepted for delivery
11 QUIT
Example2. (from handout) :
o Example2의 표기법
o 추가적인 유의사항 :
본문내용
dr_list[0]));
serv_adr.sin_port=htons(25);
if(connect(sock,(struct sockaddr*)&serv_adr,sizeof(serv_adr))==-1)
error_handling(\"connect() error\");
memset(&rcv_message,0,100);
memset(&rcv,0,4);
read(sock,rcv_message,100);
strncpy(rcv,rcv_message,3);
if(strcmp(rcv,\"220\")!=0){
printf(\"%s\",rcv_message);
exit(1);
}
fputs(\"송신자 도메인 : \",stdout);
memset(&rcv_message,0,BUF_SIZE);
memset(&snd_message,0,BUF_SIZE);
memset(&domain,0,100);
fgets(domain,BUF_SIZE, stdin);
strcpy(snd_message,\"HELO \");
strcat(snd_message, domain);
write(sock,snd_message,strlen(snd_message));
read(sock,rcv_message,100);
strncpy(rcv,rcv_message,3);
if(strcmp(\"250\",rcv)!=0){
fputs(snd_message,stdout);
exit(1);
}
fputs(\"송신자 이메일 주소 : \",stdout);
memset(&rcv_message,0,BUF_SIZE);
memset(&snd_message,0,BUF_SIZE);
memset(&email,0,100);
fgets(email,100,stdin);
strcpy(snd_message,\"MAIL FROM: \");
strcat(snd_message, email);
write(sock,snd_message,strlen(snd_message));
read(sock,rcv_message,100);
strncpy(rcv,rcv_message,3);
if(strcmp(rcv,\"250\")!=0){
fputs(snd_message,stdout);
exit(1);
}
memset(&rcv_message,0,BUF_SIZE);
memset(&snd_message,0,BUF_SIZE);
memset(&domain,0,100);
strcpy(snd_message,\"RCPT TO: hclee@cherry.ssu.ac.kr\\n\");
write(sock,snd_message,strlen(snd_message));
read(sock,rcv_message,100);
strncpy(rcv,rcv_message,3);
if(strcmp(rcv,\"250\")!=0){
fputs(snd_message,stdout);
exit(1);
}
memset(&rcv_message,0,BUF_SIZE);
memset(&snd_message,0,BUF_SIZE);
memset(&domain,0,100);
strcpy(snd_message,\"DATA\\n\");
write(sock,snd_message,strlen(snd_message));
read(sock,rcv_message,100);
strncpy(rcv,rcv_message,3);
if(strcmp(rcv,\"354\")!=0){
fputs(snd_message,stdout);
exit(1);
}
memset(&snd_message,0,100);
memset(&rcv_message,0,BUF_SIZE);
strcpy(snd_message,\"From: \");
strcat(snd_message,email);
write(sock,snd_message,strlen(snd_message));
memset(&rcv_message,0,100);
memset(&snd_message,0,BUF_SIZE);
strcpy(snd_message,\"To: hclee@cherry.ssu.ac.kr\\n\");
write(sock,snd_message,strlen(snd_message));
fputs(“메일 제목을 입력하세요\\n\",stdout);
memset(&snd_message,0,BUF_SIZE);
fgets(subject,100,stdin);
strcpy(snd_message,\"Subject: \");
strcat(snd_message, subject);
write(sock,snd_message,strlen(snd_message));
memset(&snd_message,0,BUF_SIZE);
strcpy(snd_message,\"\\n\");
write(sock,snd_message,strlen(snd_message));
fputs(\"메일 내용을 입력하세요(end with \\\".\\\" on a line by itself)\\n\",stdout);
memset(&body,0,1000);
strcpy(body,\"\\n\");
while(1){
memset(&snd_message,0,BUF_SIZE);
fgets(snd_message,100,stdin);
if(strcmp(snd_message,\".\\n\")==0)
break;
else strcat(body,snd_message);
}
strcat(body,\"\\n.\\n\");
write(sock,body,strlen(body));
memset(&rcv_message,0,BUF_SIZE);
read(sock,rcv_message,100);
strncpy(rcv,rcv_message,3);
if(strcmp(rcv,\"250\")!=0)
printf(\"본문 쓰기 실패\\n\");
memset(&snd_message,0,100);
strcpy(snd_message,\"QUIT\\n\");
write(sock,snd_message,strlen(snd_message));
fputs(\"메일 전송 완료\\n\",stdout);
close(sock);
return 0;
}
void error_handling(char* message)
{
fputs(message, stderr);
fputc(\'\\n\', stderr);
exit(1);
}
serv_adr.sin_port=htons(25);
if(connect(sock,(struct sockaddr*)&serv_adr,sizeof(serv_adr))==-1)
error_handling(\"connect() error\");
memset(&rcv_message,0,100);
memset(&rcv,0,4);
read(sock,rcv_message,100);
strncpy(rcv,rcv_message,3);
if(strcmp(rcv,\"220\")!=0){
printf(\"%s\",rcv_message);
exit(1);
}
fputs(\"송신자 도메인 : \",stdout);
memset(&rcv_message,0,BUF_SIZE);
memset(&snd_message,0,BUF_SIZE);
memset(&domain,0,100);
fgets(domain,BUF_SIZE, stdin);
strcpy(snd_message,\"HELO \");
strcat(snd_message, domain);
write(sock,snd_message,strlen(snd_message));
read(sock,rcv_message,100);
strncpy(rcv,rcv_message,3);
if(strcmp(\"250\",rcv)!=0){
fputs(snd_message,stdout);
exit(1);
}
fputs(\"송신자 이메일 주소 : \",stdout);
memset(&rcv_message,0,BUF_SIZE);
memset(&snd_message,0,BUF_SIZE);
memset(&email,0,100);
fgets(email,100,stdin);
strcpy(snd_message,\"MAIL FROM: \");
strcat(snd_message, email);
write(sock,snd_message,strlen(snd_message));
read(sock,rcv_message,100);
strncpy(rcv,rcv_message,3);
if(strcmp(rcv,\"250\")!=0){
fputs(snd_message,stdout);
exit(1);
}
memset(&rcv_message,0,BUF_SIZE);
memset(&snd_message,0,BUF_SIZE);
memset(&domain,0,100);
strcpy(snd_message,\"RCPT TO: hclee@cherry.ssu.ac.kr\\n\");
write(sock,snd_message,strlen(snd_message));
read(sock,rcv_message,100);
strncpy(rcv,rcv_message,3);
if(strcmp(rcv,\"250\")!=0){
fputs(snd_message,stdout);
exit(1);
}
memset(&rcv_message,0,BUF_SIZE);
memset(&snd_message,0,BUF_SIZE);
memset(&domain,0,100);
strcpy(snd_message,\"DATA\\n\");
write(sock,snd_message,strlen(snd_message));
read(sock,rcv_message,100);
strncpy(rcv,rcv_message,3);
if(strcmp(rcv,\"354\")!=0){
fputs(snd_message,stdout);
exit(1);
}
memset(&snd_message,0,100);
memset(&rcv_message,0,BUF_SIZE);
strcpy(snd_message,\"From: \");
strcat(snd_message,email);
write(sock,snd_message,strlen(snd_message));
memset(&rcv_message,0,100);
memset(&snd_message,0,BUF_SIZE);
strcpy(snd_message,\"To: hclee@cherry.ssu.ac.kr\\n\");
write(sock,snd_message,strlen(snd_message));
fputs(“메일 제목을 입력하세요\\n\",stdout);
memset(&snd_message,0,BUF_SIZE);
fgets(subject,100,stdin);
strcpy(snd_message,\"Subject: \");
strcat(snd_message, subject);
write(sock,snd_message,strlen(snd_message));
memset(&snd_message,0,BUF_SIZE);
strcpy(snd_message,\"\\n\");
write(sock,snd_message,strlen(snd_message));
fputs(\"메일 내용을 입력하세요(end with \\\".\\\" on a line by itself)\\n\",stdout);
memset(&body,0,1000);
strcpy(body,\"
while(1){
memset(&snd_message,0,BUF_SIZE);
fgets(snd_message,100,stdin);
if(strcmp(snd_message,\".\\n\")==0)
break;
else strcat(body,snd_message);
}
strcat(body,\"
write(sock,body,strlen(body));
memset(&rcv_message,0,BUF_SIZE);
read(sock,rcv_message,100);
strncpy(rcv,rcv_message,3);
if(strcmp(rcv,\"250\")!=0)
printf(\"본문 쓰기 실패\\n\");
memset(&snd_message,0,100);
strcpy(snd_message,\"QUIT\\n\");
write(sock,snd_message,strlen(snd_message));
fputs(\"메일 전송 완료\\n\",stdout);
close(sock);
return 0;
}
void error_handling(char* message)
{
fputs(message, stderr);
fputc(\'\\n\', stderr);
exit(1);
}
소개글