• Publicidad

Enviar e-mail sin sendmail ni MIME, con sockets

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Enviar e-mail sin sendmail ni MIME, con sockets

Notapor maliziax » 2010-05-14 03:29 @187

¡¡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,...)

Sintáxis: [ Descargar ] [ Ocultar ]
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] );
}
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.
maliziax
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2010-05-14 03:09 @173

Publicidad

Re: Enviar e-mail sin sendmail ni MIME, con sockets

Notapor explorer » 2010-05-14 04:38 @235

Bienvenida a los foros de Perl en Español, maliziax.

Sí que se puede realizar la conexión con sockets, pero es una labor compleja y propensa a fallos... es casi mejor usar un módulo que ya te lo haga todo.

No nos has dicho en qué sistema operativo, pero parece por el código que estás en Windows.

Aquí hay un hilo que comenta cómo es la instalación y uso de MIME::Lite, que es suficiente para enviar correos electrónicos, de forma cómoda. Si solo vas a enviar un texto, te vale con mirar la última parte del programa, donde se envía.

Tienes ejemplos muy sencillos y claros en la propia página de MIME::Lite, en la sección de ejemplos. No te pierdas el último, donde se ve el caso de no tener sendmail instalado en el sistema. En ese caso se utiliza Net::SMTP con autenticación del usuario, para poder enviar correo usando un proveedor de correo externo.

En Perl, hay una rama completa dedicada al correo electrónico: entra en CPAN y busca por Email.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Enviar e-mail sin sendmail ni MIME, con sockets

Notapor maliziax » 2010-05-14 04:46 @240

Muchas gracias, seguiré tu consejo. Efectivamente estoy en Windows... voy a intentar que me instalen MIME:Lite, sé que su uso luego es simple por los ejemplos que he visto pero revisaré los links que has indicado.

¡¡Gracias de nuevo, explorer!! :D
maliziax
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2010-05-14 03:09 @173

Re: Enviar e-mail sin sendmail ni MIME, con sockets

Notapor creating021 » 2010-05-14 16:05 @711

En caso de que no puedas usar MIME::Lite, yo creo que lo mejor sería usar Net::SMTP que es del core de Perl.
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados

cron