[질문]smtp를 이용한 메일 보내기 간단한 소스입니다.
글쓴이: 0huni / 작성시간: 화, 2003/12/09 - 1:06오후
리눅스 명령줄에 " telnet 메일호스트 25 " 이렇게 하고서
MAIL FROM: hoonizm@hananet.net 이런식으로 FROM, RECT TO, DATA등을 작성하면 리눅스에서 메일 보내는게 가능하잖아요?
이걸 간단하게 C로 구현중인데 아래 코드를 실행하면
메일서버에 접속하자 마자 아래 화면 출력 메시지처럼
바로 connection close가 됩니다.
왜 이러는건가요?
---------------------------------------------------------
#include <stdio.h> #define COMMAND "telnet 메일호스트 25" #define MAILHOST "mail.xxxxxxx.com" int main() { FILE *fd; char command_buf[100]; strcpy(command_buf, COMMAND); if ((fd = popen(command_buf, "w")) == NULL) { printf("error"); } fprintf(fd, "HELO localhost"); // 1 pclose(fd); return 0; }
화면 출력 메시지입니다.
Escape character is '^]'. 220 mail.dreamedianet.com SMTP MailEdge; Tue Dec 09 12:51:46 KST 2003 Connection closed by foreign host.
Forums:
[code:1] if ((fd = popen(
여기서 pipe가 닫히니깐 당연히 접속이 끊히네요...-_-ㅋ
pclose()는 여기선 별로 쓸모가 없을거 같구요...
loop() 를 돌리세요...
계속해서 새로운 명령을 받거나 입력을 하실려면...?
<어떠한 역경에도 굴하지 않는 '하양 지훈'>
#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);
답변 감사합니다. 그런데 pclose(fd)를 빼버려도 connect
답변 감사합니다.
그런데 pclose(fd)를 빼버려도 connection이 close가 됩니다.
helo localhost까지 되야 되는거 아닌가요?
그리고 loop()를 돌리라고 하신거에 대해서 좀더 자세한 답변 부탁드립니다. 플리즈~~~
fread() 로 응답을 받아 오셔야죠...-_-ㅋ그러면 어떻겐 될거
fread() 로 응답을 받아 오셔야죠...-_-ㅋ
그러면 어떻겐 될거 같긴 한데...
그리고 메일 보내는 것까지 원하신다면 단계를...
잘 보시길...
<어떠한 역경에도 굴하지 않는 '하양 지훈'>
#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);
fread()로 응답을 받아서 정상 응답인게 확인만 되면 다음 단계(ma
fread()로 응답을 받아서 정상 응답인게 확인만 되면 다음 단계(mail from, rcpt to등...)를 진행하면 되는건가요?
아마도...그렇게해서 진행을 하시면은 될것 같군요... &
아마도...
그렇게해서 진행을 하시면은 될것 같군요...
<어떠한 역경에도 굴하지 않는 '하양 지훈'>
#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);
정말 죄송한데요.잘 안되서 그러는데 제가 올린 소스부분에서 어떤식
정말 죄송한데요.
잘 안되서 그러는데 제가 올린 소스부분에서
어떤식으로 fread()를 해야되는지 조금만 첨가해 주실 수는 없는지요?
C를 한지 얼마 안되다보니 어려움이 많네요... 지송..
추신:
서명이 참 재밌네요...^^
[code:1]#include <stdio.h> #de
위와 같은 형식으로 해보세요...
<어떠한 역경에도 굴하지 않는 '하양 지훈'>
#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);
위의 소스 그대로 해서 임의의 메일서버로 테스트를 해봐도 여전히 안되네요
위의 소스 그대로 해서 임의의 메일서버로 테스트를 해봐도 여전히 안되네요.
뭐가 문제인가요?
그대로 했는데...ㅠ.ㅠ
위 소스대로 한 다음...temp 내용이 null 인가요?직접
위 소스대로 한 다음...
temp 내용이 null 인가요?
직접 실행하신 소스와 결과를 다시 한 번 올려 주세요.
<어떠한 역경에도 굴하지 않는 '하양 지훈'>
#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);
아래와 같이 했습니다.메일호스트명은 보안상 xxxxxxxxx 표시를
아래와 같이 했습니다.
메일호스트명은 보안상 xxxxxxxxx 표시를 한거구요.
buf의 값을 찍어보니 null이더라구요.
------------------------------------------------------------------
telnet을 popen하지 말고 그냥 소켓 프로그래밍을 직접 하시죠?
telnet을 popen하지 말고 그냥 소켓 프로그래밍을 직접 하시죠? telnet을 통하는 것보다 더 쉬울겁니다.
cdpark님 죄송한데요...제가 C초보라서 그러는데 소켓으로 하
cdpark님 죄송한데요...
제가 C초보라서 그러는데
소켓으로 하는 거에 대한 예제를 간단하게 들어주셨으면 고맙겠습니다.
#define SENDMAIL_PATH "/usr/l
#define SENDMAIL_PATH "/usr/lib/sendmail -bs > /dev/null"
rp = fopen (buffer, "r");
memset (des, 0, sizeof (des));
while (fgets (des, Standardlength, rp) != NULL) {
trims (des);
if ((fin = fopen (textfile ,"r")) == NULL) return (ERROR);
if ((fp = popen (SENDMAIL_PATH, "w")) != NULL) {
fprintf (fp, "HELO %s\n", Domain);
fprintf (fp, "MAIL FROM: %s@%s\n", 보내는 사람);
fprintf (fp, "RCPT TO: %s\n", des);
fprintf (fp, "DATA\n");
fprintf (fp, "Subject: %s\n", 제목);
fprintf (fp, "TO: %s\n", first);
if (cc == ON) fprintf (fp, "CC: %s\n", 참조);
fprintf (fp, "MIME-Version: 1.0\n");
fprintf (fp, "Content-Type: text/html; charset=euc-kr\n");
fprintf (fp, "Content-Transfer-Encoding: 8bit\n");
i = 0;
while ((ch = getc (fin)) != EOF) {
if (ch == '\n') {
rmCtrlChar (buf);
fprintf (fp, "%s\n", buf);
memset (buf, 0, sizeof (buf));
i = 0;
}
else buf [i++] = ch;
}
fprintf (fp, ".\n");
fprintf (fp, "QUIT\n");
retval = pclose (fp);
fclose (fin);
}
_UNLINK (textfile);
}
fclose (rp);
음... 조금 적어 보았는데 도움이 되길 바라며. ~~
더 필요 한 부분이나 오류가 있으면 .. 답글 남겨 주세요.
Rock will never die
myreas님 sendmail이 아니라 telnet을 이용해야 되거든요.
myreas님 sendmail이 아니라 telnet을 이용해야 되거든요.
telnet 메일호스트 25를 이용해서 소켓통신을 하거나 아님 popen()함수를 사용해서요...ㅠ.ㅠ
telnet 사용하지 마세요..
직접 소켓여는 것이 더 확실합니다.
telnet이 단방향으로 통신하는 가상터미널을 사용하다보니..
입력을 받기 전에 몇 초 대기해야 하는 상황도 발생합니다.
telnet을 통해 서버와 통신하면
서버측에서 쓰기 전에 적절히(?) 대기하지 않고 읽기를 시도하거나
서버측에서 받기 전에 대기하지 않고 쓰기 시작하면 중간에 데이터 손실이 발생할 수 있습니다.
아~~ 그래서 fread()를 이용해서 응답메시지를 읽어오려해도 안
아~~
그래서 fread()를 이용해서 응답메시지를 읽어오려해도 안 읽혀지고 null이 나오는게 그래서 그런거군요.
감사합니다....^^
그런데 소케 사용하는 예제 좀 부탁드려도 될까요?
C로 프로그램 해본게 얼마 안되서리..
댓글 달기