在网上搜了好多都不能用,干脆俺自己写。调用非常简单,不过目前功能也不多,不支持html格式和附件:
class
MailCls{
private
$mEmails
;
function
setEmailInfo(
$emails
){
if
(
is_array
(
$emails
) ){
$this
->
mEmails[
'
email_to
'
]
=
$emails
[
'
email_to
'
];
#
对邮件标题进行处理
if
(
isset
(
$emails
[
'
email_subject
'
] )
||
!
empty
(
$emails
[
'
email_subject
'
])) {
eval
(
"
$email_subject = "
"
.
$emails
[
'
email_subject
'
]
.
"
";
"
);
$email_subject
=
str_replace
(
"
"
,
''
,
str_replace
(
"
"
,
''
,
$emails
[
'
email_subject
'
] ));
$this
->
mEmails[
'
email_subject
'
]
=
$emails
[
'
email_subject
'
];
}
#
对邮件内容进行处理
if
(
isset
(
$emails
[
'
email_message
'
])
||
!
empty
(
$emails
[
'
email_message
'
])) {
eval
(
"
$email_message = "
"
.
$emails
[
'
email_message
'
]
.
"
";
"
);
$emails
[
'
email_message
'
]
=
str_replace
(
"
.
"
,
"
..
"
,
str_replace
(
"
"
,
"
"
,
str_replace
(
"
"
,
"
"
,
str_replace
(
"
"
,
"
"
,
str_replace
(
"
"
,
"
"
,
$emails
[
'
email_message
'
])))));
$this
->
mEmails[
'
email_message
'
]
=
$emails
[
'
email_message
'
];
}
#
对邮件来源进行处理
if
(
isset
(
$emails
[
'
email_from
'
])
||
!
empty
(
$emails
[
'
email_from
'
]))
$this
->
mEmails[
'
email_from
'
]
=
$emails
[
'
email_from
'
];
else
$this
->
mEmails[
'
email_from
'
]
=
'
<
'
.
$_SERVER
[
'
SERVER_ADMIN
'
]
.
'
>
'
;
}
}
function
getEmails(
$elements
){
if
(
isset
(
$elements
)
||
!
empty
(
$elements
))
return
$this
->
mEmails[
$elements
];
else
return
$this
->
mEmails;
}
function
__destruct(){
unset
(
$this
);
}
}


class
sendMail
extends
MailCls{
private
$mMailCfg
;
function
__construct(
$mailcfg
){
if
(
is_array
(
$mailcfg
))
$this
->
mMailCfg
=
$mailcfg
;
}
#
发送邮件函数
function
sendMails( ){
if
(
!
$fp
=
fsockopen
(
$this
->
mMailCfg[
'
server
'
]
,
$this
->
mMailCfg[
'
port
'
]
,
$errno
,
$errstr
,
30
)) {
errorlog(
'
SMTP
'
,
"
($this->mMailCfg[server]:$this->mMailCfg[port]) CONNECT - Unable to connect to the SMTP server, please check your "mail_config.php".
"
,
0
);
}
stream_set_blocking
(
$fp
,
true
);

$lastmessage
=
fgets
(
$fp
,
512
);
if
(
substr
(
$lastmessage
,
0
,
3
)
!=
'
220
'
) {
errorlog(
'
SMTP
'
,
"
$this->mMailCfg[server]:$this->mMailCfg[port] CONNECT - $lastmessage
"
,
0
);
}

fputs
(
$fp
,
(
$this
->
mMailCfg[
'
auth
'
]
?
'
EHLO
'
:
'
HELO
'
)
.
"
hoodong
"
);
$lastmessage
=
fgets
(
$fp
,
512
);
if
(
substr
(
$lastmessage
,
0
,
3
)
!=
220
&&
substr
(
$lastmessage
,
0
,
3
)
!=
250
) {
errorlog(
'
SMTP
'
,
"
($this->mMailCfg[server]:$this->mMailCfg[port]) HELO/EHLO - $lastmessage
"
,
0
);
}

while
(
1
) {
$lastmessage
=
fgets
(
$fp
,
512
);
if
(
substr
(
$lastmessage
,
3
,
1
)
!=
'
-
'
||
empty
(
$lastmessage
)) {
break
;
}
}

if
(
$this
->
mMailCfg[
'
auth
'
]) {
fputs
(
$fp
,
"
AUTH LOGIN
"
);
$lastmessage
=
fgets
(
$fp
,
512
);
if
(
substr
(
$lastmessage
,
0
,
3
)
!=
334
) {
errorlog(
'
SMTP
'
,
"
($this->mMailCfg[server]:$this->mMailCfg[port]) AUTH LOGIN - $lastmessage
"
,
0
);
}

fputs
(
$fp
,
base64_encode
(
$this
->
mMailCfg[
'
auth_username
'
])
.
"
"
);
$lastmessage
=
fgets
(
$fp
,
512
);
if
(
substr
(
$lastmessage
,
0
,
3
)
!=
334
) {
errorlog(
'
SMTP
'
,
"
($this->mMailCfg[server]:$this->mMailCfg[port]) USERNAME - $lastmessage
"
,
0
);
}

fputs
(
$fp
,
base64_encode
(
$this
->
mMailCfg[
'
auth_password
'
])
.
"
"
);
$lastmessage
=
fgets
(
$fp
,
512
);
if
(
substr
(
$lastmessage
,
0
,
3
)
!=
235
) {
errorlog(
'
SMTP
'
,
"
($this->mMailCfg[server]:$this->mMailCfg[port]) PASSWORD - $lastmessage
"
,
0
);
}

$email_from
=
$this
->
mMailCfg[
'
from
'
];
}

fputs
(
$fp
,
"
MAIL FROM:
"
.
preg_replace
(
"
/.*<(.+?)>.*/
"
,
"
/1
"
,
$this
->
getEmails(
'
email_from
'
))
.
"
"
);
$lastmessage
=
fgets
(
$fp
,
512
);
if
(
substr
(
$lastmessage
,
0
,
3
)
!=
250
) {
fputs
(
$fp
,
"
MAIL FROM: <
"
.
preg_replace
(
"
/.*<(.+?)>.*/
"
,
"
/1
"
,
$this
->
getEmails(
'
email_from
'
))
.
"
>
"
);
$lastmessage
=
fgets
(
$fp
,
512
);
if
(
substr
(
$lastmessage
,
0
,
3
)
!=
250
) {
errorlog(
'
SMTP
'
,
"
($this->mMailCfg[server]:$this->mMailCfg[port]) MAIL FROM - $lastmessage
"
,
0
);
}
}

foreach
(
explode
(
'
,
'
,
$this
->
getEmails(
'
email_to
'
))
as
$to_user
) {
$to_user
=
trim
(
$to_user
);
if
(
$to_user
) {
fputs
(
$fp
,
"
RCPT TO: $to_user
"
);
$lastmessage
=
fgets
(
$fp
,
512
);
if
(
substr
(
$lastmessage
,
0
,
3
)
!=
250
) {
fputs
(
$fp
,
"
RCPT TO: <$to_user>
"
);
$lastmessage
=
fgets
(
$fp
,
512
);
errorlog(
'
SMTP
'
,
"
($this->mMailCfg[server]:$this->mMailCfg[port]) RCPT TO - $lastmessage
"
,
0
);
}
}
}

fputs
(
$fp
,
"
DATA
"
);
$lastmessage
=
fgets
(
$fp
,
512
);
if
(
substr
(
$lastmessage
,
0
,
3
)
!=
354
) {
errorlog(
'
SMTP
'
,
"
($this->mMailCfg[server]:$this->mMailCfg[port]) DATA - $lastmessage
"
,
0
);
}

fputs
(
$fp
,
"
To:
"
.
$this
->
getEmails(
'
email_to
'
)
.
"
From:
"
.
$this
->
getEmails(
'
email_from
'
)
.
"
Subject:
"
.
str_replace
(
"
"
,
'
'
,
$this
->
getEmails(
'
email_subject
'
))
.
"
"
.
$this
->
getEmails(
'
email_message
'
)
.
"
.
"
);
fputs
(
$fp
,
"
QUIT
"
);
}
function
getEmailCfg(
$elements
){
if
(
isset
(
$elements
)
||
!
empty
(
$elements
))
return
$this
->
mMailCfg[
$elements
];
else
return
$this
->
mMailCfg;
}
function
__destruct(){
unset
(
$fp
);
unset
(
$this
);
}
}
/*@调用演示.请设置下面信息@*/
#######################################################################
$emails
=
array
(
'
email_to
'
=>
'
injection.mail@gmail.com
'
,
#
收件人地址
'
email_subject
'
=>
'
test
'
,
#
邮件标题
'
email_message
'
=>
'
ksadasdasdasdsadasfafdasfdsaff
'
,
#
邮件正文
'
email_from
'
=>
'
<injection.mail@gmail.com>
'
,
#
邮件来源
);
##########################################################################
$mailcfg
[
'
server
'
]
=
'
smtp.gmail.com
'
;
#
smtp服务器地址
$mailcfg
[
'
port
'
]
=
'
25
'
;
#
smtp端口
$mailcfg
[
'
auth
'
]
=
1
;
#
显示作者
$mailcfg
[
'
from
'
]
=
'
gmail <injection.mail@gmail.com>
'
;
#
发件人地址
$mailcfg
[
'
auth_username
'
]
=
'
injection_at@hotmail.com
'
;
#
发件人邮箱
$mailcfg
[
'
auth_password
'
]
=
'
12345677
'
;
#
发件人邮箱密码
$sm
=
new
sendMail(
$mailcfg
);
$sm
->
setEmailInfo(
$emails
);
$sm
->
sendMails();


















































































































































/*@调用演示.请设置下面信息@*/
#######################################################################






##########################################################################






#调用:


