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'] = '';
}
}
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: 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: ");
$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' => '', #邮件来源
);
##########################################################################
$mailcfg
['server'] = 'smtp.gmail.com'; #smtp服务器地址
$mailcfg
['port'] = '25'; #smtp端口
$mailcfg
['auth'] = 1; #显示作者
$mailcfg
['from'] = 'gmail'; #发件人地址
$mailcfg
['auth_username'] = 'injection_at@hotmail.com'; #发件人邮箱
$mailcfg
['auth_password'] = '12345677'; #发件人邮箱密码
#调用:
$sm
=
new
sendMail(
$mailcfg
);
$sm
->setEmailInfo(
$emails
);
$sm
->sendMails();