메일 보내는 방법을 알고 싶습니다.

pogs의 이미지

소켓통신을 이용한 프로그램을 c로 만들고 있습니다.

간단한 업무흐름은
클라이언트에서 서버쪽에 데이타보내고, 서버쪽에서는
받은 데이타를 처리합니다.
사용자들은 처리된 작업결과를 jsp 웹페이지에서 확인할 수 있습니다.

제가 할려고 하는 작업은
서버쪽에서 데이타처리가 완료되면 사용자들에게 메일로 통보를 할려고합니다. "작업처리가 완료되었으니 웹페이지에서 확인하세요" 라는 메시지를 메일로 통보 할려고 합니다.

이때 메일로 통보하는 방법을 알고 싶습니다.개발은 c로하고 있습니다.
초보입니다. 설명좀 부탁드립니다.

지리즈의 이미지

일단... c로 메일 발송을 굳이 만들어야 하셔야할 이유가 궁금합니다.

jsp단에서 메일발송이 불가능한가요?

1. pipe를 이용하여 mail로 보낸다.
2. imap2000관련 라이브러리를 설치하여 구성한다.
3. sendmail 소스를 분석하여... 일부 소스를 취해 사용한다.

이중 1이 가장 편할 것 같습니다. 속력은 느려질 수도 있지만...
1이면 무난하겠네요. ^^ 고생하세요...

There is no spoon. Neo from the Matrix 1999.

서지훈의 이미지

이런 protocol 관련 작업을 하실려면...
적당한 library를 찾아 사용하시거나...
RFC 문서(SMTP)를 참고하세요...
간단하게 구현을 원하시면 library를 이용하는거 보단...
RFC 문서를 참고 하시는게 의외로 간단히 끝날 수도 있습니다...

<어떠한 역경에도 굴하지 않는 '하양 지훈'>

#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

maidland의 이미지

지리즈님이 말씀하신 1번째 방법인.....

pipe를 이용해서 Mail을 보내는 방법에 대한 질문입니다..

어떤식으로 해야하죠?

예제를 들어서 가르침을 주세요^-^;

:shock:_:shock:

>> http://ragnarok.co.kr <<

라그온+ㅁ+ 댄서는 아직 죽지 않았다!!
=-=-=-=-=-=-=-=-=-=-=-

maximus의 이미지

개인 메일도 주셨더니만 여기에도 올리셨네요..

아래는 예전에 제가 썼던 부분입니다..
중간 중간 많이 삭제를 했고,
기존에 소스를 좀 빼구 필요 부분만 붙여 넣어서 좀 틀린 부분도 있을겁니다..
허나, 소스 이해 하는데 힘들진 않을꺼라 생각되는군요..

소스는 제가 어떤 프로그램 보고 작성했던 겁니다..
bulkmailer 였나 기억이 가물 가물 하네요..

//---------------------------------------------------------------------

#define PIPECOMMAND "/usr/lib/sendmail -bs %s" 

static 
void read_data(int file) 
{ 
FILE *fp; 
int nread = 1; 
char buf[1024]=""; 
fp = fdopen (file, "r"); 
while (nread = fread(buf, 1, 1024,fp)) { 
.... 
..... 
} fclose (fp); 
} 

// base64 encoding 으로 처리.. 

static FILE * 
open_envelope (char* envelope_from) 
{ 
FILE *fp=NULL; 
char command_buf[32*1024]; 

sprintf (command_buf, PIPECOMMAND, ""); 

if ((fp = popen (command_buf, "w")) == NULL) { 
fprintf (stderr, "can't open pipe to sendmail: %s\n", 
strerror (errno)); 
return fp; 
} 

fprintf (fp, "HELO localhost\n"); 
fprintf (fp, "MAIL FROM: <%s>\n", envelope_from); 
return fp; 
} 

static void 
close_envelope (FILE* fp) 
{ 
fprintf (fp, "QUIT\n"); 
if (fp != stderr) 
pclose (fp); 
} 

static void 
add_recipient (FILE *fp, char* rcpt) 
{ 
fprintf (fp, "RCPT TO: <%s>\n", rcpt); 
} 

static int 
enclose_msg (FILE *fp, char* file) 
{ 
int c; 
int bol = 1; 
FILE *infp; 

if ((infp = fopen (file, "r")) == NULL) { 
fprintf (stderr, "can't open %s (%s)\n", file, strerror (errno)); 
return 0; 
} 

fprintf (fp, "DATA\n"); 
while ((c = getc (infp)) != EOF) { 
if (bol && c == '.') 
putc ('.', fp); 
putc (c, fp); 
bol = (c == '\n'); 
} 
if (!bol) 
putc ('\n', fp); 
fprintf (fp, ".\n"); 
fclose (infp); 
return 1; 
} 

static void 
forward_msg (FILE *fp, char* buf, char* from_name, char* from, char* to, char* subject) 
{ 
fprintf (fp, "DATA\n"); 
fprintf (fp, "From:\"%s\" <%s>\n", from_name, from); 
fprintf (fp, "To: %s\n", to); 
fprintf (fp, "Subject: %s\n", subject); 
fprintf (fp, "MIME-Version: 1.0\n"); 
fprintf (fp, "Content-Type: text/html; charset=euc-kr\n"); 
fprintf (fp, "Content-Transfer-Encoding: base64\n"); 
fprintf (fp, "\n"); 
fprintf (fp, "%s\n",buf); 
fprintf (fp, ".\n"); 
} 

int 
sendmail(char* nick, char* from, char* to, char* title, char* message) 
{ 
char* pBody=NULL; 
FILE* fp=NULL; 
int mailpipe[2]; 
int i=0; 

pid_t pid; 

(void)signal(SIGCHLD, handle_sigchld); 
(void)signal(SIGALRM, handle_sigalarm); 

if (pipe(mailpipe)) return -1; 
if ((pid = fork()) == (pid_t)0) // This is the child process. 
{ 
alarm(10); 

dup2(mailpipe[1],STDOUT_FILENO); 
fp=open_envelope(from); 
if(fp) 
{ 
int nsize=strlen(message); 
add_recipient(fp, to); 
pBody=(char*)malloc(nsize*2); 
if(pBody) 
{ // base64 encoding 
m_encode(message, pBody, nsize, nsize*2-1); 
forward_msg (fp, pBody, nick, from, to, title); 
close_envelope(fp); 
free(pBody); 
// return 1; 
} 
} 
// write(mailpipe[1],&i,1); 
alarm(0); 
exit(EXIT_SUCCESS); 
} 
else if ( pid < (pid_t)0 ) LOG("fork failed when sending mail.."); // The fork failed. 
// else if ( pid > (pid_t)0 ) read_data(mailpipe[0]); 

return 0; 
}

=================================
:: how about a cup of tea ? ::
=================================

maidland의 이미지

답변 기다리는 동안.. KLDP에 메일을 검색해서 몇 십페이지쩨 찾아 보고 있었거든요^^

여튼 대답 감사드리고.. 좋은 하루되세요..

>> http://ragnarok.co.kr <<

라그온+ㅁ+ 댄서는 아직 죽지 않았다!!
=-=-=-=-=-=-=-=-=-=-=-

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.