Foros del Web » Programando para Internet » PHP »

Ayuda urgente

Estas en el tema de Ayuda urgente en el foro de PHP en Foros del Web. Buenas tardes a todos los usuarios de este foro: Primero que nada quiero anunciar y expresar lo util y grandioso que es este foro, ya ...
  #1 (permalink)  
Antiguo 01/08/2010, 15:58
 
Fecha de Ingreso: agosto-2010
Mensajes: 3
Antigüedad: 13 años, 9 meses
Puntos: 0
Ayuda urgente

Buenas tardes a todos los usuarios de este foro:

Primero que nada quiero anunciar y expresar lo util y grandioso que es este foro, ya que me ha servido de mucha ayuda en la realización de mi tesis, la cual debo discutir ahora. Por tal motivo me suscribi ya que tengo una pequeña tranca. El asunto es el siguiente y lo explicare detalladamente para que se entienda bien:

Mi tesis consiste en la realización de una pagina web para el servicio y atención al cliente, dicha pagina contiene varios modulos y uno de ellos es el de venta de articulos de dicha empresa (que es una farmacia), hasta aqui todo va bien, ya que pude adaptarle un carrito de compras el cual funciona a la perfección. El problema viene, cuando se desea enviar el e-mail al usuario donde se le notifica el detalle de su compra realizada y los metodos de pago. Esto se hace atraves de un script en "mailer.php" dicho script me genera un error de conexión, lo que mi profesor me explico es porque el sitio no esta montado en un servidor, y que para probarlo hay que montarlo en un servidor (ya que tengo todo funcionando desde un localhost) pero para no estar montando eso en un servidor y pagando esa cantidad de dinero, decidi idearmelas para que todo funcionara localmente.

La idea que tengo basicamente, es que cuando el usuario le de clic al boton de "Comprar" le salga un aviso que diga: "Gracias por realizar su compra, en breve le estaremos notificando los detalles de su compra vía e-mail" y que lo redireccione a la pagina principal. Hasta ahi bien, pero... tambien es necesario que desde el menú de administrador de la pagina, este vea el detalle de la compra del usuario. Entonces tengo pensado algo asi como esto; que cuando el usuario le de clic al boton de "Comprar" le diga ese mensaje, pero... que el detalle de la compra, lo envie a una parte que solo lo pueda ver un administrador.

¿Alguien me podria ayudar con esto?

Les agradezco mucho de antemano por su ayuda.

Saludos cordiales
  #2 (permalink)  
Antiguo 01/08/2010, 16:26
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Ayuda urgente

discúlpame por contradecir a tu profesor, pero eso es completamente falso, puedes enviar mails desde tu equipo local perfectamente, entre los inconvenientes de ello tenemos:

-en servidores windows, debes instalar y configurar un SMTP en el php.ini
-en servidores locales, sean windows, GNU/Linux, Unix, etc. las posibilidades de que el mail sea considerado SPAM son altas, pero el mensaje llega.
-los saltos del mail, entre los router o proys internos de la intranet (debido a mala configuración) pueden también provocar que el mail sea considerado SPAM
-un mail sin remitente es prácticamente SPAM (no en todos los casos).
-si el firewall del servidor, del proxy, del router (si los tienen), etc. tiene bloqueado el puerto 25 para salida (out), es obvio que el mail nunca llegue.

Claro, en un servidor de pago es otro cantar, se incrementan las posibilidades de que el Mail llege directo a la bandeja de entrada
  #3 (permalink)  
Antiguo 01/08/2010, 23:41
 
Fecha de Ingreso: agosto-2010
Mensajes: 3
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Ayuda urgente

Cita:
Iniciado por maycolalvarez Ver Mensaje
discúlpame por contradecir a tu profesor, pero eso es completamente falso, puedes enviar mails desde tu equipo local perfectamente, entre los inconvenientes de ello tenemos:

-en servidores windows, debes instalar y configurar un SMTP en el php.ini
-en servidores locales, sean windows, GNU/Linux, Unix, etc. las posibilidades de que el mail sea considerado SPAM son altas, pero el mensaje llega.
-los saltos del mail, entre los router o proys internos de la intranet (debido a mala configuración) pueden también provocar que el mail sea considerado SPAM
-un mail sin remitente es prácticamente SPAM (no en todos los casos).
-si el firewall del servidor, del proxy, del router (si los tienen), etc. tiene bloqueado el puerto 25 para salida (out), es obvio que el mail nunca llegue.

Claro, en un servidor de pago es otro cantar, se incrementan las posibilidades de que el Mail llege directo a la bandeja de entrada
Ya veo, entonces ¿Que opcion me recomiendas? Por los momentos necesito la opción más rapida y factible, ya que dentro de pocos días me toca exponer, y lo único que me falta para terminar la pagina es eso, que cuando el usuario le da clic al boton de comprar, le mande un e-mail con los detalles de la compra, al mismo tiempo tambien le manda un e-mail a la compañia con lo mismo, esto para que genere la facturación.

Aqui tengo el codigo de eso, que en este caso lo llame "mailer.php"

Código PHP:
<?php
session_start
(); 
$carro=$_SESSION['carro'];
$usuario=$_SESSION['valid_user'];
//Guardamos en la
//variable $html el
//cuerpo del mensaje
$html "
<html>
<head>
<title>Detalle de artículos Comprados</title>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">
<style type=\"text/css\">
<!-- 
.tit {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 9px;
color: #FFFFFF;
}
.prod {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 9px;
color: #333333;
}
h1 {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 20px;
color: #990000;
}
-->
</style>
</head>
<body>
<table width=\"414\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" align=\"center\">
<tr bgcolor=\"#333333\" class=\"tit\"> 
<td width=\"198\">Producto</td>
<td width=\"107\">Precio</td>
<td width=\"109\" align=\"center\">Cantidad de Unidades</td>
</tr>"

$color=array("#ffffff","#F0F0F0"); 
$contador=0
$suma=0;
foreach(
$carro as $k => $v){ 
$contador++;
$subto=$v['cantidad']*$v['precio'];
$suma=$suma+$subto;
$html.="<tr bgcolor=\"".$color[$contador&#37;2]."\" class=\"prod\"> 
<td>".$v['producto']."</td>
<
td>".$v['precio']."</td>
<
td align="center\">".$v['cantidad']."</td>
</tr>"
;

$html .=
"</table>
<div align=\"center\"><span class=\"prod\">Total de Artículos: "
.count($carro)."</span> </div><br>
<div align=\"center\"><span class=\"prod\">Total: \$"
.number_format($suma,2)."</span></div><br>
<div align=\"left\"><span class=\"prod\">
Aquí escribiremos un mensaje cualquiera, por ejemplo, cuáles son nuestras opciones de pago
</span></div>"
;
//Como queremos enviar el
//mensaje en formato html,
//colocamos las 2 cabeceras 
//que nos permitirán hacerlo 
$headers "MIME-Version: 1.0\r\n";  
$headers .= "Content-type: text/html; charset= iso-8859-1\r\n"
//Las siguientes 2 cabeceras,
//permitirán que el destinatario
//sepa a quién responder y 
//quién le ha enviado el
//mensaje
$headers .= "Reply-To: [email protected]\r\n";  
$headers .= "From: Nombre del Remitente<[email protected]>\r\n";
//En este ejemplo suponemos
//que el mail del destinatario
//lo hemos enviado desde un
//formulario con el método post,
//pero es indistinto desde donde
//se lo obtenga (consulta a la
//base de datos, almacenado en
//una variable de sesión,
//enviado por get,etc.)
mail("{$_POST['email']}","Detalle de su compra en nuestro website",$html,$headers);  
?>
Y el codigo de error que me genera es este:

"Warning: Failed to Connect in c:\apache\htdocs\sucretel\venta\mailer.php on line 82"

Ese script lo probe colocando mi dirección de correo electronico en los respectivos archivos cabeceras, pero, me genera ese error.

Lo mismo me sucede cuando quiero enviar formularios a un correo electronico.

¿Que se puede hacer en estos casos? ¿Que pasos debo seguir para que esto se ejecute correctamente? Y de necesitar algun programa ¿Cuales serian? De ante mano agradezco mucho su colaboración y la ayuda que me puedan prestar.

Saludos cordiales!
  #4 (permalink)  
Antiguo 02/08/2010, 00:36
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 1 mes
Puntos: 406
Respuesta: Ayuda urgente

El error que tienes es que no tienes instalado un servidor SMPT para enviar correos, esto es muy diferente entre windows y GNU/Linux

No te compliques instalando/configurando un servidor SMTP, utiliza PHPMailer y configuralo para utilizar algún SMPT como GMail o cualquier otro

Nota: Veo que no validas quien esta enviando el correo, así que cualquier persona mal intencionada va a poder utilizar tu formulario para enviar spam, mas vale que protejas ese formulario con un captcha o algo por el estilo, si no, mas vas a tardar en implementarlo que te bloqueen tu dominio (o en este caso te bloqueen la conexión al SMTP por enviar SPAM)

OffTopic: jojojo el mensaje numero 666!!! >.< LOL
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)

Última edición por Nemutagk; 02/08/2010 a las 00:41
  #5 (permalink)  
Antiguo 02/08/2010, 13:21
 
Fecha de Ingreso: agosto-2010
Mensajes: 3
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Ayuda urgente

Cita:
Iniciado por Nemutagk Ver Mensaje
El error que tienes es que no tienes instalado un servidor SMPT para enviar correos, esto es muy diferente entre windows y GNU/Linux

No te compliques instalando/configurando un servidor SMTP, utiliza [URL="http://phpmailer.worxware.com/"]PHPMailer [/URL] y configuralo para utilizar algún SMPT como [URL="http://phpmailer.worxware.com/index.php?pg=examplebgmail"]GMail[/URL] o cualquier otro

Nota: Veo que no validas quien esta enviando el correo, así que cualquier persona mal intencionada va a poder utilizar tu formulario para enviar spam, mas vale que protejas ese formulario con un captcha o algo por el estilo, si no, mas vas a tardar en implementarlo que te bloqueen tu dominio (o en este caso te bloqueen la conexión al SMTP por enviar SPAM)

OffTopic: jojojo el mensaje numero 666!!! >.< LOL
Gracias Nemutargk por tu respuesta, y tu aporte, verdad que con el PHPMailer se pueden lograr estas funciones. Pero tengo un pequeño inconveniente, y explico: Ya me baje el PHPMailer de su pagina oficial, e instale los archivos en la carpeta de htdocs (creo que hasta ahi voy bien) del servidor local. Bien, luego buscando info, acerca de esto... me tope con este articulo [URL="http://www.programacion.com/articulo/uso_de_la_clase_phpmailer_213"] Uso de la clase PHPMailer[/URL] Utilice el codigo de ejemplo proporcionado por la pagina, y cuando lo corri me genero este error:

Fatal error: Failed opening required 'includes/class.phpmailer.php' (include_path='.;c:\apache\php\pear') in c:\apache\htdocs\sucretel\usuarios\ejemplo.php on line 4

y he aqui el codigo:

Código PHP:
<?
  
// primero hay que incluir la clase phpmailer para poder instanciar
  //un objeto de la misma
  
require "includes/class.phpmailer.php";

  
//instanciamos un objeto de la clase phpmailer al que llamamos 
  //por ejemplo mail
  
$mail = new phpmailer();

  
//Definimos las propiedades y llamamos a los métodos 
  //correspondientes del objeto mail

  //Con PluginDir le indicamos a la clase phpmailer donde se 
  //encuentra la clase smtp que como he comentado al principio de 
  //este ejemplo va a estar en el subdirectorio includes
  
$mail->PluginDir "includes/";

  
//Con la propiedad Mailer le indicamos que vamos a usar un 
  //servidor smtp
  
$mail->Mailer "smtp";

  
//Asignamos a Host el nombre de nuestro servidor smtp
  
$mail->Host "smtp.gmail.com";

  
//Le indicamos que el servidor smtp requiere autenticación
  
$mail->SMTPAuth true;

  
//Le decimos cual es nuestro nombre de usuario y password
  
$mail->Username "*******************@gmail.com"
  
$mail->Password "**********";

  
//Indicamos cual es nuestra dirección de correo y el nombre que 
  //queremos que vea el usuario que lee nuestro correo
  
$mail->From "********************@gmail.com";
  
$mail->FromName "Claudio Martínez";

  
//el valor por defecto 10 de Timeout es un poco escaso dado que voy a usar 
  //una cuenta gratuita, por tanto lo pongo a 30  
  
$mail->Timeout=30;

  
//Indicamos cual es la dirección de destino del correo
  
$mail->AddAddress("*****************@gmail.com");

  
//Asignamos asunto y cuerpo del mensaje
  //El cuerpo del mensaje lo ponemos en formato html, haciendo 
  //que se vea en negrita
  
$mail->Subject "Prueba de phpmailer";
  
$mail->Body "<b>Mensaje de prueba mandado con phpmailer en formato html</b>";

  
//Definimos AltBody por si el destinatario del correo no admite email con formato html 
  
$mail->AltBody "Mensaje de prueba mandado con phpmailer en formato solo texto";

  
//se envia el mensaje, si no ha habido problemas 
  //la variable $exito tendra el valor true
  
$exito $mail->Send();

  
//Si el mensaje no ha podido ser enviado se realizaran 4 intentos mas como mucho 
  //para intentar enviar el mensaje, cada intento se hara 5 segundos despues 
  //del anterior, para ello se usa la funcion sleep    
  
$intentos=1
  while ((!
$exito) && ($intentos 5)) {
    
sleep(5);
         
//echo $mail->ErrorInfo;
         
$exito $mail->Send();
         
$intentos=$intentos+1;    
    
   }
 
        
   if(!
$exito)
   {
    echo 
"Problemas enviando correo electrónico a ".$valor;
    echo 
"<br/>".$mail->ErrorInfo;    
   }
   else
   {
    echo 
"Mensaje enviado correctamente";
   } 
?>

Aparte, encontre distintos temas sobre enviar correos a GMAIL usando estos scripts, aun estoy documentandome sobre eso, pero quisiera que me aclararan la duda, del porque ese error, de si esta bien la "instalación" del PHPMailer, y si es necesario algun otro programa más.
  #6 (permalink)  
Antiguo 02/08/2010, 13:46
 
Fecha de Ingreso: mayo-2010
Mensajes: 51
Antigüedad: 14 años
Puntos: 3
Respuesta: Ayuda urgente

Amigo, se me hace raro que siendo tu tésis tu error sea en la ruta de un archivo.

Los scripts de php.mailer los puedes colocar donde tú desees, en la carpeta de tu antojo.


Una vez que están ahí tus scripts (creo que son 3), los vas a llamar por medio de requires o includes a los archivos donde planeas enviar correos.

En este caso solo incluyes uno, el class.phpmailer.php pero en el ejemplo que te conseguiste viene un require que debes de adaptar de acuerdo a donde guardas dicho archivo.

Modificando eso, conseguirás enviar correos.

Saludos
  #7 (permalink)  
Antiguo 02/08/2010, 13:55
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 18 años, 7 meses
Puntos: 49
Respuesta: Ayuda urgente

Como dice luisus tienes problemas solo con una ruta, raro para ser una tesis ya!! pero bueno es solo cosa de ver si en require "includes/class.phpmailer.php";

como dice la carpeta includes tienes tu archivo class.phpmailer.php el cual claramente deben estar los demas archivo de phpmailer, te recomiendo pongas todo en la raiz mejor y hagas una prueba, ya luego te fijas por que no te va en otra ruta.

Saludos
__________________
Gokuh Salvo al mundo. PUNTO!!!!

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:45.