Verwenden von wp_mail mit Anhängen, aber ohne empfangene Anhänge

14

Ich habe mir mehrere Beispiele angesehen, darunter dieses .

Ich bekomme die E-Mail kein Problem, aber es gibt keine Anhänge. Fehlt mir der Inhalt / Typ des Dateityps? Alle Beispiele, die ich gesehen habe, verwenden nur Text / HTML als Inhaltstyp.

Folgendes habe ich (auf Stephens Bitte hinzugefügt)

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
quelle
Könnten Sie einen Code zu dem veröffentlichen, was Sie versucht haben?
Stephen Harris
Hallo Stephen, habe gerade den Beitrag mit dem Code aktualisiert. Danke!
TBB

Antworten:

26

Das $attachmentArgument für wp_mailnimmt eine Datei (oder ein Array von Dateien) - der Dateipfad muss jedoch vollständig angegeben werden. Zum Beispiel:

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

( siehe Codex ). Es scheint, dass Sie $_POST['file']wahrscheinlich nicht den vollständigen Pfad angeben.

Der Anhang muss einen Dateipfad und keine URL enthalten. Folgendes hat bei mir funktioniert:

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

Hinweis: Ich habe auch das headersAttribut geändert . Ich bin nicht ganz sicher, was Ihr Beispiel versucht hat, aber es bedeutete, dass die Nachricht der E-Mail auf einigen E-Mail-Clients nicht sichtbar war.

Stephen Harris
quelle
Vielen Dank, Stephen, für das Follow-up ... ok $_Post['file']ist eigentlich eine URL zu der Datei und ich habe bestätigt, dass die URL korrekt ist. Ist das akzeptabel?
TBB
Nein, siehe aktualisierte Antwort :)
Stephen Harris
Das heißt, ich kann nicht zulassen, dass sie einen Anhang senden, der an anderer Stelle gehostet wird, z. B. Amazon S3? Ich hatte Angst davor. Ich versuche nur, den Leuten die Möglichkeit zu geben, ein PDF direkt von einer Webseite per E-Mail an den Kindle zu senden. Wie auch immer, ich werde es später versuchen und mich zurückmelden.
TBB
Sie könnten die entfernte Datei lesen und dann anhängen? Hier gibt es ein Beispiel . Genau wie Sie es tun können / Best Practice wäre eine Frage für SO.
Stephen Harris
Vielen Dank Stephen, ich habe deine Lösung ausprobiert und es hat funktioniert. Jetzt ... muss ich herausfinden, wie ich an anderer Stelle gehostete Anhänge senden kann. Vielen Dank für den Hinweis, wo Sie suchen müssen!
TBB