$bfconfig
= Array (
'sitename' => '网站名称',
);
$mail
= Array (
'state' => 1,
'server' => 'smtp.abc.com',
'port' => 25,
'auth' => 1,
'username' => 'admin@abc.com',
'password' => '123456',
'charset' => 'gbk',
'mailfrom' => 'admin@abc.com'
);
function
sendmail(
$mail_to
,
$mail_subject
,
$mail_message
) {
global
$mail
,
$bfconfig
;
date_default_timezone_set('PRC');
$mail_subject
= '=?'.
$mail
['charset'].'?B?'.
base64_encode
(
$mail_subject
).'?=';
$mail_message
=
chunk_split
(
base64_encode
(preg_replace(
"/(^|(\r\n))(\.)/"
,
"\1.\3"
,
$mail_message
)));
$headers
.=
""
;
$headers
.=
"MIME-Version:1.0\r\n"
;
$headers
.=
"Content-type:text/html\r\n"
;
$headers
.=
"Content-Transfer-Encoding: base64\r\n"
;
$headers
.=
"From: "
.
$bfconfig
['sitename'].
"<"
.
$mail
['mailfrom'].
">\r\n"
;
$headers
.=
"Date: "
.
date
(
"r"
).
"\r\n"
;
list(
$msec
,
$sec
) =
explode
(
" "
, microtime());
$headers
.=
"Message-ID: <"
.
date
(
"YmdHis"
,
$sec
).
"."
.(
$msec
* 1000000).
"."
.
$mail
['mailfrom'].
">\r\n"
;
if
(!
$fp
=
fsockopen
(
$mail
['server'],
$mail
['port'],
$errno
,
$errstr
, 30)) {
exit
(
"CONNECT - Unable to connect to the SMTP server"
);
}
stream_set_blocking(
$fp
, true);
$lastmessage
=
fgets
(
$fp
, 512);
if
(
substr
(
$lastmessage
, 0, 3) != '220') {
exit
(
"CONNECT - "
.
$lastmessage
);
}
fputs
(
$fp
, (
$mail
['auth'] ? 'EHLO' : 'HELO').
" befen\r\n"
);
$lastmessage
=
fgets
(
$fp
, 512);
if
(
substr
(
$lastmessage
, 0, 3) != 220 &&
substr
(
$lastmessage
, 0, 3) != 250) {
exit
(
"HELO/EHLO - "
.
$lastmessage
);
}
while
(1) {
if
(
substr
(
$lastmessage
, 3, 1) != '-' ||
empty
(
$lastmessage
)) {
break
;
}
$lastmessage
=
fgets
(
$fp
, 512);
}
if
(
$mail
['auth']) {
fputs
(
$fp
,
"AUTH LOGIN\r\n"
);
$lastmessage
=
fgets
(
$fp
, 512);
if
(
substr
(
$lastmessage
, 0, 3) != 334) {
exit
(
$lastmessage
);
}
fputs
(
$fp
,
base64_encode
(
$mail
['username']).
"\r\n"
);
$lastmessage
=
fgets
(
$fp
, 512);
if
(
substr
(
$lastmessage
, 0, 3) != 334) {
exit
(
"AUTH LOGIN - "
.
$lastmessage
);
}
fputs
(
$fp
,
base64_encode
(
$mail
['password']).
"\r\n"
);
$lastmessage
=
fgets
(
$fp
, 512);
if
(
substr
(
$lastmessage
, 0, 3) != 235) {
exit
(
"AUTH LOGIN - "
.
$lastmessage
);
}
$email_from
=
$mail
['mailfrom'];
}
fputs
(
$fp
,
"MAIL FROM: <"
.preg_replace(
"/.*\<(.+?)\>.*/"
,
"\\1"
,
$email_from
).
">\r\n"
);
$lastmessage
=
fgets
(
$fp
, 512);
if
(
substr
(
$lastmessage
, 0, 3) != 250) {
fputs
(
$fp
,
"MAIL FROM: <"
.preg_replace(
"/.*\<(.+?)\>.*/"
,
"\\1"
,
$email_from
).
">\r\n"
);
$lastmessage
=
fgets
(
$fp
, 512);
if
(
substr
(
$lastmessage
, 0, 3) != 250) {
exit
(
"MAIL FROM - "
.
$lastmessage
);
}
}
foreach
(
explode
(',',
$mail_to
)
as
$touser
) {
$touser
= trim(
$touser
);
if
(
$touser
) {
fputs
(
$fp
,
"RCPT TO: <"
.preg_replace(
"/.*\<(.+?)\>.*/"
,
"\\1"
,
$touser
).
">\r\n"
);
$lastmessage
=
fgets
(
$fp
, 512);
if
(
substr
(
$lastmessage
, 0, 3) != 250) {
fputs
(
$fp
,
"RCPT TO: <"
.preg_replace(
"/.*\<(.+?)\>.*/"
,
"\\1"
,
$touser
).
">\r\n"
);
$lastmessage
=
fgets
(
$fp
, 512);
exit
(
"RCPT TO - "
.
$lastmessage
);
}
}
}
fputs
(
$fp
,
"DATA\r\n"
);
$lastmessage
=
fgets
(
$fp
, 512);
if
(
substr
(
$lastmessage
, 0, 3) != 354) {
exit
(
"DATA - "
.
$lastmessage
);
}
fputs
(
$fp
,
$headers
);
fputs
(
$fp
,
"To: "
.
$mail_to
.
"\r\n"
);
fputs
(
$fp
,
"Subject: $mail_subject\r\n"
);
fputs
(
$fp
,
"\r\n\r\n"
);
fputs
(
$fp
,
"$mail_message\r\n.\r\n"
);
$lastmessage
=
fgets
(
$fp
, 512);
if
(
substr
(
$lastmessage
, 0, 3) != 250) {
exit
(
"END - "
.
$lastmessage
);
}
fputs
(
$fp
,
"QUIT\r\n"
);
}