PHP & Others

SMTP 클래스를 이용한 파일첨부

컨텐츠 정보

본문

글쓴이:하근호  SMTP 클래스를 이용한 파일첨부 조회수:4169





먼저 가장 기본적인 사용법은 아래와 같습니다.

$mail = new Smtp("self");
//$mail->debug();
$mail->send("to@hanmail.net", "from@hanmail.net", "메일제목", "메일내용");

파일을 첨부하시려면 $mail->send 를 하시기 전에
$mail->attach() 라는 함수를 호출하시면 됩니다. 즉

$mail = new Smtp("self");
//$mail->debug();
$mail->attach("파일내용", "파일이름", "파일타입");
$mail->send("to@hanmail.net", "from@hanmail.net", "메일제목", "메일내용");

여기서 주의할 점은 파일 내용은 파일전체를 읽어들인 내용입니다. 즉
fopen() 이란 함수를 이용하셔서 미리 파일내용을 읽은 후에 그 내용을 넣으셔야 합니다.

아무래도 이런 작업이 조금은 불편할것 같아 함수를 조금수정해 보았습니다.
// 첨부파일이 있을 경우 이 함수를 이용해 파일을 첨부한다.
function attach($path, $name="", $ctype="application/octet-stream") {
    $fp = fopen($path, "r");
    $message = fread($fp, filesize($path));
    fclose($fp);
    $this->parts[] = array ("ctype" => $ctype, "message" => $message, "name" => $name);
}

함수를 위와 같이 수정했을 경우
$mail->attach("파일경로", "파일이름", "파일타입")
이렇게 하시면 됩니다.

 
****
보내기전 파일 크기와 첨부파일 크기가 다를때 fopen 에서 rb 로 읽어야 정상이네요

****
오리

저도 이분의 소스을 가져다가 사용했는데요..
약간의 수정할 부분이 많이 보이더군요
mail 함수는 php함수로 smtp 에 메일 정보을 전달한다고 합니다. 근데 웹상에서 수백명씩 많은 사람을 보낼려고 하면
mail 함수을 쓸경우 smtp에 접속하고 끊어지고 다시 접속하고 하는데 그러면 웹상에서 많은 사람에게 메일을 보낼땐 엄청 느려집니다. 바로 smtp에 한번 접속하고 메일을 보내고 접속을 끊으면 보다 빠르게 메일을 보낼수 있습니다.
근데 이분의 소스는 잘 못 된것이 메일 배열을 가지고
계속 커넥트 하고 보내고 끊어 버리는데 이렇게 하면 smtp을 사용할 이유가 없어지는 거죠..

약간의 수정을 해야 할것 같고
그리고 contentType 에서 multipart/mixed; 라고 되어 있는데
이렇게 전달할 경우 첨부 파일이 없어도 첨부파일이 있는것 처럼 보입니다. 첨부파일이 없을 경우는 이 부분을 text/html; 로 해주면 됩니다.

저도 이분 소스 보면서 많이 배웠습니다.
 

관련자료

댓글 0
등록된 댓글이 없습니다.
Today's proverb
자신을 불행한 존재라고 생각하는 사람은 아직도 더 불행해질 여지가 남아있다. 아주 작은 일에도 큰 기쁨을 느끼는 사람에게는 그 어떤 불행도 위력을 상실해 버리고 만다. 그러나 아주 작은 일에도 기쁨을 느낄 수 있는 경지에 이르기까지는 어차피 여러 가지 형태의 불행을 감내하지 않을 수가 없다. 불행이란 알고 보면 행복이라는 이름의 나무 밑에 드리워진 행복만한 크기의 나무그늘 같은 것이다. (이외수 "흐린 세상 건너기" 中에서)