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

📄 sendmail.pm

📁 XYZ情书生成投递系统
💻 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 + -