<?php
class
Mail {
private
$topic
;
private
$toaddr
;
private
$fromaddr
;
private
$cc
;
private
$content
;
private
$attach
;
private
$header
;
private
$domain
;
private
$msg
;
private
$filename
;
private
$filemime
;
private
$filestr
;
private
$boundary
;
private
$uniqid
;
private
$eol
;
function
__construct() {
$this
->getEOT();
$this
->getUniq_id();
$this
->header = '';
$this
->attach = '';
$this
->cc = '';
$this
->msg = '';
}
public
function
getFromaddr() {
return
$this
->fromaddr;
}
public
function
setFromaddr(
$fromaddr
) {
$this
->fromaddr =
$fromaddr
;
}
public
function
getTopic() {
return
$this
->topic;
}
public
function
getToaddr() {
return
$this
->toaddr;
}
public
function
getCc() {
return
$this
->cc;
}
public
function
getContent() {
return
$this
->content;
}
public
function
getAttach() {
return
$this
->attach;
}
public
function
setTopic(
$topic
) {
$this
->topic = mb_convert_encoding(trim(
$topic
) , 'UTF-8', 'auto');
}
public
function
setToaddr(
$toaddr
) {
$this
->toaddr = trim(
$toaddr
);
}
public
function
setCc(
$cc
) {
$this
->cc = trim(
$cc
);
}
public
function
setContent(
$content
) {
$this
->content = mb_convert_encoding(trim(
$content
) , 'UTF-8', 'auto');
}
public
function
setAttach(
$attach
) {
$this
->attach = trim(
$attach
);
}
public
function
getDomain() {
return
$this
->domain;
}
public
function
setDomain(
$domain
) {
$this
->domain =
$domain
;
}
private
function
getEOT() {
if
(
strtoupper
(
substr
(PHP_OS, 0, 3) == 'WIN')) {
$this
->eol =
"rn"
;
}
elseif
(
strtoupper
(
substr
(PHP_OS, 0, 3) == 'MAC')) {
$this
->eol =
"r"
;
}
else
{
$this
->eol =
"n"
;
}
}
private
function
getBoundary() {
$this
->boundary = '--' .
substr
(md5(time() . rand(1000, 2000)) , 0, 16);
}
private
function
getUniq_id() {
$this
->uniqid = md5(microtime() . time() . rand(1, 100));
}
private
function
outputCommonHeader() {
$this
->header.= 'From: ' .
$this
->fromaddr .
$this
->eol;
$this
->header.= 'Message-ID: <' .
$this
->uniqid .
$this
->domain . '>' .
$this
->eol;
$this
->header.= 'MIME-Version: 1.0' .
$this
->eol;
$this
->header.= 'Reply-To: ' .
$this
->fromaddr .
$this
->eol;
$this
->header.= 'Return-Path: ' .
$this
->fromaddr .
$this
->eol;
$this
->header.= 'X-Mailer: Xmail System' .
$this
->eol;
$this
->header.= 'Content-Disposition: inline' .
$this
->eol;
}
private
function
mime_content_type(
$f
) {
$temp
= trim(
exec
('file -bi ' .
escapeshellarg
(
$f
)));
$temp
= preg_replace('/s+/', ' ',
$temp
);
$temp
=
explode
(' ',
$temp
);
return
$temp
[0];
}
private
function
mailWithCC() {
$this
->header.= 'Cc: ' .
$this
->cc .
$this
->eol;
$this
->header.= 'Content-type: text/html; charset=UTF-8' .
$this
->eol;
$this
->header.= 'Content-Transfer-Encoding: 8bit' .
$this
->eol;
$this
->msg =
$this
->content;
if
(mail(
$this
->toaddr,
$this
->topic,
$this
->msg,
$this
->header)) {
return
1;
}
else
{
return
0;
}
}
private
function
attachmentToBase64(
$filedir
) {
$this
->filename =
basename
(
$filedir
);
@
$fopen
=
fopen
(
$filedir
, 'r');
$str
=
fread
(
$fopen
,
filesize
(
$filedir
));
$str
=
base64_encode
(
$str
);
$this
->filestr =
$str
;
}
private
function
mailWithAttach() {
$this
->attachmentToBase64(
$this
->attach);
$this
->header.= 'Content-type: multipart/mixed; boundary=
"' . str_replace('--', '', $this->boundary) . '"
' .
$this
->eol;
$this
->msg.=
$this
->eol .
$this
->boundary .
$this
->eol;
$this
->msg.= 'Content-Type: text/html; charset=utf-8' .
$this
->eol;
$this
->msg.= 'Content-Disposition: inline' .
$this
->eol;
$this
->msg.=
$this
->eol .
$this
->content .
$this
->eol;
$this
->msg.=
$this
->boundary .
$this
->eol;
$this
->msg.= 'Content-Type: ' .
$this
->mime_content_type(
$this
->attach) .
$this
->eol;
$this
->msg.= 'Content-Disposition: attachment; filename=
"' . $this->filename . '"
' .
$this
->eol;
$this
->msg.= 'Content-Transfer-Encoding: base64' .
$this
->eol;
$this
->msg.=
$this
->eol .
$this
->filestr .
$this
->eol;
$this
->msg.=
$this
->eol .
$this
->boundary . '--';
if
(mail(
$this
->toaddr,
$this
->topic,
$this
->msg,
$this
->header)) {
return
1;
}
else
{
return
0;
}
}
private
function
mailAll() {
$this
->attachmentToBase64(
$this
->attach);
$this
->header.= 'Cc: ' .
$this
->cc .
$this
->eol;
$this
->header.= 'Content-type: multipart/mixed; boundary=
"' . str_replace('--', '', $this->boundary) . '"
' .
$this
->eol;
$this
->msg.=
$this
->eol .
$this
->boundary .
$this
->eol;
$this
->msg.= 'Content-Type: text/html; charset=utf-8' .
$this
->eol;
$this
->msg.= 'Content-Disposition: inline' .
$this
->eol;
$this
->msg.=
$this
->eol .
$this
->content .
$this
->eol;
$this
->msg.=
$this
->boundary .
$this
->eol;
$this
->msg.= 'Content-Type: ' .
$this
->mime_content_type(
$this
->attach) .
$this
->eol;
$this
->msg.= 'Content-Disposition: attachment; filename=
"' . $this->filename . '"
' .
$this
->eol;
$this
->msg.= 'Content-Transfer-Encoding: base64' .
$this
->eol;
$this
->msg.=
$this
->eol .
$this
->filestr .
$this
->eol;
$this
->msg.=
$this
->eol .
$this
->boundary . '--';
if
(mail(
$this
->toaddr,
$this
->topic,
$this
->msg,
$this
->header)) {
return
1;
}
else
{
return
0;
}
}
private
function
mailSimple() {
$this
->header.= 'Content-type: text/html; charset=UTF-8' .
$this
->eol;
$this
->header.= 'Content-Transfer-Encoding: 8bit' .
$this
->eol;
$this
->msg =
$this
->content;
if
(mail(
$this
->toaddr,
$this
->topic,
$this
->msg,
$this
->header)) {
return
1;
}
else
{
return
0;
}
}
public
function
send() {
if
(emptyempty(
$this
->attach) && emptyempty(
$this
->cc)) {
$this
->outputCommonHeader();
return
$this
->mailSimple();
}
else
if
(emptyempty(
$this
->attach)) {
$this
->outputCommonHeader();
return
$this
->mailWithCC();
}
else
if
(emptyempty(
$this
->cc)) {
$this
->outputCommonHeader();
$this
->getBoundary();
return
$this
->mailWithAttach();
}
else
if
(!emptyempty(
$this
->toaddr) && !emptyempty(
$this
->topic) && !emptyempty(
$this
->cc) && !emptyempty(
$this
->content) && !emptyempty(
$this
->attach)) {
$this
->outputCommonHeader();