Foros del Web » Programando para Internet » PHP »

Enviar correos personalizados

Estas en el tema de Enviar correos personalizados en el foro de PHP en Foros del Web. Hola amigos del forosdelweb.com! No tengo mucho que empece con el tema de la programación y pues apenas estoy aprendiendo. Y la verdad este foro ...
  #1 (permalink)  
Antiguo 22/01/2013, 22:20
Avatar de jinseikan  
Fecha de Ingreso: enero-2013
Mensajes: 5
Antigüedad: 11 años, 3 meses
Puntos: 0
Pregunta Enviar correos personalizados

Hola amigos del forosdelweb.com!

No tengo mucho que empece con el tema de la programación y pues apenas estoy aprendiendo. Y la verdad este foro ha sido de gran ayuda para ir mejorando.

Pero ahora me he atorado con un script para enviar correos personalizados.

Lo que quiero lograr es que por medio de un formulario se pueda enviar un correo a diferentes personas que tengo dadas de alta en una base de datos. Una vez que les envía el correo quiero que por medio de una etiqueta [[nombre]] escrito en el <textarea> que está dentro del <Form>, les muestre el nombre asociado al correo de la base de datos. Ejemplo: Hola [[nombre]] se trasforme en Hola Pedro, una vez enviado.

El código que tengo hasta el momento es el siguiente:

Este el formulario que recoge la información

Código HTML:
<form method=post name=f1>

<table width="700" >

<tr>
	<td>Nombre:</td>
	<td><input class="textbox" type=text name=name></td>
</tr>
<tr>
	<td>Email:</td>
	<td><input class="textbox" type=text name=email size=50></td>
</tr>
<tr>
	<td>Asunto:</td>
	<td><input class="textbox" type=text name=sub size=50></td>
</tr>
<tr><td></td></tr>
<tr>
	<td>Mensaje:</td>
	<td><textarea class="textbox4" name=mensaje style="width:575px; height:300px"></textarea></td>
</tr>
<tr><td>&nbsp;</td></tr>
	<tr><td>&nbsp;</td>
	<td><input class='button' type=submit name=s1 value='Enviar'></td>
</tr>
</table>

</form> 

A continuación el código que se encarga de recogerla y enviarla a los diferentes destinatarios:

Código PHP:
<?php require_once("bd.php");
   

if(isset(
$_POST[s1]))
{
    
$q1 "select * from Miembros";
    
$r1 mysql_query($q1) or die(mysql_error());
    
    
            
    while(
$a1 mysql_fetch_array($r1))
    {
            
        
$name $a1['mem_name'];
        
$_POST['MyMessage'] = str_replace("[[nombre]]"$name$_POST['MyMessage']);
    
                            
        
$to $a1[mem_email];
        
$subject $_POST[sub];
        
$message $_POST['Mensaje'];
        
$headers "MIME-Version: 1.0\n"
        
$headers .= "Content-type: text/plain; charset=iso-8859-1\n";
        
$headers .= "Content-Transfer-Encoding: 8bit\n";
        
$headers .= "From: $_POST[name] <$_POST[email]>\n";         
        
$headers .= "X-Mailer: PHP/" phpversion()."\n";
        
mail($to$subject$message$headers);
        

        
$i++;
    }

    
$error "<p style=\"color:red;\">$i mensajes fueron enviados</p>";
}

?>

He logrado hasta el momento enviar bien toda la información recabada desde el <form> a las diferentes correos electrónicos que tengo en la base de datos, pero cuando uso la etiqueta [[nombre]] en el <textarea> solo se trasforma en el primer nombre que tengo dado de alta en la base de datos.

"[email protected] / Primer nombre", "[email protected] / Primer nombre" en vez de que sea "[email protected] / Primer nombre", "[email protected] / Segundo nombre" y así sucesivamente.


¿Qué estaré omitiendo, o equivocándome?


Espero me puedan ayudar con este problema

Gracias de antemano por sus consejos
  #2 (permalink)  
Antiguo 22/01/2013, 22:41
 
Fecha de Ingreso: enero-2011
Mensajes: 94
Antigüedad: 13 años, 3 meses
Puntos: 7
Respuesta: Enviar correos personalizados

Creo que tienes un error en esta linea


Código PHP:
Ver original
  1. $_POST['MyMessage'] = str_replace("[[nombre]]", $name, $_POST['MyMessage']);


¿Porque al nombre le pones doble corchete?

Código PHP:
Ver original
  1. $_POST['MyMessage'] = str_replace("['nombre']", $name, $_POST['MyMessage']);
  #3 (permalink)  
Antiguo 22/01/2013, 23:10
Avatar de jinseikan  
Fecha de Ingreso: enero-2013
Mensajes: 5
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Enviar correos personalizados

Hola netyer!

Le pongo doble corchete por nada en especial. Es solo para que cuando alguien utilice el script y quiera incluir el nombre del miembro, en cualquier parte del mensaje que introduce en el <textarea> dentro del <form>, pueda hacerlo de manera sencilla utilizando la estiqueta [[nombre]].

Con el str_replace le digo que cada vez que encuentre [[nombre]] en el cuerpo del mensaje lo remplace por el nombre del miembro ($name). Y a funcionado hasta cierto punto ya que si lo cambia por un nombre, pero solo por el primero de la base de datos, repitiéndose el mismo en todos los demás correos electrónicos enviados.

Y ahorita revisando el código vi que me equivoque a la hora de ponerlo en la pregunta. En vez de:

Código PHP:
$name $a1['mem_name']; 
        
$_POST['MyMessage'] = str_replace("[[nombre]]"$name$_POST['MyMessage']); 

es:


Código PHP:
$name $a1['mem_name']; 
        
$_POST['mensaje'] = str_replace("[[nombre]]"$name$_POST['mensaje']); 
  #4 (permalink)  
Antiguo 23/01/2013, 14:09
Avatar de jinseikan  
Fecha de Ingreso: enero-2013
Mensajes: 5
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Enviar correos personalizados

Hola Buenas Tardes!

Sigo intentando como resolver el problema de que solo me toma el primer nombre de la base de datos, pero apesar de estar cambiando diferentes variables no he podido acertar.

Si pongo la variable $name al lado de $message:

Código PHP:
$to $a1[mem_email];
        
$subject $_POST[sub];
        
$message $name;
        
$headers "MIME-Version: 1.0\n"
        
$headers .= "Content-type: text/plain; charset=iso-8859-1\n"

Si envia los correos con los diferentes nombres, pero cuando uso la etiqueta [[nombre]] desde el <form> solo lo remplaza por el primero. ¿Por qué sucede esto? Si esa variable también esta dentro del "while".

Si sirve, para ayudarme a resolver este problema, incluyo también los campos de la base de datos:

Código:
DROP TABLE IF EXISTS Miembros;
CREATE TABLE Miembros (
  mem_id int(10) NOT NULL auto_increment,  
  mem_name varchar(150) NOT NULL default '',
  mem_email varchar(150) NOT NULL default '',
  mem_news char(1) NOT NULL default 'y',
  PRIMARY KEY  (mem_id)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;

Si alguien me puede ayudar se lo agradeceria infinitamente.

Etiquetas: correos, formulario, mysql, personalizados, select, sql
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 09:16.