Foros del Web » Programando para Internet » PHP »

Enviar Mails desde formulario de foro

Estas en el tema de Enviar Mails desde formulario de foro en el foro de PHP en Foros del Web. Hola wenas, me gustaría saber como hacer para que cuando alguien introduzca un comentario en el foro, se mande el comentario por mail a los ...
  #1 (permalink)  
Antiguo 30/06/2009, 10:53
Avatar de Joystickoso  
Fecha de Ingreso: enero-2009
Mensajes: 127
Antigüedad: 15 años, 2 meses
Puntos: 3
Pregunta Enviar Mails desde formulario de foro

Hola wenas, me gustaría saber como hacer para que cuando alguien introduzca un comentario en el foro, se mande el comentario por mail a los demás usuarios al darle al boton enviar del formulario.
He estado investigando y ya tengo lo que necesito para enviar mails sin la funcion mail() con phpmail, etc. Pero todos los ejemplos que he visto son para mandar un mail a quien escribe o al correo que se introduce en el formulario. Y lo que yo quiero es mandar un mail a los demás usuarios para que sepan que hay escrito algo nuevo en el foro y ya de paso que lo puedan leer desde el correo.
Hay algun ejemplo que me valga para lo que quiero hacer?
Gracias y saludos!!
  #2 (permalink)  
Antiguo 30/06/2009, 11:10
 
Fecha de Ingreso: marzo-2009
Mensajes: 355
Antigüedad: 15 años
Puntos: 4
Respuesta: Enviar Mails desde formulario de foro

Primero que nada, te aseguraste de que desde tu servidor podes enviar mails y estos llegan a destino? es primordial antes de realizar lo que estas pidiendo.
  #3 (permalink)  
Antiguo 30/06/2009, 11:11
 
Fecha de Ingreso: junio-2009
Mensajes: 18
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Enviar Mails desde formulario de foro

Pero la diferencia entre lo que ya tienes y los ejemplos que has visto sería simplemente en vez de enviar solo a una direccion enviar a varios verdad? esa es la complejidad? si es asi bastaria con llamar varias veces la función que agrega el correo receptor, en el caso del phpmail sería poner en un loop la funcion $mail->AddAddress($item,$item); La lógica de obtener los correos de tu foro ya es otro tema
  #4 (permalink)  
Antiguo 30/06/2009, 11:12
Avatar de lair  
Fecha de Ingreso: enero-2009
Ubicación: header('Location: Morelia");
Mensajes: 1.052
Antigüedad: 15 años, 2 meses
Puntos: 46
Respuesta: Enviar Mails desde formulario de foro

con la funcion mail() de php puedes hacer eso, investiga algo aserca de los header para incluir mas de un destinatario.

suerte.
  #5 (permalink)  
Antiguo 01/07/2009, 09:22
Avatar de Joystickoso  
Fecha de Ingreso: enero-2009
Mensajes: 127
Antigüedad: 15 años, 2 meses
Puntos: 3
Respuesta: Enviar Mails desde formulario de foro

He probado la funcion mail() pero no funciona mas que nada por el servidor "phpnet.us" no me deja si no pago (creo). Así que probaré con el phpmailer que he leido que se puede con una cuenta de gmail. A ver si encuentro algun ejemplo de alguien que haya hecho algo parecido con el phpmailer. Seguiré probando, si consigo algo os comento a ver.
Gracias a tod@s.
  #6 (permalink)  
Antiguo 01/07/2009, 12:46
Avatar de lair  
Fecha de Ingreso: enero-2009
Ubicación: header('Location: Morelia");
Mensajes: 1.052
Antigüedad: 15 años, 2 meses
Puntos: 46
Respuesta: Enviar Mails desde formulario de foro

te paso lo que yo hice con phpmailer, espero te sirva.

Código PHP:
require_once('../vendors/mailer/class.phpmailer.php');
            
            
$mail= new PHPMailer(true);
            
            try {
                
//datos del remitente
                
$mail->From=$this->data['Salida']['dm'];
                
$mail->FromName=$this->data['Salida']['dn'];
                
//datos del destinatario
                
$mail->AddAddress($this->data['Salida']['pm'],$this->data['Salida']['pn']);
                
//asunto
                
$mail->Subject=$this->data['Salida']['as'];
                
//mensaje
                
$mail->Body=$this->data['Salida']['msg'];
                
//dato adjunto
                
$mail->Attachment('files/orden_carga.pdf');
                
                if(
$mail->Send()){
                    
$this->Session->setFlash('Las ordenes han sido enviadas');
                    
$this->redirect(array('controller'=>'salidas','action'=>'bymail'));
                }else{
                    
$this->Session->setFlash('Las ordenes no podieron ser enviadas');
                    
$this->redirect(array('controller'=>'salidas','action'=>'bymail'));
                }
            } catch (
phpmailerException $e) {
                
$this->Session->setFlash($e->errorMessage()); //Pretty error messages from PHPMailer
            
} catch (Exception $e) {
                
$this->Session->setFlash($e->getMessage()); //Boring error messages from anything else!
            

suerte y cualquier cosa estamos por aqui
  #7 (permalink)  
Antiguo 02/07/2009, 10:32
Avatar de Joystickoso  
Fecha de Ingreso: enero-2009
Mensajes: 127
Antigüedad: 15 años, 2 meses
Puntos: 3
Respuesta: Enviar Mails desde formulario de foro

Muchas gracias, a ver si lo consigo. Tamben encontré esto que no se si servirá tambien:
Código PHP:
// solucion para el error: Warning: stream_socket_enable_crypto() [streams.crypto]: this stream does not support SSL/crypto
// Instalar la extension en php5: Openssl


function cmd$str$report=true )
{
global 
$smtp;
$ret fwrite$smtp$str."\r\n" );
if( 
$report === true )
fread$smtp512 );
}



$smtp fsockopen"tcp://smtp.gmail.com"587$errno$errstr );
if( ! 
$smtp )
die( 
"Lo sentimos, pero ha ocurrido un error:" );
fread$smtp512 );
cmd"EHLO {smtp.gmail.com}" );
cmd"STARTTLS" );
stream_socket_enable_crypto$smtptrueSTREAM_CRYPTO_METHOD_TLS_CLIENT );
//stream_socket_enable_crypto( $smtp, true, STREAM_CRYPTO_METHOD_SSLv2_CLIENT );
//stream_socket_enable_crypto( $smtp, true, STREAM_CRYPTO_METHOD_SSLv3_CLIENT);
//stream_socket_enable_crypto( $smtp, true, STREAM_CRYPTO_METHOD_SSLv23_CLIENT);
cmd"EHLO {smtp.gmail.com}" );
cmd"AUTH LOGIN" );

cmdbase64_encode"nombre_tu_cuenta_gmail" ) );
cmdbase64_encode"clave_detu_cuenta_gmail" ) );
cmd"MAIL FROM: <[email protected]>" );
cmd"RCPT TO: <[email protected]>" );
cmd"DATA" );
cmd"Date: ".date("r"), false );
cmd"From: COLOCA TU NOMBRE [email protected]"false );
cmd"To: [email protected]"false );
cmd"Subject: TITULO DEL MENSAJE"."\n"false );
cmd("MENSAJE A ENVIAR AL DESTINATARIO"false );
cmd"." );
cmd"QUIT" );
fclose$smtp ); 

Última edición por Joystickoso; 02/07/2009 a las 11:28
  #8 (permalink)  
Antiguo 03/07/2009, 10:35
Avatar de Joystickoso  
Fecha de Ingreso: enero-2009
Mensajes: 127
Antigüedad: 15 años, 2 meses
Puntos: 3
Respuesta: Enviar Mails desde formulario de foro

Después de varias pruebas no lo consigo.
Me voy a explayar un poco a ver, tengo una pagina que se llama intcoment.php que es un simple formulario para actualizar el foro y poco mas todo hecho con el dreamweaver (igual es ese el problema?), la cual es:
Código PHP:
<?php require_once('Connections/comentarios.php'); ?>
<?php
session_start
();
$MM_authorizedUsers "";
$MM_donotCheckaccess "true";

// *** Restrict Access To Page: Grant or deny access to this page
function isAuthorized($strUsers$strGroups$UserName$UserGroup) { 
  
// For security, start by assuming the visitor is NOT authorized. 
  
$isValid False

  
// When a visitor has logged into this site, the Session variable MM_Username set equal to their username. 
  // Therefore, we know that a user is NOT logged in if that Session variable is blank. 
  
if (!empty($UserName)) { 
    
// Besides being logged in, you may restrict access to only certain users based on an ID established when they login. 
    // Parse the strings into arrays. 
    
$arrUsers Explode(","$strUsers); 
    
$arrGroups Explode(","$strGroups); 
    if (
in_array($UserName$arrUsers)) { 
      
$isValid true
    } 
    
// Or, you may restrict access to only certain users based on their username. 
    
if (in_array($UserGroup$arrGroups)) { 
      
$isValid true
    } 
    if ((
$strUsers == "") && true) { 
      
$isValid true
    } 
  } 
  return 
$isValid
}

$MM_restrictGoTo "nopass.php";
if (!((isset(
$_SESSION['MM_Username'])) && (isAuthorized("",$MM_authorizedUsers$_SESSION['MM_Username'], $_SESSION['MM_UserGroup'])))) {   
  
$MM_qsChar "?";
  
$MM_referrer $_SERVER['PHP_SELF'];
  if (
strpos($MM_restrictGoTo"?")) $MM_qsChar "&";
  if (isset(
$QUERY_STRING) && strlen($QUERY_STRING) > 0
  
$MM_referrer .= "?" $QUERY_STRING;
  
$MM_restrictGoTo $MM_restrictGoTo$MM_qsChar "accesscheck=" urlencode($MM_referrer);
  
header("Location: "$MM_restrictGoTo); 
  exit;
}
?>
<?php
function GetSQLValueString($theValue$theType$theDefinedValue ""$theNotDefinedValue ""
{
  
$theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue;

  switch (
$theType) {
    case 
"text":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;    
    case 
"long":
    case 
"int":
      
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case 
"double":
      
$theValue = ($theValue != "") ? "'" doubleval($theValue) . "'" "NULL";
      break;
    case 
"date":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;
    case 
"defined":
      
$theValue = ($theValue != "") ? $theDefinedValue $theNotDefinedValue;
      break;
  }
  return 
$theValue;
}

$editFormAction $_SERVER['PHP_SELF'];
if (isset(
$_SERVER['QUERY_STRING'])) {
  
$editFormAction .= "?" htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset(
$_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
  
$insertSQL sprintf("INSERT INTO comments (FIRST_NAME, SUBMIT_DATE, TIME, COMMENTS) VALUES (%s, %s, %s, %s)",
                       
GetSQLValueString($_POST['FIRST_NAME'], "text"),
                       
GetSQLValueString($_POST['SUBMIT_DATE'], "date"),
                       
GetSQLValueString($_POST['TIME'], "text"),
                       
GetSQLValueString($_POST['COMMENTS'], "text"));

  
mysql_select_db($database_comentarios$comentarios);
  
$Result1 mysql_query($insertSQL$comentarios) or die(mysql_error());

  
$insertGoTo "incomentok.php";
  if (isset(
$_SERVER['QUERY_STRING'])) {
    
$insertGoTo .= (strpos($insertGoTo'?')) ? "&" "?";
    
$insertGoTo .= $_SERVER['QUERY_STRING'];
  }
  
header(sprintf("Location: %s"$insertGoTo));
}

mysql_select_db($database_comentarios$comentarios);
$query_Recordset1 "SELECT FIRST_NAME, SUBMIT_DATE, COMMENTS, `TIME` FROM comments ORDER BY COMMENT_ID DESC";
$Recordset1 mysql_query($query_Recordset1$comentarios) or die(mysql_error());
$row_Recordset1 mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 mysql_num_rows($Recordset1);
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Introducir comentarios</title>
</head>
<body>
  <table width="1025" height="100%" border="0" cellpadding="0" cellspacing="0">
  <!--DWLayoutTable-->
  <tr>
    <td height="133" colspan="3" valign="top"><img src="imagenes/logomerino.png" width="280" height="133"></td>
    <td colspan="2" valign="top" bgcolor="#BBD6E9"><img src="imagenes/165.jpg" width="744" height="133"></td>
  </tr>
  <tr>
    <td height="10" colspan="5" valign="top"><img src="imagenes/3dazul.gif" width="1024" height="10"></td>
  </tr>
  <tr>
    <td width="131" height="479" valign="top" bgcolor="#ADB2D0"><div align="center">
        <p>&nbsp;</p>
    <td width="10" height="100%" valign="top"><img src="imagenes/barra%20vertical.png" width="120%" height="100%"></td>
    <td colspan="2" valign="top"><table width="100%" border="0" cellpadding="0" cellspacing="0" bgcolor="#ADB2D0">
        <!--DWLayoutTable-->
        <tr>
          <td width="204" height="2"></td>
          <td width="482"></td>
          <td width="184"></td>
          <td width="3"></td>
        </tr>
        <tr>
          <td height="101" colspan="3" valign="top" bgcolor="#ADB2D0"><h2 align="center"><br>
            Escribe tu comentario.</h2>
          <p align="center">Esto no es un foro p&uacute;blico asi que no hay reglas. Pero no sus paseis mucho que nos conocemos... </p></td>
          <td></td>
        </tr>
        <tr>
          <td height="100%" rowspan="2" valign="top"><!--DWLayoutEmptyCell-->&nbsp;</td>
          <td height="297" valign="top">&nbsp;
            <p>&nbsp;</p>            <form action="<?php echo $editFormAction?>" method="POST" name="form1">
              <table align="center">
                <tr valign="baseline">
                  <td nowrap align="right"><strong>Nombre:</strong></td>
                  <td><input type="text" name="FIRST_NAME" value="Introduce tu nombre o apodo" size="32">
                  <input type="hidden" name="SUBMIT_DATE" value="<?php echo date('d-m-Y'); ?>" />
                  <input type="hidden" name="TIME" value="<?php echo gmdate('H:i:s'time()+(7200)); ?>" /></td>
                </tr>
                <tr valign="baseline">
                  <td nowrap align="right" valign="top"><strong>Comentario:</strong></td>
                  <td><textarea name="COMMENTS" cols="50" rows="5">Comenta, comenta...</textarea>
                  </td>
                </tr>
                <tr valign="baseline">
                  <td nowrap align="right">&nbsp;</td>
                  <td><input name="Enviar" type="submit" value="Agregar Comentario"></td>
                </tr>
              </table>
              
                        <input type="hidden" name="MM_insert" value="form1">
            </form>            <p>&nbsp;</p></td>
          </div></td>
          <td></td>
        </tr>
        </table></td>
</body>
</html>
<?php
mysql_free_result
($Recordset1);
?>
Como no puedo ponerlo todo he quitado paja al archivo (algua tabla y alguna capa y tal)
Bueno el caso es que si meto lo de require_once('class.phpmailer.php'); en la parte de arriba como he leido que debo hacer la pagina no carga, tengo que ponerlo después de la parte de restringir acceso a la pagina, hasta ahí bien.
Y no puedo meter ninguna linea de las de $mail->From= porque tampoco carga la pagina se queda en blanco.
Entonces supongo que lo que tengo que hacer es guardar todo ese cogigo en otro archivo como por ejemplo mailforo.php y que se ejecute desde intcoment.php.
He intentado hacerlo con include y con require y no me funciona, asi que mis preguntas serian: que hago mal? y hay alguna forma de ejecutar o llamar al archivo mailforo.php desde el formulario?
Perdonar mi lenguaje que soy bastante novato seguro que he dicho muchas barbaridades, je je.
Saludos y gracias por adelantado.
ChuChi
  #9 (permalink)  
Antiguo 12/07/2009, 16:23
Avatar de Joystickoso  
Fecha de Ingreso: enero-2009
Mensajes: 127
Antigüedad: 15 años, 2 meses
Puntos: 3
Respuesta: Enviar Mails desde formulario de foro

Bueno chicos, lo he conseguido. No me cargaba la pagina porque no se conectaba con el servidor smtp y porque el class.phpmailer.php que tenia no me valia.
Lo he cambiado por otro que venia ya configurado para gmail y como la seda.
Ah! y no se me conectaba porque el puerto del smtp que tenia puesto era 25 y tenia que poner el 465.
Y la cosa ha quedado asi:
Código PHP:
ini_set('display_errors'1); //esto para que me dijera que error me daba
require_once ('class.phpmailer.php');
require_once (
'class.smtp.php');

$mail = new PHPMailer(true);
$mail->IsSMTP();
$mail->SMTPAuth true;
$mail->Mailer "smtp";
$mail->Timeout=30;
$mail->SMTPSecure "ssl";
$mail->Host "smtp.gmail.com";
$mail->Port 465;
$mail->Username "mail";
$mail->Password "contraseña";
$mail->From "nombre de host";
$mail->FromName "remitente del mail";
$mail->Subject "asunto";
$mail->Body "Prueba de mails";
$mail->AddAddress("mail de destino");
$mail->IsHTML(true);
$exito=$mail->Send();

if(!
$exito) {
  echo 
"Error: " $mail->ErrorInfo;
} else {
  echo 
"Mensaje enviado correctamente";

Si alguien necesita el ultimo class.phpmailer.php que he puesto que me lo diga y se lo mando.
Salud'Os!!
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 04:49.