Usando wp_mail con archivos adjuntos pero no se reciben los adjuntos

26 abr 2012, 06:59:07
Vistas: 57.6K
Votos: 16

He estado revisando múltiples ejemplos incluyendo este ejemplo.

Recibo el correo sin problemas pero no hay archivos adjuntos. ¿Me estoy perdiendo el content/type del tipo de archivo? Todos los ejemplos que he visto utilizan solamente text/html como tipo de contenido.

Esto es lo que tengo (agregado a petición de Stephen)

if( isset( $_POST['to'] ) && isset( $_POST['from'] ) ) {
global $wpdb;

$to = $_POST['to'];
$from = $_POST['from']; 
$name = get_bloginfo('name');
$attachment = $_POST['file'];
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: multipart/mixed; charset=iso-8859-1' . "\r\n";

$headers .= 'From: ' . $name . ' <' . $from . '>' . "\r\n";   
$subject = 'Enviar a Kindle';
$msg = '¡Genial! Tu libro ha <a href="http://yahoo.com">llegado</a>';

$mail_attachment = array( $attachment );
wp_mail($to, $subject, $msg, $headers, $mail_attachment);
echo 'Correo enviado';
} else {
echo 'Correo no enviado';
}
2
Comentarios

¿Podrías compartir algún código sobre lo que has intentado?

Stephen Harris Stephen Harris
26 abr 2012 10:49:41

Hola Stephen, acabo de actualizar la publicación con el código. ¡Gracias!

tbm tbm
26 abr 2012 21:31:15
Todas las respuestas a la pregunta 1
5
31

El argumento $attachment para wp_mail acepta un archivo (o array de archivos) - pero la ruta del archivo debe estar completamente especificada. Por ejemplo:

<?php
   $attachments = array(WP_CONTENT_DIR . '/uploads/file_to_attach.zip');
   $headers = 'From: Mi Nombre <myname@mydomain.com>' . "\r\n";
   wp_mail('test@test.com', 'asunto', 'mensaje', $headers, $attachments);
?>

(ver Codex). Parece que tu $_POST['file'] probablemente no especifica la ruta completa.

El adjunto debe ser una ruta de archivo, no una URL. Lo siguiente funcionó para mí:

$to = $_POST['to'];
$from = $_POST['from']; 
$name = get_bloginfo('name');

$headers = 'From: Mi Nombre <myname@mydomain.com>' . "\r\n";

$subject = 'Enviar a Kindle';

$msg = '¡Genial! Tu libro ha <a href="http://yahoo.com">llegado</a>';

$mail_attachment = array(WP_CONTENT_DIR . '/uploads/2012/03/image.png');   

wp_mail($to, $subject, $msg, $headers, $mail_attachment);

Nota: También cambié el atributo headers. No estoy completamente seguro de lo que intentaba hacer tu ejemplo, pero hacía que el mensaje del correo no fuera visible en algunos clientes de email.

27 abr 2012 03:20:36
Comentarios

Gracias Stephen por seguir adelante... ok $_Post['file'] es en realidad una URL al archivo y he confirmado que la URL es correcta. ¿Es eso aceptable?

tbm tbm
27 abr 2012 06:40:50

No, mira la respuesta actualizada :)

Stephen Harris Stephen Harris
27 abr 2012 13:46:09

¿Eso significa que no puedo permitir que envíen un adjunto que esté alojado en otro lugar, por ejemplo Amazon S3? Temía que fuera así. Solo estoy intentando dar a la gente la opción de enviar un PDF a Kindle directamente desde una página web. De todos modos, probaré esto más tarde y reportaré cómo me fue.

tbm tbm
27 abr 2012 15:02:13

¿Podrías leer el archivo remoto y luego adjuntarlo? Hay un ejemplo aquí. Exactamente cómo puedes hacerlo / las mejores prácticas sería una pregunta para SO.

Stephen Harris Stephen Harris
27 abr 2012 15:17:14

Muchas gracias Stephen, probé tu solución y funcionó. Ahora... tengo que averiguar cómo enviar un adjunto alojado en otro lugar. ¡Gracias por la pista sobre dónde buscar!

tbm tbm
28 abr 2012 07:56:13