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';
}
tbm
fuente
¿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 <[email protected]>' . "\r\n";
   wp_mail('[email protected]', '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 <[email protected]>' . "\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.

Stephen Harris
fuente
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