NEW Nmail PHP 3 업그레이드 할인
자세히 보기

Nmail ASP 서비스 종료 안내(EOS)

Nmail ASP (nWmail, Nmail Server) 제품은 유상 유지보수를 포함한 모든 서비스가 종료되었습니다.

헉... 다른곳에선 안보내진당...

성*하 2002.10.15 00:37 조회 668

PHP로 메일을 보냈는데요...

NMAIL이 설치된 집에서는 다 보내졌었는데(한메일빼구여..ㅠ.ㅠ)

다른곳에 와서 보내보니... 제 메일 서버로는 메일이 가는데..

다른곳 (야후, 핫메일)로는 메일이 안가네여...

앙.... 왜그런거죠?

조금 길지만..

소스...

참... 다른곳에서 아웃룩으로 보내니 또 되네여... ㅠ.ㅠ


<?
/*
SMTP 메일 발송 class

name : JMailer
author : JJiNEY
home : http://www.linuxwin.com
mail : ****@****
ver. : 0.35
*/
class JMail
{
VAR $sp; // SMTP connection
VAR $body; // Mail body
VAR $host; // SMTP host
VAR $port; // SMTP port
VAR $sMail; // Sender mail address;
VAR $sName; // Sender Name;
VAR $rMail; // Receiver mail address;
VAR $rName; // Receiver Name;
VAR $returnpath; // Return path;
VAR $subject; // Mail subject
VAR $body; // Mail body
VAR $content_type; // Mail content type
VAR $charset="euc-kr"; // Charset
VAR $enctype="8bit"; // Character encoding type
VAR $attach; // Attached file
VAR $attach_name; // Attached file name
VAR $attach_type; // Attached file type
VAR $attach_size; // Attached file size
VAR $boundary="----=_NextPart_JMailer_"; // Default Boundary

VAR $msg="<p><font face='굴림' size='3'><b>JMail Error Message</b></font></p>";

/*
Constructor
*/
function JMail($host="localhost", $port="25")
{
$this->host=$host;
$this->port=$port;
}

/*
Connect SMTP Server
*/
function connect()
{
if ($this->sp)
{
fclose($this->sp);
}
else
{
if (!$this->sp=fsockopen($this->host, $this->port, $errno, $errstr, 30))
{
$msg="Error no : $errno<p>Error Message :<br>$errstr";
$this->error($msg);
}
}
}

/*
Set Sender Address
*/
function setFrom($email, $name)
{
if ($this->checkMail($email))
{
$this->sMail=$email;
}
else
{
$this->error("보내는 사람의 메일주소가 형식에 어긋납니다.");
}

if ($this->checkSpace($name))
{
$this->sName=$name;
}
else
{
$this->error("보내는 사람의 이름이 형식에 어긋납니다.");
}
}

/*
Set Receiver Address
*/
function setReceive($email, $name)
{
if ($this->checkMail($email))
{
$this->rMail[count($this->rMail)+1]=$email;
}
else
{
$this->error("보내는 사람의 메일주소가 형식에 어긋납니다.");
}

if ($this->checkSpace($name))
{
$this->rName[count($this->rName)+1]=$name;
}
else
{
$this->error("보내는 사람의 이름이 형식에 어긋납니다.");
}
}

/*
Set Attach file
*/
function setFile(&$attach, $filename, $filetype, $filesize)
{
$this->attach=$attach;
$this->attach_name=$filename;
$this->attach_type=$filetype;
$this->attach_size=$filesize;
}

/*
Set mail message
*/
function setBody($message)
{
$this->body=$message;
}

/*
Set Return path
*/
function setReturnPath($email)
{
if ($this->checkMail($email))
{
$this->returnpath=$email;
}
else
{
$this->error("Return path의 메일주소가 형식에 어긋납니다.");
}
}

/*
Set Content type
*/
function setContent($type)
{
if ($type == "text")
{
$this->content_type="text/plain";
}
else if ($type == "html")
{
$this->content_type="text/html";
}
else
{
$this->error("Content-type 은 text, html 중 선택해 주세요");
}
}

/*
Set Subject
*/
function setSubject($subject)
{
if ($this->checkSpace($subject))
{
$this->subject=$subject;
}
else
{
$this->error("메일 제목이 형식에 어긋납니다.");
}
}

/*
Set Charset
*/
function setCharset($set)
{
$this->charset=$set;
}

/*
Set Encoding type
*/
function setEncoding($type)
{
$this->enctype=$type;
}

/*
Set Boundary
*/
function setBoundary()
{
$this->boundary.=time();
}

/*
Return Attached file type
*/
function getAttachedFileType()
{
if (!$this->attach_type)
{
return "application/octet-stream";
}
return $this->attach_type;
}

/*
Return Encoded Attached file
*/
function getAttachedFile()
{
$fp=fopen($this->attach,"r");
$encoded=fread($fp, $this->attach_size);
$encoded=chunk_split(base64_encode($encoded));
fclose($fp);

return $encoded;
}

function putRcpt()
{
for ($i=1; $i<sizeof($this->rMail)+1; $i++)
{
fputs($this->sp, "rcpt to: <".$this->rMail[$i].">\r\n");
$retval = fgets($this->sp, 128);
}

return $retval;
}

function putTo()
{
fputs($this->sp, "To: ");
for ($i=1; $i<sizeof($this->rMail)+1; $i++)
{

$str.="\"".$this->rName[$i]."\""." <".$this->rMail[$i].">";
if ($i < sizeof($this->rMail))
{
$str=$str.",\r\n\t";
}
else
{
$str.="\r\n";
}
}

fputs($this->sp, $str);
}

/*
Close SMTP Connection
*/
function close()
{
fclose($this->sp);
}

function sendBody()
{
if ($this->content_type == "text/html")
{
$this->body=str_replace("\n", "<br>", $this->body);
}
fputs($this->sp, "Content-Type: ".$this->content_type.";\r\n");
fputs($this->sp, " charset=\"".$this->charset."\"\r\n");
fputs($this->sp, "Content-Transfer-Encoding: ".$this->enctype."\r\n\r\n");
fputs($this->sp, $this->body);
fputs($this->sp, "\r\n");
}

/*
Send mail
*/
function send()
{
//만약 return path가 설정이 되지 않으면 보내는 사람 메일주소를 입력한다.
if (!$this->returnpath) $this->returnpath=$this->sMail;
if (!$this->content_type) $this->content_type="text/html";
if (!$this->sName) $this->error("보내는 사람의 이름이 지정되지 않았습니다.");
if (!$this->sMail) $this->error("보내는 사람의 메일이 지정되지 않았습니다.");
if (!$this->rName) $this->error("받을 사람의 이름이 지정되지 않았습니다.");
if (!$this->rMail) $this->error("받을 사람의 메일이 지정되지 않았습니다.");
if (!$this->subject) $this->error("메일 제목이 지정되지 않았습니다.");
if (!$this->body) $this->error("메일 본문이 지정되지 않았습니다.");

$this->connect();
$this->setBoundary();

fgets($this->sp, 128);
fputs($this->sp, "helo JMailer\r\n"); fgets($this->sp, 128);
fputs($this->sp, "mail from: <".$this->sMail.">\r\n"); $retval[0] = fgets($this->sp, 128);
$this->putRcpt();
fputs($this->sp, "data\r\n"); fgets($this->sp, 128);
fputs($this->sp, "Return-Path: <".$this->returnpath.">\r\n");
fputs($this->sp, "From: ".$this->sName."<".$this->sMail.">\r\n");
$this->putTo();
fputs($this->sp, "Subject: ".$this->subject."\r\n");
fputs($this->sp, "MIME-Version: 1.0\r\n");

if ($this->attach)
{
fputs($this->sp, "Content-Type: multipart/mixed;\r\n");
fputs($this->sp, " boundary=\"".$this->boundary."\"\r\n");
fputs($this->sp, "\r\nThis is a multi-part message in MIME format\r\n\r\n");
fputs($this->sp, "--".$this->boundary."\r\n");
$this->sendBody();

fputs($this->sp, "--".$this->boundary."\r\n");
fputs($this->sp, "Content-Type: ".$this->getAttachedFileType().";\r\n");
fputs($this->sp, " name=\"".$this->attach_name."\"\r\n");
fputs($this->sp, "Content-Transfer-Encoding: base64\r\n");
fputs($this->sp, "Content-Disposition: attachment;\r\n");
fputs($this->sp, " filename=\"".$this->attach_name."\"\r\n\r\n");
fputs($this->sp, $this->getAttachedFile());
fputs($this->sp, "\r\n");
fputs($this->sp, "--".$this->boundary."--\r\n");
}
else
{
$this->sendBody();
}

fputs($this->sp, "\r\n.\r\n");
$retval[1]=fgets($this->sp, 128);
$this->close();

if (!ereg("^250", $retval[0]) || !ereg("^250", $retval[1]))
{
$errormsg="메일을 보내지 못하였습니다.<br>";
$errormsg.=$retval[0]."<br>".$retval[1]."<br><br><br>";
$this->error($errormsg);
}
}

/*
Check Mail address with regular expression
*/
function checkMail($email)
{
if ($this->checkSpace($email))
{
if (!ereg("(^[_0-9a-zA-Z-]+(\.[_0-9a-zA-Z-]+)*@[0-9a-zA-Z-]+(\.[0-9a-zA-Z-]+)*$)",trim($email)))
{
return false;
}
}
else
{
return false;
}

return true;
}

/*
Check space with regular expression
*/
function checkSpace($str)
{
if (!ereg("([^[:space:]]+)",trim($str)))
{
return false;
}

return true;
}
/*
Echo error message
$msg : error message
*/
function error($msg)
{
die("<b>".$this->msg.$msg."</b>");
}
}

$mh=new JMail();
$mh->setFrom("****@****", "rigelx"); //보내는 사람 지정
$mh->setReceive("****@****", "Sung Jong Ha"); //받는사람 지정
$mh->setReceive("****@****", "Sung Jong Ha"); //받는사람 지정
$mh->setReceive("****@****", "Sung Jong Ha"); //받는사람 지정
$mh->setReceive("****@****", "성종하"); //받는사람 지정
$mh->setReceive("****@****", "SJH"); //받는사람 지정
$mh->setReceive("****@****", "SJH"); //받는사람 지정
$mh->setReceive("****@****", "SJH"); //받는사람 지정
$mh->setSubject("Web Test"); // 메일 제목 지정
$mh->setBody("Web"); // 메일 본문 지정
$mh->send();

echo "SEND<BR>";

?>

댓글 1
이전 글 받은편지중 첨부파일이 비활성화 됩니다. 1 아*비 2002.10.14
다음 글 메일이 안되네요... 1 이*규 2002.10.15