Problemas com smtp via meias
Como não encontrei solução para a descrição do problemaaqui, Eu decidi usarsysread
esyswrite
para diálogo com o servidor smtp. Abaixo está o meu código de teste:
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";
}
}
Eu tinha muitas perguntas e erros que não consigo resolver.
No começo, às vezes! eu recebo:Use of uninitialized value $data in concatenation (.) or string at ...
após o final dos dados (data_send($end);
)
Em segundo lugar,data_send($end)
não está funcionando no Gmail, todo esse código não está funcionando no GMX.
Em terceiro lugar, códigowhile {sysread($socket, $data, $buff);}
não funciona, e eu usosleep(1)
, é mau.
Finalmente, recebi um arquivo com cabeçalhos e corpo da mensagem, massyswrite
não funciona para a variável que contém o conteúdo do arquivo.
Ficaria muito grato por qualquer ajuda, obrigado.