it-swarm.com.de

Wie erstelle ich eine CSV im laufenden Betrieb und sende sie als Anhang mit wp_mail?

Ich versuche, eine CSV-Datei aus einem Formular zu erstellen und diese Datei automatisch per E-Mail an einen bestimmten Benutzer zu senden. Die E-Mail selbst sendet einwandfrei, aber ich kann den Anhang nicht durchgehen lassen. Ist es möglich, einen Anhang zu erstellen, ohne die Datei zuerst auf dem Server zu speichern?

function create_csv() {
    $fd = fopen('php://temp/', 'w');
    if($fd === FALSE) {
        die('Failed to open temporary file');
    }

    $records = array( array('dummy', 'data', 'found', 'here') );

    fputcsv($fd, $headers);
    foreach($records as $record) {
        fputcsv($fd, $record);
    }

    rewind($fd);
    $csv = stream_get_contents($fd);
    fclose($fd);
    return $csv;
}

$to = $email;
$subject = 'Subject';
$message = 'Message';
$headers = 'From: ' . $other_email;
$attachment = create_csv();

$sent = wp_mail($to, $subject, $message, $headers, $attachment);
1
harvestthemoon

Dies liegt daran, dass wp_mail erwartet, dass der Anhang ein Dateiname (Dateipfad) ist, den attach und senden kann. Sie geben eine Zeichenfolge ein, die den Inhalt der Datei enthält:

function create_csv() {

    $filepath = '/path/to/the/file.csv';

    $fd = fopen($filepath, 'w');
    if($fd === FALSE) {
        die('Failed to open temporary file');
    }

    $records = array( array('dummy', 'data', 'found', 'here') );

    fputcsv($fd, $headers);
    foreach($records as $record) {
        fputcsv($fd, $record);
    }

    rewind($fd);
    fclose($fd);
    return $filepath;
}

wird dein Problem lösen. Siehe http://codex.wordpress.org/Function_Reference/wp_mail

2
Saurabh Shukla