⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lbmail.lib.pl

📁 一个linux论坛
💻 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 + -