Logo Logo
Nazaj na seznam
WEB

Kako s PHP poslati CSV datoteko kot prilogo po e-pošti

14. 03. 2026
Kako s PHP poslati CSV datoteko kot prilogo po e-pošti

Včasih ne želimo, da se podatki le prenesejo na računalnik, ampak jih želimo avtomatsko poslati na določen e-poštni naslov (npr. dnevno poročilo o prodaji ali seznam novih naročnikov). Spodaj je skript, ki podatke iz baze pretvori v CSV in jih pošlje kot prilogo.

Kako deluje skript?

Namesto da bi datoteko shranili na disk, jo PHP ustvari v pomnilniku, jo zakodira v Base64 format (ki je standard za e-poštne priloge) in jo pripne k sporočilu z ustreznimi mejami (boundaries).

<?php
// Podatki za bazo
$streznik = "localhost";
$uporabnik = "root";
$geslo = "";
$baza = "ime_tvoje_baze";

$povezava = new mysqli($streznik, $uporabnik, $geslo, $baza);

// 1. Priprava CSV vsebine v spremenljivko
$csv_vsebina = "ID,Ime,Povezava\n"; // Glava
$sql = "SELECT id, ime, povezava FROM imena";
$result = $povezava->query($sql);

while ($row = $result->fetch_assoc()) {
    $csv_vsebina .= $row['id'] . ',"' . $row['ime'] . '","' . $row['povezava'] . ""\n";
}

// 2. Nastavitve e-pošte
$to = "prejemnik@domena.si";
$subject = "Dnevni izvoz podatkov";
$filename = "podatki_" . date("Y-m-d") . ".csv";
$encoded_content = chunk_split(base64_encode($csv_vsebina));
$boundary = md5(time());

// 3. Glave (Headers) za e-pošto s prilogo
$headers = "From: sistem@tvoja-domena.si\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: multipart/mixed; boundary="" . $boundary . ""\r\n";

// 4. Telo sporočila
$message = "--" . $boundary . "\r\n";
$message .= "Content-Type: text/plain; charset="utf-8"\r\n";
$message .= "Content-Transfer-Encoding: 8bit\r\n\r\n";
$message .= "V prilogi vam pošiljamo izvožene podatke v CSV formatu.\r\n\r\n";

// 5. Dodajanje priloge
$message .= "--" . $boundary . "\r\n";
$message .= "Content-Type: text/csv; name="" . $filename . ""\r\n";
$message .= "Content-Transfer-Encoding: base64\r\n";
$message .= "Content-Disposition: attachment; filename="" . $filename . ""\r\n\r\n";
$message .= $encoded_content . "\r\n";
$message .= "--" . $boundary . "--";

// Pošiljanje
if (mail($to, $subject, $message, $headers)) {
    echo "E-pošta s CSV prilogo je bila uspešno poslana!";
}   else {
    echo "Napaka pri pošiljanju e-pošte.";
}

$povezava->close();
?>

Hvala za obisk! Dodajam politiko zasebnosti.

© 2024 Vse pravice pridržane.

Vam je koda pomagala? Če želite podpreti moj trud pri pripravi vodičev in vzdrževanju strani, mi lahko namenite donacijo za kavo.