📄 lbmail.lib.pl
字号:
#######################################################
# LB5000MX 源程序版权所有:CGI编程者之家 (CGIer.com)
#
# 程序编写:山鹰糊 (Shining Hu)、花无缺 (Ifairy Han)
#
# 程序修改:BigJim (94Cool.Net)
#######################################################
if ($emailtype eq "smtp_mail")
{
$SMTP_SERVER =~ s/^\s+//g;
$SMTP_SERVER =~ s/\s+$//g;
$SMTP_PORT = 25 if ($SMTP_PORT !~ /^\d+$/);
$emailfunctions = "off" if ($SMTP_SERVER eq "" || $SMTP_SERVER =~ /localhost/i);
}
elsif ($emailtype eq "esmtp_mail")
{
$SMTP_SERVER =~ s/^\s+//g;
$SMTP_SERVER =~ s/\s+$//g;
$SMTP_PORT = 25 if ($SMTP_PORT !~ /^\d+$/);
$emailfunctions = "off" if ($SMTP_SERVER eq "" || $SMTP_SERVER =~ /localhost/i || $SMTPUSER eq "");
}
elsif ($emailtype eq "send_mail")
{
$emailfunctions = "off" if ($SEND_MAIL eq "");
}
sub sendmail
{
my ($fromaddr, $replyaddr, $to, $subject, $message) = @_;
$to =~ s/\\//isg;
$to =~ s/[ \a\f\e\0\r\t]+//isg;
$to =~ s/\,$//isg;
$to =~ s/\,/\, /isg;
my $sendstat = 0;
if ($to ne "" && $emailfunctions eq "on")
{
$fromaddr =~ s/.*<([^\s]*?)>/$1/;
$replyaddr =~ s/.*<([^\s]*?)>/$1/;
$replyaddr =~ s/^([^\s]+).*/$1/;
$message .= "\n=============================================\n<br>";
$message .= "LB5000 论坛 技术支持:http://www.cgier.com/\n <br>";
$message .= "LB5000 论坛 技术演示:http://www.leoBBS.com/ \n<br>";
$message .= "此邮件由雷傲超级论坛(LeoBoard)发送... \n<br>";
if ($emailtype eq "blat_mail")
{
$sendstat = 1 if (&blat_mail($to, $fromaddr, $replyaddr, $subject, $message));
}
elsif ($emailtype eq "send_mail")
{
$sendstat = 1 if (&send_mail($to, $fromaddr, $replyaddr, $subject, $message));
}
elsif ($emailtype eq "smtp_mail")
{
$message =~ s/\n/\r/isg;
$sendstat = 1 if (&smtpmail($to, $fromaddr, $replyaddr, $subject, $message, "no"));
}
elsif ($emailtype eq "esmtp_mail")
{
$message =~ s/\n/\r/isg;
$sendstat = 1 if (&smtpmail($to, $fromaddr, $replyaddr, $subject, $message, "yes"));
}
}
return $sendstat;
}
sub send_mail
{
my ($to, $fromaddr, $replyaddr, $subject, $message) = @_;
my @to1 = split(/\, /, $to);
foreach $to (@to1)
{
chomp $to;
next if ($to !~ /\@/);
return 0 unless (open(MAIL, "| $SEND_MAIL -t"));
print MAIL "To: $to\n";
print MAIL "From: $fromaddr\n";
print MAIL "Reply-to: $replyaddr\n" if ($replyaddr ne "");
print MAIL "X-Mailer: LeoBoard Sendmail Mail Sender\n";
print MAIL "Content-Type: text/html; charset=gb2312\n";
print MAIL "Subject: $subject\n\n";
print MAIL $message;
print MAIL "\n.";
close(MAIL);
}
return 1;
}
sub blat_mail
{
my ($to, $fromaddr, $replyaddr, $subject, $message) = @_;
my @to1 = split(/\, /, $to);
$tempfile = "${lbdir}lock/tempfile.txt";
open(FILE, ">$tempfile");
flock(FILE, 1) if ($OS_USED eq "Unix");
print FILE $message;
close(FILE);
foreach $to (@to1)
{
chomp $to;
next if ($to !~ /\@/);
return 0 unless (open(MAIL, qq~|blat $tempfile -t "$to" -b "$bccinfo" -i "$fromaddr" -f "$fromaddr" -s "$subject"~));
close(MAIL);
}
unlink($tempfile);
return 1;
}
sub smtpmail
{
eval("use Socket;");
my ($address, $from, $replyaddr, $subject, $body, $extra) = @_;
my ($a, $i, $name, $aliases, $proto, $type, $len, $thataddr);
my @to = split(/, /, $address);
foreach $i (@to)
{
#对地址进行解码
my $AF_INET = 2;
my $SOCK_STREAM = 1;
my $SOCKADDR = 'S n a4 x8';
($name, $aliases, $proto) = getprotobyname('tcp');
($name, $aliases, $SMTP_PORT) = getservbyname($SMTP_PORT, 'tcp') unless ($SMTP_PORT =~ /^\d+$/);
($name, $aliases, $type, $len, $thataddr) = gethostbyname($SMTP_SERVER);
my $this = pack($SOCKADDR, $AF_INET, 0, $thisaddr);
my $that = pack($SOCKADDR, $AF_INET, $SMTP_PORT, $thataddr);
#打开SMTP的socket端口
socket(S, $AF_INET, $SOCK_STREAM, $proto);
bind(S, $this);
connect(S, $that);
select(S);
$| = 1;
select(STDOUT);
$a = "";
$a = <S>;
if ($a !~ /^2/)
{
close(S);
undef $|;
return 0;
}
if ($extra eq "no")
{#与普通SMTP服务器握手连接
print S "HELO localhost\n";
$a = <S>;
}
else
{#进行ESMTP身份验证
print S "EHLO localhost\n";
$a = <S>;
print S "AUTH LOGIN\n";
$a = <S>;
my $encode_smtpuser = &Base64encode($SMTPUSER); #用来验证的用户名必须经过Base64编码后发往服务器
print S "$encode_smtpuser\n";
$a = <S>;
my $encode_smtppass = &Base64encode($SMTPPASS); #用来验证的密码必须经过Base64编码后发往服务器
print S "$encode_smtppass\n";
$a = <S>;
return 0 if ($a =~ /fail/i);
}
#发送邮件头部信息
print S "MAIL FROM: <$from>\n";
$a = <S>;
print S "RCPT TO: <$i>\n";
$a = <S>;
#发送邮件正文
print S "DATA\n";
print S "From: $from\n";
print S "To: $i\n";
print S "Subject: $subject\n";
print S "Reply-To: $replyaddr\n" if ($replyaddr);
print S "X-Mailer: LeoBoard eSmtp Mail Sender\n";
print S "Content-Type: text/html; charset=gb2312\n\n";
print S $body;
print S "\n";
print S "\n\n";
print S ".\n";
$a = <S>;
print S "QUIT\n";
$a = <S>;
close(S);
undef $|;
}
return 1;
}
sub Base64encode
#Base64编码函数
{
my $res = pack("u", $_[0]); $res =~ s/^.//mg; $res =~ s/\n//g; $res =~ tr|` -_|AA-Za-z0-9+/|; my $padding = (3 - length($_[0]) % 3) % 3; $res =~ s/.{$padding}$/'=' x $padding/e if $padding; return $res;}
1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -