Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Enviar emails con PHP

8 de noviembre de 2015

Hola , estoy intentando conectarme a la base de datos con PHP, para que, cada vez que se publique un nuevo post, envíe un email con la publicación a los usuarios registrados en la base de datos, a los que tengan el estado activo.

La parte confirmación de email me funciona: he puesto que por defecto el usuario tenga el estado desactivado y al confirmar el email pase a activado. Lo que no funciona es esta parte, la de enviar por correo a los usuarios activos cada vez que se publique una nueva entrada. Este el código que tengo. No tengo muy claro si tengo que poner un implode(), o donde tengo el error. ¿donde tengo mal el código? gracias de antemano

<?php
require('conexion.php');
 
function nueva_publicacion($post_id) {
  $email=$_POST['email'];
  $conexion=conectarse();
  $resultado=$conexion->query('SELECT email FROM inscripcion WHERE estado="activado" ');
 
  if ($resultado->num_rows>0) {
    $para=$_POST['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;
    $mensaje.="<body><p>".$text."</p>";
    $menaje.="</body> </html>";
 
    $cabeceras="MIME-Version: 1.0" . "\r\n";
    $cabeceras.= "Content-type:text/html;charset=UTF-8" . "\r\n";
 
    $cabeceras.=" From: <[email protected]>" ."\r\n";
    $cabeceras.= "CCO: [email protected]". "\r\n";
 
    mail($para,$asunto,$mensaje,$cabeceras);
  }
}
 
add_action('publish_post', 'nueva_publicacion');

Respuestas

#1

El problema que veo a este código es que parece que está sin terminar. Haces una consulta a la base de datos para saber a qué usuarios tienes que enviarles el email ... pero luego envias un único email al usuario cuyo email se guarda en esta variable $para = $_POST['email'];

Lo que te falta es un for() o while() para iterar por todos los resultados que te devuelve la consulta a la base de datos.

@javiereguiluz

8 noviembre 2015, 15:16
#2

Hola Javier,gracias, por decirme lo que estoy haciendo mal. Saludos

@_analeblanc

8 noviembre 2015, 16:10
#3

Cuando escribas el nuevo código, si tienes culaquier problema, ya sabes donde estamos. Saludos!

@javiereguiluz

8 noviembre 2015, 16:14
#4

Buenos días @javier, ahora me da un error:

Call to undefined function add_action () en /Applications/MAMP/htdocs/...

Pero debe ser porque add_action() es una acción definida de WordPress y solo funciona dentro de sus archivos y yo estoy haciendo pruebas en un servidor local. Yo no soy programadora y tengo bastantes errores. Me podías echar un vistazo al nuevo código que he escrito y decirme si está bien definido el bucle y la variable $para. Gracias de antemano

<?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: <[email protected]>" ."\r\n";
            $cabeceras.= "CCO: [email protected]". "\r\n";
 
          mail($para,$asunto,$mensaje,$cabeceras);
 } 
 } 
 }         
add_action('publish_post', 'nueva_publicacion');

@_analeblanc

9 noviembre 2015, 12:06
#5

El nuevo código PHP lo veo bien. Ahora solo te faltaría poner este código en el lugar que WordPRess espera para que todo te funcione bien.

Por otra parte, me gustaría comentarte que existe un plugin para WordPress llamado Post Notification by Email que hace exactamente lo que quieres hacer, es gratuito y según las votaciones de la gente, funciona muy bien.

@javiereguiluz

9 noviembre 2015, 12:21
#6

Gracias @javier por la información, prefiero hacerlo así sin utilizar ningún plugin para aprender código php. Gracias, que tengas un buen comienzo de semana. Saludos!

@_analeblanc

9 noviembre 2015, 12:35
#7

Hola @_analeblanc puedes usar la clase phpmailer para que tu correos eviten caer en el spam del visitante. En wordpres se encuentra ubicada en wp-includes

@saulmoralespa

24 noviembre 2015, 21:26
#8

Gracias Saul. Necesito ayuda para colocarlos correctamente en el árbol de directorios y archivos de wordpress. los archivos que tengo es el conexion.php, bajas.php, procesar.php, verificar.php(envia un email de confirmacion) y este archivo he he puesto con la action publish_post, con la finalidad de que envie un email con la publicación nueva. los coloco todos dentro wp-content/themes/mi tema y este ultimo dentro del archivo functions.php de wordpres? o como hago. Gracias

@_analeblanc

25 noviembre 2015, 22:24
#9

Hola @saulmoralespa estuve probando a hacer diversas acciones de envíos masivos con wordpress y al final me bloquearon varias cuentas y me dió bastante problemas el envío masivo de correos y he optado por usar un servicio profesional de envío de newsletters mailify. Sabes? tú que parece que pilotas de wordpress si hay alguna forma de integrarlo con wordpress?

Muchas gracias

@isocialwebseo

17 mayo 2016, 13:29