Enviar e-mail sin sendmail ni MIME, con sockets
![Nota Nota](https://perlenespanol.com/foro/styles/prosilver/imageset/icon_post_target.gif)
¡¡Hola!!
Soy novata en Perl, he hecho mis "pinitos" pero poco más.
Tengo un programita que necesito que me envíe un e-mail con el informe del resultado del proceso una vez acaba.
No pueden instalar sendmail (no me preguntéis por qué) ni nada que me sirva para enviar el e-mail y me han pedido que lo haga a través de sockets. Según me han dicho "es muy fácil y seguro que hay ejemplos en Internet"
Llevo toda la semana buscando por la red y siempre usan sendmail o MIME:lite en todo lo que he visto... he encontrado un solo ejemplo con socket pero no me funciona y como no llego a entender muy bien en qué consiste, ya dudo incluso de que se pueda hacer el envío de e-mail como me han pedido.
Pego a continuación el código que he encontrado y probado, he cambiado alguna cosita. No me da ningún error, simplemente hace print() del HELO, From, etc,.. pero no me devuelve ninguna respuesta (250 OK, etc,...)
¿Me podéis confirmar si es posible hacer este envío de e-mail a través de un socket?
¿Cómo lo haríais vosotros?
¡Por favor, agradezco cualquier cosa que me pueda servir de ayuda!
¡Mil gracias!!
Un saludo.
Soy novata en Perl, he hecho mis "pinitos" pero poco más.
Tengo un programita que necesito que me envíe un e-mail con el informe del resultado del proceso una vez acaba.
No pueden instalar sendmail (no me preguntéis por qué) ni nada que me sirva para enviar el e-mail y me han pedido que lo haga a través de sockets. Según me han dicho "es muy fácil y seguro que hay ejemplos en Internet"
Llevo toda la semana buscando por la red y siempre usan sendmail o MIME:lite en todo lo que he visto... he encontrado un solo ejemplo con socket pero no me funciona y como no llego a entender muy bien en qué consiste, ya dudo incluso de que se pueda hacer el envío de e-mail como me han pedido.
Pego a continuación el código que he encontrado y probado, he cambiado alguna cosita. No me da ningún error, simplemente hace print() del HELO, From, etc,.. pero no me devuelve ninguna respuesta (250 OK, etc,...)
Using perl Syntax Highlighting
my($mailTo) ='[email protected]';
my($mailServer) ='smtp.midominio.es';
my($mailFrom) ='[email protected]';
my($realName) = "Mi Nombre";
my($subject) = 'E-mail pruebas';
my($body) = "Pruebas linea uno.\nPruebas linea dos.\n";
$main::SIG{'INT'} = 'closeSocket';
my($proto) = getprotobyname("TCP") || 6;
my($port) = getservbyname("SMTP", "TCP") || 25;
my($serverAddr) = (gethostbyname($mailServer))[4];
socket(SMTP, AF_INET(), SOCK_STREAM(), $proto)
or die("socket: $!");
my $packFormat = 'Sna4x8'; # Windows 95, SunOs 4.1+
connect(SMTP, pack($packFormat, AF_INET(), $port, $serverAddr))
or die("connect: $!");
select(SMTP); $| = 1; select(STDOUT);
{
my $inpBuf = '';
recv(SMTP, $inpBuf, 200, 0);
recv(SMTP, $inpBuf, 200, 0);
}
sendSMTP(1, "HELO\n");
sendSMTP(1, "MAIL From: <$mailFrom>\n");
sendSMTP(1, "RCPT To: <$mailTo>\n");
sendSMTP(1, "DATA\n");
sendSMTP (1,"From: $realName\n");
sendSMTP (1,"Subject: $subject\n");
sendSMTP (1,$body);
sendSMTP(1, "\r\n.\r\n");
sendSMTP(1, "QUIT\n");
close(SMTP);
sub closeSocket { # close smtp socket on error
close(SMTP);
die("SMTP socket closed due to SIGINT\n");
}
sub sendSMTP {
my $debug = shift;
my $buffer = shift;
print STDERR ("> $buffer") if $debug;
send(SMTP, $buffer, 0);
recv(SMTP, $buffer, 200, 0);
print STDERR ("XXXX< $buffer") if $debug;
return( (split(/ /, $buffer))[0] );
}
my($mailServer) ='smtp.midominio.es';
my($mailFrom) ='[email protected]';
my($realName) = "Mi Nombre";
my($subject) = 'E-mail pruebas';
my($body) = "Pruebas linea uno.\nPruebas linea dos.\n";
$main::SIG{'INT'} = 'closeSocket';
my($proto) = getprotobyname("TCP") || 6;
my($port) = getservbyname("SMTP", "TCP") || 25;
my($serverAddr) = (gethostbyname($mailServer))[4];
socket(SMTP, AF_INET(), SOCK_STREAM(), $proto)
or die("socket: $!");
my $packFormat = 'Sna4x8'; # Windows 95, SunOs 4.1+
connect(SMTP, pack($packFormat, AF_INET(), $port, $serverAddr))
or die("connect: $!");
select(SMTP); $| = 1; select(STDOUT);
{
my $inpBuf = '';
recv(SMTP, $inpBuf, 200, 0);
recv(SMTP, $inpBuf, 200, 0);
}
sendSMTP(1, "HELO\n");
sendSMTP(1, "MAIL From: <$mailFrom>\n");
sendSMTP(1, "RCPT To: <$mailTo>\n");
sendSMTP(1, "DATA\n");
sendSMTP (1,"From: $realName\n");
sendSMTP (1,"Subject: $subject\n");
sendSMTP (1,$body);
sendSMTP(1, "\r\n.\r\n");
sendSMTP(1, "QUIT\n");
close(SMTP);
sub closeSocket { # close smtp socket on error
close(SMTP);
die("SMTP socket closed due to SIGINT\n");
}
sub sendSMTP {
my $debug = shift;
my $buffer = shift;
print STDERR ("> $buffer") if $debug;
send(SMTP, $buffer, 0);
recv(SMTP, $buffer, 200, 0);
print STDERR ("XXXX< $buffer") if $debug;
return( (split(/ /, $buffer))[0] );
}
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
¿Me podéis confirmar si es posible hacer este envío de e-mail a través de un socket?
¿Cómo lo haríais vosotros?
¡Por favor, agradezco cualquier cosa que me pueda servir de ayuda!
¡Mil gracias!!
Un saludo.