📄 sendmail.pm
字号:
sub sendmailto{
# 将要定义的变量:$EmailServer,$sendto,$from,$subject,and $message
use Socket;
# 从接口程式获得邮件相关变量
local($from,$sendto,$subject,$message) = @_;
# 设定传送协议
$protocol = getprotobyname('tcp');
socket(SOCKET,PF_INET,SOCK_STREAM,$protocol);
$remote_ip = gethostbyname($EmailServer);
$remote_sock = pack('Sna4x8', AF_INET, 25, $remote_ip);
unless(connect(SOCKET, $remote_sock)){
&GotError("对不起,不能连接SMTP服务器!");
}
# 清空缓冲区
select(SOCKET); $|=1; select(STDOUT);
# 设定超时反馈信息
$timeout_message = "已经连接到服务器, 但没有响应.";
# 依据RFC 821标准检测服务器是否为SMTP服务器
$return = <SOCKET>;
unless($return =~ /^220.+/){
&GotError("服务器没有响应.. 可能不是SMTP服务器.");
}
while($return =~ /^\d\d\d\-/){
$return = <SOCKET>;
}
# 以客户端机器名称送出一个握手信号
print SOCKET "HELO $ENV{REMOTE_ADDR}\r\n";
$return = <SOCKET>;
unless($return =~ /^250.+/){
&GotError("服务器错误: \"$return\"");
}
while($return =~ /^\d\d\d\-/){
$return = <SOCKET>;
}
# 复位超时反馈信息
$timeout_message = "服务器操作超时.";
# 传送信件来源名称
print SOCKET "MAIL FROM: <$from>\r\n";
$return = <SOCKET>;
unless($return =~ /^250.+/){
&GotError("服务器错误: \"$return\"");
}
while($return =~ /^\d\d\d\-/){
$return = <SOCKET>;
}
# 传送信件去向名称
$sendto =~ s/\;/\,/g;
$all_recipients = $sendto;
@Recipients = split(/[\,]/,$all_recipients);
while($recipient = shift(@Recipients)){
if($recipient =~ /([^\s<]+@[^\s\r,>]+)/){
$recipient = '<' . $1 . '>';
print SOCKET "RCPT TO: $recipient\r\n";
$return = <SOCKET>;
unless($return =~ /^250.+/){
&GotError("服务器错误: \"$return\"");
}
while($return =~ /^\d\d\d\-/){
$return = <SOCKET>;
}
}
}
print SOCKET "DATA\r\n";
$return = <SOCKET>;
unless($return =~ /^354.+/){
&GotError("服务器错误: \"$return\"");
}
while($return =~ /^\d\d\d\-/){
$return = <SOCKET>;
}
# 构建信件头
$Message = qq|To:$sendto\r\n|;
if ($ReplyTo){
$Message .= qq|From:$ReplyTo\r\n|;
}
else{
$Message .= qq|From:$from\r\n|;
}
$Message .= qq|Subject:$subject\r\n|;
$Message .= qq|Content-type:text/html;"charset=gb2312"\r\n\r\n|;
# 信件本身
$Message .= "$message";
$Message =~ s/\r\n?/\n/g;
print SOCKET $Message;
# 结束调用SOCKET
print SOCKET "\r\n.\r\n";
$return = <SOCKET>;
unless($return =~ /^250.+/){
&GotError("服务器错误: \"$return\"");
}
while($return =~ /^\d\d\d\-/){
$return = <SOCKET>;
}
print SOCKET "QUIT\r\n";
close SOCKET;
return ;
}
sub GotError {
$ErrorLine = shift;
print qq~
<HTML><BODY>$ErrorLine</BODY></HTML>
~;
exit(0);
}
1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -