Problemas con smtp a través de calcetines

Como no encontré solución a la descripción del problemaaquíDecidí usarsysread ysyswrite para diálogo con el servidor smtp. A continuación se muestra mi código de prueba:

sub test {
    my ($dbh) = @_;
    my $server = "smtp.mail.ru";
    my $ip = $server;
    $ip = inet_aton($ip);
    $ip = inet_ntoa($ip);
    $ip = &ip2long($ip);
    my $port = 465;
    my $pid = 0;
    my $is_ssl = 1;
    my $answer;
    my $user = '[email protected]';
    my $buff = 8192;
    if (&choose_proxy($ip, $port, $dbh, $pid)) {
        if (&connect($ip, $port, $is_ssl, $pid, $server)){
            data_read($buff);
            my $ehlo = "ehlo mydomain.com\n";
            data_send($ehlo);
            data_read($buff);
            my $auth = "auth login\n";
            data_send($auth);
            data_read($buff);
            my $smtpuser = encode_base64($user);
            my $smtppassword = encode_base64('password');
            data_send($smtpuser);
            data_read($buff);
            data_send($smtppassword);
            data_read($buff);
            my $mail = "mail from: <$user>\n";
            data_send($mail);
            data_read($buff);
            my $to = '[email protected]';
            $to = "rcpt to: <$to>\n";
            data_send($to);
            data_read($buff);
            my $start = "DATA\n";
            syswrite($socket, $start, length($start)); 
            data_read($buff);
            my $data = "test message\n";
            data_send($data);
            my $end .= ".\n";
            data_send($end);
            data_read($buff);
            my $quit = "quit\n";
            data_send($quit);
            data_read($buff);
            return $socket;
        }
    }
}

sub data_send {
    my $data = shift;
    if ($debug_smtp) {
        print ">> $data";
    }
    syswrite($socket, $data, length($data));
}

sub data_read {
    my $buff = shift;
    my $data;
    sleep(1);
    sysread($socket, $data, $buff);
    if ($debug_smtp) {
        print "<< $data";
    }
}

Tenía muchas preguntas y errores que no puedo resolver.

Al principio, a veces! yo obtengo:Use of uninitialized value $data in concatenation (.) or string at ... después del final de los datos (data_send($end);)

En segundo lugar,data_send($end) no funciona en Gmail, todo este código no funciona en GMX.

En tercer lugar, el códigowhile {sysread($socket, $data, $buff);} no funciona, y yo usosleep(1), es malo.

Finalmente, recibí un archivo con encabezados y cuerpo del mensaje, perosyswrite No funciona para la variable que contiene el contenido del archivo.

Le agradecería cualquier ayuda, gracias.

Respuestas a la pregunta(1)

Su respuesta a la pregunta