Autor Tema: automatizar el envío de un email cada vez que se publique un post en blog  (Leído 4816 veces)

anarubia

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 36
    • Ver Perfil
Hola he creado , un archivo procesar.php y verificar.php para conectar los subscriptores a la base de datos mysql. Me funciona el envio de email y la verificacion al pulsar el enlace de verificacion de email pues el estado en la base de datos que le puse por defecto desactivado le cambie activado. Ahora lo que quiero hacer es cada vez que publique una entrada en mi blog enviarsela por correo con un enlace para darse de baja. No se como hacer la funcion con php para que se envie cada vez que publique una nueva entrada en mi blog. este el codigo que tengo en procesar.php

Código: [Seleccionar]
<?php
require("conexion.php");
if(isset(
$_POST['usuario']) and isset($_POST['email'])){
$usuario=$_POST['usuario'];
$email=$_POST['email'];
$conexion=conectarse();

$sql='SELECT * FROM inscripcion WHERE email="'.$email.'"';

$resultado=$conexion->query($sql);


if(
$resultado->num_rows>0){

?>
<script type="text/javascript">
alert("El Email ya existe,introduce otro");
</script>
    <?php


}else{
$sql='INSERT INTO inscripcion(usuario, email,estado)values ("'.$usuario.'","'.$email.'","desactivado")';

$resultado=$conexion->query($sql);
if($resultado){
?>
<script type="text/javascript">
alert("Usuario Registrado. Recibirás un email de verificación en tu correo");
</script>
<?php
$para=$_POST['email'];
$asunto="Confirmación de Subscripción al Blog de Ana Castro López";
$mensaje="<html lang='es'>
         <head>
         <title>Link de Activación de subscripción al Blog de Ana Castro López</title>
         <meta charset='UTF-8'/>
         </head>
         <body>
         Gracias por subscribirte a mi Blog. Haz click en el siguiente enlace para confirmar la subscripción
         <a href=http://anacastrolopez.es/verificar.php?email=
$email>Activar</a>
         </body>
         </html>"
;

            
$cabeceras="MIME-Version: 1.0" "\r\n";
            
$cabeceras.= "Content-type:text/html;charset=UTF-8" "\r\n";

            
$cabeceras.=" From: <anachanelblanc@gmail.com" ."\r\n";

            
mail($para,$asunto,$mensaje,$cabeceras);
« Última modificación: 09 de Noviembre 2015, 08:34 por César Krall »

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Re:automatizar el envío de un email cada vez que se publique un post en blog
« Respuesta #1 en: 09 de Noviembre 2015, 08:40 »
Hola Ana!

Por favor para pegar código hazlo como se explica en https://www.aprenderaprogramar.com/foros/index.php?topic=1460.0

Te indico una idea de cómo resolverlo:

Cuando publicas una entrada en el blog (por ejemplo con WordPress o con Joomla) cuando pulsas el botón publicar se dispara una función, supongamos que se llama publishEntry.

Una vez se ejecuta esa función, en la base de datos se guarda en una tabla concreta una línea con los datos de la entrada que acabas de publicar. En esa tabla existirá un id que es el identificador únicod de las entradas de la tabla junto a otros datos (como título de la entrada, contenido de la entrada, etc.). La última entrada publicada será la que tenga el id más alto.

Podría plantearse de varias maneras:

Automatizadamente


Buscarías la función donde se insertan las entradas en la base de datos y al final de esa función añadirías un fragmento de código donde harías una consulta para extraer los datos de la fila de la base de datos con id más grande y enviar el contenido adecuado por email.

La captura del último id puede hacerse de varias maneras, por ejemplo

SELECT * from nombreTable WHERE id = (SELECT MAX(ID) FROM nombreTable)

SELECT * from nombreTable ORDER BY ID DESC LIMIT 1


Manualmente

Crearías una función en un archivo php para realizar el envío de correos, la consulta sería igual pero el envío en vez de hacerlo automáticamente cuando se publica un post lo harías tú manualmente invocando una url o pulsando un botón creado específicamente.

Saludos!
Responsable de departamento de producción aprenderaprogramar.com

anarubia

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 36
    • Ver Perfil
Re:automatizar el envío de un email cada vez que se publique un post en blog
« Respuesta #2 en: 09 de Noviembre 2015, 10:49 »
Hola Cesar gracias por responderme. Aprendo mucho en este foro con tus explicaciones. En la tabla de datos por defecto el usuario lo tengo como desactivado y cuando pincha el link que le envio en el email de confirmación cambia Activado. Ahora cada vez que publico algo quiero que se dispare una función que envie un email con la publicación a todos los usuarios con estado activado. Lo que pretendo es que me envie la publicación a cada correo, no que en el correo por ejemplo de x le aparezca también el de y y el de j. Este es el código que he hecho para esta función, me podrías decir si tengo algo mal en el código. Gracias de antemano.
Código: [Seleccionar]
[code]
<?php
require('conexion.php');
function 
nueva_publicacion($post_id){
$conexion=conectarse();
$resultado=$conexion->query('SELECT email FROM inscripcion WHERE estado="activado" ');
      if($resultado->num_rows>0){
       while($row=$resultado->fetch_assoc()){ 
                $para=$row['email'];
                $post=get_post($post_id);
                $author get_userdata($post->post_author);
                $mensaje="<html lang='es'>
                          <head>
                          <title>"
.$title->display_title." </title>
                          <meta charset='UTF-8'/>
                          </head>
                          <body><h2>"
.$post->post_title." </h2>".$author->display_name."&nbsp;".$post->post_content;
                $menaje.="</body><footer><p><a href='http:http://localhost:8888/prueba/baja.php?email=$email'>Para borrar tu subscripcion pincha aqui</a></p>";
        $mensaje.="</footer></html>"       
               

            
$cabeceras="MIME-Version: 1.0" "\r\n";
            
$cabeceras.= "Content-type:text/html;charset=UTF-8" "\r\n";

            
$cabeceras.=" From: <anachanelblanc@gmail.com>" ."\r\n";
            
$cabeceras.= "CCO: anachanelblanc@gmail.com""\r\n";
           
          
mail($para,$asunto,$mensaje,$cabeceras);
 } 
 } 
 }         
add_action('publish_post''nueva_publicacion');

[/code]

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Re:automatizar el envío de un email cada vez que se publique un post en blog
« Respuesta #3 en: 11 de Noviembre 2015, 08:16 »
Hola!

Parece que tienes algún error como $menaje.="</body><footer><p><

pero debería ser $mensaje.="</body><footer><p><

Es recomendable hacer pruebas del código por ejemplo créate un usuario supón que tiene id=455, escribe una condición de modo que solo se le envíe el email a ese usuario por ejemplo SELECT email FROM inscripcion WHERE estado="activado AND id=455

Pruébalo todo y cuando lo tengas probado quitas el AND para que comience a enviarse al resto de usuarios.

Otra cosa que deberías pensar es el número de usuarios que tienes. Si por ejemplo tienes 30 o 40 usuarios no hay problema en usar un bucle y enviar un mail a cada uno, pero si tienes 300 o 400 ó mas será más eficiente mandar un solo mail y poner los destinatarios como destinatarios ocultos (con copia oculta, BCC). Repetir el envío del mismo mail cientos de veces además de ser ineficiente te puede generar problemas, por ejemplo que te encuentres con limitaciones en tu servidor y que éste rechace el envío.

Si no quieres que los destinatarios vean los correos de los demás, te puedes poner a tí misma (la administración de la página web) y al resto de destinatarios como BCC (copia oculta).

Saludos!
Responsable de departamento de producción aprenderaprogramar.com

anarubia

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 36
    • Ver Perfil
Re:automatizar el envío de un email cada vez que se publique un post en blog
« Respuesta #4 en: 11 de Noviembre 2015, 10:50 »
hola César, muchas gracias por decirme donde tenía un error y tu explicación.Haré las pruebas que me dices, gracias, que tengas una feliz semana. Saludos

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".