| |||
sendmail en Nt imposible?? Hola amigos bueno tengo un problema, tengo un script hecho en perl que usa el programa externo sendmail de unix, el tema es que este codigo perl fue escrito en perl para unix y luego se lo paso a un Nt con un interprete bien ahora como hago para enviar un correo , alguien sabe, gracias. |
| |||
Re: sendmail en Nt imposible?? Hola: Primeramente te dire que el SendMail de Linux no corre en Nt porque SENDMAIL es un script propiamente de linux. Aqui te envio el script de enviar un email en NT. Recuerda que debes cambiar las variables. sub sendmail { # error codes below for those who bother to check result codes <gr> # 1 success # -1 $smtphost unknown # -2 socket() failed # -3 connect() failed # -4 service not available # -5 unspecified communication error # -6 local user $to unknown on host $smtp # -7 transmission of message failed # -8 argument $to empty # # Sample call: # # &sendmail($from, $reply, $to, $smtp, $subject, $message ); # # Note that there are several commands for cleaning up possible bad inputs - if you # are hard coding things from a library file, so of those are unnecesssary # my ($fromaddr, $replyaddr, $to, $smtp, $subject, $message) = @_; $to =~ s/[ \t]+/, /g; # pack spaces and add comma $fromaddr =~ s/.*<([^\s]*?)>/$1/; # get from email address $replyaddr =~ s/.*<([^\s]*?)>/$1/; # get reply email address $replyaddr =~ s/^([^\s]+).*/$1/; # use first address $message =~ s/^\./\.\./gm; # handle . as first character $message =~ s/\r\n/\n/g; # handle line ending $message =~ s/\n/\r\n/g; $smtp =~ s/^\s+//g; # remove spaces around $smtp $smtp =~ s/\s+$//g; if (!$to) { return(-8); } if ($SMTP_SERVER ne "") { my($proto) = (getprotobyname('tcp'))[2]; my($port) = (getservbyname('smtp', 'tcp'))[2]; my($smtpaddr) = ($smtp =~ /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/) ? pack('C4',$1,$2,$3,$4) : (gethostbyname($smtp))[4]; if (!defined($smtpaddr)) { return(-1); } if (!socket(MAIL, AF_INET, SOCK_STREAM, $proto)) { return(-2); } if (!connect(MAIL, pack('Sna4x8', AF_INET, $port, $smtpaddr))) { return(-3); } |
| |||
Re: sendmail en Nt imposible?? my($oldfh) = select(MAIL); $| = 1; select($oldfh); $_ = <MAIL>; if (/^[45]/) { close(MAIL); return(-4); } print MAIL "helo $SMTP_SERVER\r\n"; $_ = <MAIL>; if (/^[45]/) { close(MAIL); return(-5); } print MAIL "mail from: <$fromaddr>\r\n"; $_ = <MAIL>; if (/^[45]/) { close(MAIL); return(-5); } foreach (split(/, /, $to)) { print MAIL "rcpt to: <$_>\r\n"; $_ = <MAIL>; if (/^[45]/) { close(MAIL); return(-6); } } print MAIL "data\r\n"; $_ = <MAIL>; if (/^[45]/) { close MAIL; return(-5); } } if ($SEND_MAIL ne "") { open (MAIL,"| $SEND_MAIL"); } print MAIL "To: $to\n"; print MAIL "From: $fromaddr\n"; print MAIL "Reply-to: $replyaddr\n" if $replyaddr; print MAIL "X-Mailer: Perl Powered Socket Mailer\n"; print MAIL "Subject: $subject\n\n"; print MAIL "$message"; print MAIL "\n.\n"; if ($SMTP_SERVER ne "") { $_ = <MAIL>; if (/^[45]/) { close(MAIL); return(-7); } print MAIL "quit\r\n"; $_ = <MAIL>; } close(MAIL); return(1); } Este es un standard que lo usa todo el mundo en NT. Espero te ayude ;) remy |
| |||
Re: sendmail en Nt imposible?? Ok amigo cubano agradezco infinitamente este script. Pero podrías explicarme un poco más acerca de los parámetros o sea que tengo que tener configurado en mi NT para que este script funcione en mi código de Perl te cuento que soy medio novato en Perl y todavía ciertas cosas me cuestan. O sea debo tener un servidor de smtp de salida no?? en que parámetro pongo esto . Y una más si quisiera atachear una imagen puedo hacerlo, gracias. |
| |||
Re: sendmail en Nt imposible?? Si no me explique mi pregunta viene en estos parametros dentro de esta línea hay my ($fromaddr, $replyaddr, $to, $smtp, $subject, $message) |
| |||
Re: sendmail en Nt imposible?? Discul;pame me faltaron varias cositas. ;) Primero debes declarar unas variables y despues llamar a este procedimiento que fue el que te mande antes, con esto $mailresult=&sendmail("yo\@ltunas.inf.cu& quot;,$fields{'sender_email'}, $fields{recip_email}, $SMTP_SERVER, $SUBJECT, $msgtext); Donde $fields{'sender_email'} es el campo que se pasa por formulario desde una pagina Web que es quien envia el email. $fields{recip_email} es quien manda ese email. El SMTP_SERVER es una variable que debes declarar antes con el SMTP de tu email. Puedes usar el del yahoo que es "smtp.mail.yahoo.com", esto con "" el $subject y el $msgtext son variables que debes declarar con el Subject y el mensaje del cuerpo. Estas variables van entre "" tambien. Ex: SSubject="Esto es un test". No te preocupes al preguntar, siempre que pueda te respondere con placer. Remy |
| |||
Re: sendmail en Nt imposible?? Nuevamente amigo cubano muchas gracias por contestarme, pero ahora me siguen quedando unas dudas tu dices lo siguiente $mailresult=&sendmail("yo\@ltunas.inf.cu& quot;,$fields{'sender_email'}, $fields{recip_email}, $SMTP_SERVER, $SUBJECT, $msgtext); el primer campo de la función le pones tu email por lo que supongo que en ese campo va la dirección de correo de quien envía el email. Supongo que el segundo campo $fields{'sender_email') es el campo de la persona que va a recibir el email a quién se envía este correo o sea el destinatario. Y el último campo no me queda muy claro o sea el campo $fields{recip_email}, aqui que va el nombre de la persona por ejemplo adrian que es el nombre de la persona que recibe el email o todo lo contrario va la dirección de la persona que envío el email porque tu panes que aquí va quien manda el email pero entonces para que sirve el primer campo, si puedes aclararme estas dudas, te lo agradecería infinitamente. Y dime como es que desde Cuba te conectas a Internet, te cuento que estuve en Cuba, conozco Olguín y La Habana y me hice de un gran amigo de Olguín bueno , gracias por la respuesta. |
| |||
Re: sendmail en Nt imposible?? No, mira lo que pasa es que el primero lo pongo porque es el que predetermino yo. Osea el mensaje va a llegar con mi email. Si quiero puedo poner $fields{'sender_email'} en el primer campo sin ningun tipo de problemas y el segundo el que esta $fields{'sender_email'} es el email que escriben las personas, este es el reply donde regresa el email si da un error. O sea sino encuentra el $fields{recip_email} que es el email de quien recibe. Me entiendes? Yo simplemente uso el primero determinado para que sepan que salio de mi pagina. Es algo que puedes quitar. Solo que digo que a traves de el webmaster de mi sitio se le envio este emails y esas cositas ;) Me entiendes? No te preocupes en preguntar si tienes mas dudas. saludos remy |
| |||
Re: sendmail en Nt imposible?? Disculpame amigo pero sigo sin entender los 3 primeros campos cual es el que va la dirección de la persona a quién se le envía el email y cual es el campo donde va el from o sea la persona que lo envía el mail al destinatario y para que sería un tercer campo te cuento que lo voy probano por ahora pero no va funcionando quizás este mal los campos , espero tu respuesta y agradezco infinitamente tu paciencia. |
| |||
Re: sendmail en Nt imposible?? OK amigo aqui van un para de errores no comprendo bien que ocurre Global symbol "$SMTP_SERVER" requires explicit package name at C:\TangoCity\wwwroot\site\E-Gift\enviar.pl line 77. Global symbol "$SMTP_SERVER" requires explicit package name at C:\TangoCity\wwwroot\site\E-Gift\enviar.pl line 113. Global symbol "$SEND_MAIL" requires explicit package name at C:\TangoCity\wwwroot\site\E-Gift\enviar.pl line 150. Global symbol "$SEND_MAIL" requires explicit package name at C:\TangoCity\wwwroot\site\E-Gift\enviar.pl line 152. Global symbol "$SMTP_SERVER" requires explicit package name at C:\TangoCity\wwwroot\site\E-Gift\enviar.pl line 163. Global symbol "$SUBJECT" requires explicit package name at C:\TangoCity\wwwroot\site\E-Gift\enviar.pl line 202. Global symbol "$SMTP_SERVER" requires explicit package name at C:\TangoCity\wwwroot\site\E-Gift\enviar.pl line 203. Global symbo |
| |||
Re: sendmail en Nt imposible?? Ok olvidate del mensaje anterio te cuento lo que hago y tu dime llamo a la funcion con estos parametros &generales::sendmail($from,$email_destino,$fro m,$smtp,$asunto,$cu la puedo llamar así a la funcion con estos parámetros me imagino que si ya que le asigno esos valores de otra forma bueno ahora el tema es dentro de generales tengo la funcion que tu me pasaste y me pregunta viene asi que valores toma por ejemplo SMTP_SERVER dentro de la función que tu me pasaste toma el valor de smtp que yo le paso cuando la funcion que tu me pasaste obtiene los valores en la instruccion my ($fromaddr, $replyaddr, $to, $smtp, $subject, $message) = @_; hasta aqui todo bien pero dentro de la funcion que tu me pasaste variables como smtp_server que me pregunto que valores toma ya que no puedo entender eso y todavía no he podido entender el tema de los campos,gracias amigo, disculpame por mi ignorancia pero son mis primeros pasos en perl, aunque he programado en otros lenguajes |
| |||
Re: sendmail en Nt imposible?? El SMTP_SERVER es el servidor de smtp que usaras. Tienes que declarar esa variable asi como $subject y el texto del mensaje asi $smtp_server="smtp.mail.yahoo.com" $subject="Test" Esto debes declararlo al principio del programa. |
| |||
Re: sendmail en Nt imposible?? Ok amigo disculpa mi insistencia pero esto ya me esta venciendo peor espero que no ok tengo esta funcion en una pagina llamada send.pl que recibe los parametros de un formulario en otra funcion y luego que los tiene los envia a la funcion que tu me pasaste la funcion es esta sub makeEnviar{ my $temp=""; $temp = crypt(rand(99),"dam").time(); $temp =~ s/[^A-Za-z0-9]//ig; (my $dia,my $mes,my $anio)=(localtime)[3,4,5]; $mes++; $anio+=1900; if($dia<10){ $dia="0".$dia; } if($mes<10){ $mes="0".$mes; } my $fecha=$dia."-".$mes."-".$anio; &storeEgift($temp,$fecha); &trackEgift($temp,$fecha); $nick =~ s/^(.)/\U$1/; my $from="e-gift\@tangocity.com"; my $SUBJECT="Postal de Tangocity"; my $SMTP_SEND="smtp.mail.yahho.com" my $message=qq[ <html> <body bgcolor="#FFFFFF"> Hola $nombre_destino, <br> $nick te envió una postal de Tangocity. Podés verla en la siguiente dirección: <br> <a href="http://www.tangocity.com/site/E-Gift/tcpostales/p=$temp/.pl" target="_BLANK"> http://www.tangocity.com/site/E-Gift/tcpostales/p=$temp/</a> <br><br> Podés encontrar más postales de Tangocity en: <br> <a href="http://www.tangocity.com/site/E-Gift/" target="_BLANK"> http://www.tangocity.com/site/E-Gift/</a> <br> </body> </html> ]; #AQUI LLAMO A LA FUNCION CON ESTOS PARAMETROS &generales::sendmail($from,$from,$email_destin o,$SMTP_SEND,$SUBJECT,$message); &generales::redirect("/site/E-Gift/"); } muy bien ahora tengo la función que tu me pasaste que también la vi por otro lugar pero no funciona o sea no tira error de sintáxis ni nada pero no envía ningun mail y no comprendo por que si supuestamente hago todo bien , gracias por tenerme paciencia. |
| |||
Re: sendmail en Nt imposible?? Ok amigos despues de 4 días de pelear con esto lo he logrado , les cuento por si alguien le sirve he usado el modulo sendmail que baje de www.cpang.org y siguiendo instrucciones y cambiando el smtp de salida en el mismo modulo del sendmail.pm por fin envío un mail , gracias muchas gracias por tu sugerencias amigo cubano |