Usando wp_mail com anexos, mas nenhum anexo recebido

15

Eu estive olhando para vários exemplos, incluindo este .

Recebo o email sem problemas, mas não há anexos. Estou faltando o conteúdo / tipo de tipo de arquivo? Todos os exemplos que eu vi usam apenas text / html como tipo de conteúdo.

Aqui está o que eu tenho (adicionado 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
fonte
Você poderia postar algum código sobre o que você tentou?
Stephen Harris
Oi Stephen, acabou de atualizar a postagem com o código. Obrigado!
tbm

Respostas:

27

O $attachmentargumento para wp_mailpega um arquivo (ou matriz de arquivos) - mas o caminho do arquivo deve ser totalmente especificado. Por exemplo:

<?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);
?>

( veja Codex ). Parece que você $_POST['file']provavelmente não está especificando o caminho completo.

O anexo tem um caminho de arquivo , não um URL. O seguinte funcionou para mim:

$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: Eu mudei o headersatributo também. Não tenho certeza do que seu exemplo estava tentando fazer, mas isso significava que a mensagem do email não estava visível em alguns clientes de email.

Stephen Harris
fonte
Obrigado, Stephen, pelo acompanhamento ... ok $_Post['file']é realmente um URL para o arquivo e confirmei que o URL está correto. Isso é aceitável?
tbm
Não, ver a resposta atualizada :)
Stephen Harris
Isso significa que não posso mandar que eles enviem um anexo hospedado em outro lugar, por exemplo, Amazon S3? Eu estava com medo daquilo. Só estou tentando dar às pessoas a opção de enviar um PDF para o Kindle diretamente de uma página da web. De qualquer forma, vou tentar isso mais tarde e relatar.
tbm
Você pode ler o arquivo remoto e anexá-lo? Há um exemplo aqui . Exatamente como você pode fazer isso / a melhor prática seria uma pergunta para o SO.
Stephen Harris
Muito obrigado, Stephen. Tentei sua solução e funcionou. Agora ... tenho que descobrir como enviar um anexo hospedado em outro lugar. Obrigado pelo ponteiro onde procurar!
tbm