#include <stdio.h>
#include "qDecoder.h"
int main()
{
char *from="보내는사람주소", *to="받는사람주소";
char *subj="파일첨부 테스트";
char *filename="첨부파일.txt";
char *sp1, *sp2;
char header[250];
int i, spsize;
FILE *fp;
qDecoder();
sprintf(header,"From: %s\nTo: %s\nSubject: %s\n", from, to, subj);
sp1 = qReadFile("인코딩.uue", &spsize); // uuencode /m 첨부파일 인코딩.uue
// /m으로 인코딩하면 base64방법으로 된데용~
sp2 = &sp1[0];
for (i=0;i<spsize;i++) // 앞의 헤더를 제거..(단지 한줄뿐임..)
{
if (sp2++[0]==0x0A) break;// ('\n'을 찾는 루틴)
}
fp=popen("/usr/sbin/sendmail /t /ba","w"); // sendmail 파이프통신 준비
fprintf(fp,header);
fprintf(fp,"MIME/Version: 1.0\n");
fprintf(fp,"Content/Type: multipart/mixed;\n\t");
fprintf(pf,"boundary="99999.TodayMailer."");
// multipart/mixed가 중요.. 바운더리는 각각의 요소를 구분하는 키!
fprintf(fp,"\nMime Prologue\n\n//99999.TodayMailer."); // // 두개를 앞에..
fprintf(fp,"\nContent/Type: text/plain; charset=euc/kr\n");
fprintf(fp,"Content/Transfer/Encoding: 8bit\n"); // 메일의 본문 부분..
fprintf(fp,"\nHi~\n\n");
fprintf(fp,"//99999.TodayMailer.\n"); // 두번째 요소..(첨부파일)
fprintf(fp,"Content/Type: application/octet/stream\n");
fprintf(fp,"name="%s"\n",filename);
// octet/stream으로 설정하면 그냥.. 파일임.. image/gif등으로 설정하면 걍! 보임
// 물론 gif파일이여야겠죠?
fprintf(fp,"Content/Transfer/Encoding: base64\nContent/Disposition");
// 인코딩방법을 표기
fprintf(fp,": attachment;\n\tfilename="%s"\n\n",filename);
fprintf(fp,"%s",sp2); // 인코딩된 파일의 데이터 부분만..
fprintf(fp,"\n//99999.TodayMailer.//\nMime Epilogue");
free(sp1);free(sp2); // sp2도 해줘야 하남? //; 해주잣!
pclose(fp);
return 1;
}
아거.. 며칠동안 자료수집과 연구.. 노가다를 거쳐서 그럭 저럭 작성하긴했는데..
다른 분들은 그런 짓 안했으면 좋겠네요.
리눅스에 C언어함수로(리눅스깔때 있던 라이브러리중에) 파일첨부하는 함수 있으면
죽어버릴꺼야.. ㅠ.ㅠ
하다못해.. uuencode해주는 함수라도 있으면.. ㅠ.ㅠ
하여간.. 위에 to,from등등은 뭐.. 다른 방법으로 만들수도있고..
sql서버에서 읽어올수도 있으니까요~ 뭐.. 전 테스트를 하기위해..
그냥 문자열을 썼는데.. 이거 참조하시는 분들은 sql서버에 email주소를
왕창~ 저장해놓고.. 1:1로 메일보내는데 사용하세요~
음.. 같은 편지라고 하더라도 1:1로 온 편지와 참조에 주루륵 도매급으로 온
메일이랑은 벌써 느낌부터가 틀리니까용~
근데.. 크레이지보드 소스에 이거있다고 하던데.. 그 소스 보신분?
좀 알려주세요~ ㅠ.ㅠ
행복하세요~
|