Usando wp_mail con archivos adjuntos pero no recibió archivos adjuntos


15

He estado mirando múltiples ejemplos, incluido este .

Recibo el correo electrónico sin problemas pero no hay archivos adjuntos. ¿Me falta el contenido / tipo de tipo de archivo? Todos los ejemplos que he visto usan solo texto / html como tipo de contenido.

Esto es lo que tengo (agregado a pedido 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 = 'Send to Kindle';
$msg = 'Yay! Your book has <a href="http://yahoo.com">arrived</a>';

$mail_attachment = array( $attachment );
wp_mail($to, $subject, $msg, $headers, $mail_attachment);
echo 'Email sent';
} else {
echo 'Email not sent';
}

¿Podría publicar algún código con respecto a lo que ha intentado?
Stephen Harris

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

Respuestas:


27

El $attachmentargumento para wp_mailtoma un archivo (o una matriz de archivos), pero la ruta del archivo debe especificarse por completo. Por ejemplo:

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

( Ver Codex ). Parece que $_POST['file']probablemente no esté especificando la ruta completa.

El archivo adjunto tiene una ruta de archivo , no una url. Lo siguiente funcionó para mí:

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

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

$subject = 'Send to Kindle';

$msg = 'Yay! Your book has <a href="http://yahoo.com">arrived</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 headersatributo. No estoy completamente seguro de lo que su ejemplo intentaba hacer, pero significaba que el mensaje del correo electrónico no era visible en algunos clientes de correo electrónico.


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

No, ver respuesta actualizada :)
Stephen Harris

Eso significa que no puedo hacer que envíen un archivo adjunto alojado en otro lugar, por ejemplo, Amazon S3. Tenía miedo de eso. Solo estoy tratando de darles a las personas la opción de enviar un PDF a Kindle directamente desde una página web. De todos modos, intentaré esto más tarde e informaré.
tbm

¿Podrías leer el archivo remoto y luego adjuntarlo? Hay un ejemplo aquí . Exactamente cómo puede hacerlo / mejor práctica sería una pregunta para SO.
Stephen Harris el

Muchas gracias Stephen, probé tu solución y funcionó. Ahora ... tengo que descubrir cómo enviar archivos adjuntos alojados en otro lugar. Gracias por el puntero donde mirar!
tbm
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.