홈으로 홈으로 | 무료회원가입 | 아이디/비번찾기 | 즐겨찾기
추천음악방송메인홈1대1상담음악방송청취
운.영.자.1대1.상담

온라이브음악방송
온라이브스토어(앱다운로드)
아리랑가요(무료음악채널)
뽕짝아가씨(무료음악채널)
okTrot(무료음악채널)
전통가요(무료음악채널)

환상의뽕짝파티 무료음악
명작트로트메들리 무료음악
트로트메들리관광 무료음악
동영상노래방
가사검색

POP Player
신나는 고스톱
컴퓨터 오목
작은 음악다방
최신 인기가요

보안∵서버∵쿠키
윈도우∵프레임
이미지∵배경
시간∵달력∵계산
상태바∵타이틀바
음악∵영상
폼∵전송∵테이블
키보드∵마우스
효과∵링크∵메뉴
Script∵php
기타
PHP 강좌
윈도우관련팁
웹관련팁
홈페이지제작팁
기본강좌
레지스트리
윈도우서버
리눅스서버
Android
메일전송 클래스(SMTP Class)
12년 전
<?php

class Smtp {

    var $host;
    var $fp;
    var $self;
    var $lastmsg;
    var $parts;
    var $error;
    var $debug;
    var $charset;
    var $ctype;


    function Smtp($host="localhost") {
        if($host == "self") $this->self = true;
        else $this->host = $host;
        $this->parts = array();
        $this->error = array();
        $$this->debug = 0;
        $this->charset = "euc-kr";
        $this->ctype = "text/html";
    }

    // 디버그 모드 : 1
    function debug($n=1) {
        $this->debug = $n;
    }

    // smtp 통신을 한다.
    function dialogue($code, $cmd) {

        fputs($this->fp, $cmd."\r\n");
        $line = fgets($this->fp, 1024);
        ereg("^([0-9]+).(.*)$", $line, &$data);
        $this->lastmsg = $data[0];

        if($this->debug) {
            echo htmlspecialchars($cmd)."<br>".$this->lastmsg."<br>";
            flush();
        }

        if($data[1] != $code) return false;
        return true;

    }

    //  smptp 서버에 접속을 한다.
    function smtp_connect($host) {

        if($this->debug) {
            echo "SMTP($host) Connecting...<br>";
            flush();
        }

        if(!$host) $host = $this->host;
        if(!$this->fp = fsockopen($host, 25, $errno, $errstr, 10)) {
            $this->lastmsg = "SMTP($host) 서버접속에 실패했습니다.[$errno:$errstr]";
            return false;
        }

        $line = fgets($this->fp, 1024);
        ereg("^([0-9]+).(.*)$", $line, &$data);
        $this->lastmsg = $data[0];
        if($data[1] != "220") return false;

        if($this->debug) {
            echo $this->lastmsg."<br>";
            flush();
        }

        $this->dialogue(250, "HELO phpmail");
        return true;

    }

    // stmp 서버와의 접속을 끊는다.
    function smtp_close() {

        $this->dialogue(221, "QUIT");
        fclose($this->fp);
        return true;

    }

    // 메시지를 보낸다.
    function smtp_send($email, $from, $data) {

        if(!$mail_from = $this->get_email($from)) return false;
        if(!$rcpt_to = $this->get_email($email)) return false;

        if(!$this->dialogue(250, "MAIL FROM: $mail_from"))
            $this->error[] = $email.":MAIL FROM 실패($this->lastmsg)";
        if(!$this->dialogue(250, "RCPT TO: $rcpt_to"))
            $this->error[] = $email.":RCPT TO 실패($this->lastmsg)";
        $this->dialogue(354, "DATA");

        $mime = "Message-ID: <".$this->get_message_id().">\r\n";
        $mime .= "From: $from\r\n";
        $mime .= "To: $email\r\n";

        fputs($this->fp, $mime);
        fputs($this->fp, $data);
        $this->dialogue(250, ".");

    }

    // Message ID 를 얻는다.
  function get_message_id() {
    $id = date("YmdHis",time());
    mt_srand((float) microtime() * 1000000);
    $randval = mt_rand();
    $id .= $randval."@phpmail";
    return $id;
  }

    // Boundary 값을 얻는다.
  function get_boundary() {
    $uniqchr = uniqid(time());
    $one = strtoupper($uniqchr[0]);
    $two = strtoupper(substr($uniqchr,0,8));
    $three = strtoupper(substr(strrev($uniqchr),0,8));
    return "----=_NextPart_000_000${one}_${two}.${three}";
  }

    // 첨부파일이 있을 경우 이 함수를 이용해 파일을 첨부한다.
    function attach($message, $name="", $ctype="application/octet-stream") {
        $this->parts[] = array ("ctype" => $ctype, "message" => $message, "name" => $name);
    }

    // Multipart 메시지를 생성시킨다.
    function build_message($part) {

        $msg .= "Content-Type: ".$part['ctype'];
        if($part['name']) $msg .= "; name=\"".$part['name']."\"";
        $msg .= "\r\nContent-Transfer-Encoding: base64\r\n";
        $msg .= "Content-Disposition: attachment; filename=\"".$part['name']."\"\r\n\r\n";
        $msg .= chunk_split(base64_encode($part['message']));
        return $msg;

    }

    // SMTP에 보낼 DATA를 생성시킨다.
    function build_data($subject, $body) {

        $boundary = $this->get_boundary();

        $mime .= "Subject: $subject\r\n";
        $mime .= "Date: ".date ("D, j M Y H:i:s T",time())."\r\n";
        $mime .= "MIME-Version: 1.0\r\n";
        $mime .= "Content-Type: multipart/mixed; boundary=\"".$boundary."\"\r\n\r\n".
                 "This is a multi-part message in MIME format.\r\n\r\n";
    $mime .= "--".$boundary."\r\n".
             "Content-Type: ".$this->ctype."; charset=\"".$this->charset."\"\r\n".
             "Content-Transfer-Encoding: base64\r\n\r\n".
             chunk_split(base64_encode($body)).
             "\r\n\r\n--".$boundary;

        $max = count($this->parts);
        for($i=0; $i<$max; $i++) {
            $mime .= "\r\n".$this->build_message($this->parts[$i])."\r\n\r\n--".$boundary;
        }
        $mime .= "--\r\n";

        return $mime;

    }

    // MX 값을 찾는다.
    function get_mx_server($email) {
        
        if(!ereg("([\._0-9a-zA-Z-]+)@([0-9a-zA-Z-]+\.[a-zA-Z\.]+)", $email, $reg)) return false;
        getmxrr($reg[2], $host);
        if(!$host) $host[0] = $reg[2];
        return $host;

    }

    // 이메일의 형식이 맞는지 체크한다.
    function get_email($email) {
        if(!ereg("([\._0-9a-zA-Z-]+)@([0-9a-zA-Z-]+\.[a-zA-Z\.]+)", $email, $reg)) return false;
        return "<".$reg[0].">";
    }


    // 메일을 전송한다.
    function send($to, $from, $subject, $body) {
        
        if(!is_array($to)) $to = split("[,;]",$to);
        if($this->self) {

            $data = $this->build_data($subject, $body);
            foreach($to as $email) {
                if($host = $this->get_mx_server($email)) {
                    $flag = false; $i = 0;
                    while($flag == false) {
                        if($host[$i]) {
                            $flag = $this->smtp_connect($host[$i]);
                            $i++;
                        } else break;
                    }
                    if($flag) {
                        $this->smtp_send($email, $from, $data);
                        $this->smtp_close();
                    } else {
                        $this->error[] = $email.":SMTP 접속실패";
                    }
                } else {
                    $this->error[] = $email.":형식이 잘못됨";
                }
            }

        } else {

            if(!$this->smtp_connect($this->host)) {
                $this->error[] = "$this->host SMTP 접속실패";
                return false;
            }
            $data = $this->build_data($subject, $body);
            foreach($to as $email) $this->smtp_send($email, $from, $data);
            $this->smtp_close();

        }

    }

}

/*
$mail = new Smtp("self");  //자체발송일 경우, 서버를 지정할수도 있음.
$mail->debug();  //디버깅할때
$mail->attach("파일버퍼", "파일이름", "파일타입");
$mail->send("받을 사람메일주소", "보내는사람 메일주소", "제목", "내용");

$mail = new Smtp("self");
$mail->debug();
$mail->send("photon0@hanmail.net", "hopegiver@whois.co.kr", "이 메일은 정상입니다.", "정상적인 메일이니 삭제하지 마십시오.");
*/

?>

추천추천 : 196 추천 목록
번호 제목
3,026
 여러 도메인들 간 쿠키 공유하기
3,025
 태그 사이에 있는 텍스트를 추출
3,024
 [JQuery] textbox focus on off일때 숫자 콤마 보여주기
3,023
 쿠키 생성,가져오기,삭제
3,022
 사용자 함수 모음
3,021
 마우스,키보드 제한 ( 오른쪽클릭,드래그,영역선택등..)
3,020
 [HTML5] <video> - DOM으로 제어하기
3,019
 HTML5 video 태그에서 영상 좌우반전
3,018
 PHP - 특정 태그 및 문자열 추출, 제거
3,017
 [PHP] define과 defined의 차이
3,016
 우클릭 완벽차단 스크립트
3,015
 iframe 높이 100% 맞추기
3,014
 curl 함수를 이용한 HTTP REFERER 변경
3,013
 윈도우10 시스템 파일 및 Dism 검사
3,012
 텍스트 줄바꿈, 글자자르기 CSS
3,011
 jQuery Mobile에서 유용한 코드 10가지.
3,010
 [PHP] dirname()함수와 $_SERVER 관련 상수들
3,009
 [PHP] 파일 크기, 사이즈 불러오는 함수, filesize()
3,008
 [jQuery] jQuery Quick API
3,007
 [ transition ] 링크 hover 색상 변화 속도 조절
3,006
 PHP 5.3.0 에서 사라진 함수들 대체
3,005
 어떤 파일들이 include 나 require 되었는지 확인하는 함수(get_included_files)
3,004
 PHP 날짜 형식 및 계산하기(날짜 더하고 빼기)
3,003
 jQuery Mobile에서 유용한 코드 10가지.
3,002
 값이 배열 안에 존재하는지 확인하는 in_array함수
3,001
 사용자가 웹브라우저에서 뒤로가기를 했을때 감지하는 방법
3,000
 [jQuery]버튼 활성화, 비활성화
2,999
 jQuery show() / hide() / toggle() 사용법
2,998
 jquery 여러가지 이벤트
2,997
 border-radius 속성
2,996
 네이버 오픈API 음성합성 API 사용하는 PHP 샘플코드
2,995
 UTF8 한글 자르기..
2,994
 iconv 에러 발생시 계속 처리하기 옵션
2,993
 [PHP] 현재 페이지의 도메인 , URL 정보 알아내기.
2,992
 [PHP] 막강 기능 배열..
목록
추억의가요방(가사포함)
인기절정뽕짝파티
인기트로트모음
지루박디스코메들리
밤무대애창곡
전자올겐경음악
세월따라노래따라
가슴시린트로트
트로트쌍쌍파티
7080추억속으로
종합성인가요방
못잊을옛날노래
카바레 음악
트롯디스코팡팡
관광 메들리
트롯카페
가요감상실
추억의옛노래
스페셜가요광장
BillBoard Free
추천가요모음
경음악.전자올겐
스페셜음악여행
WOLRD POPs
K-POP\BillBoard
POP TOP BEST

최신인기가요특집
추천가요\인기
F뮤직 인기\발라드
F뮤직 애창\트로트
트로트성인가요
인기가요
프리미엄 POP
경음악\기타
프리미엄 최신가요
프리미엄 성인가요
가요축제\트롯1번지
댄스\메들리\리믹스
카페\명상\경음악\기타
뮤직트로트 부산광역시부산진구 가야동 ㅣ 개인정보취급방침
Copyright (C) musictrot All rights reserved.