ilch Forum » Allgemein » HTML, PHP, SQL,... » Probleme mit dem Emailversand

Geschlossen
  1. #1
    User Pic
    Silfer Mitglied
    Registriert seit
    25.06.2008
    Beiträge
    74
    Beitragswertungen
    1 Beitragspunkte
    Hallo!

    Ich hab folgendes Problem :

    Ich möchte mir mein SQL Backup per Email zusenden lassen, aber ich erhalte nur BIT Salat!

    Ich kann aber den Fehler nicht finden! Weiss jemand Rat?

    //Backup per Email verschicken
    function mail_att($to, $from, $subject, $message) {
        // $to Empfänger
        // $from Absender ("email@domain.de" oder "Name <email@domain.de>")
        // $subject Betreff
        // $message Inhalt der Email
        global $backup_pfad; //Die Pfade zu den Dateien
    
    
        if(is_array($backup_pfad) AND count($backup_pfad) > 0)
           {
           $mime_boundary = "-----=" . md5(uniqid(rand(), 1));
    
    
          $header = "From: ".$from."\r\n";
          $header.= "MIME-Version: 1.0\r\n";
          $header.= "Content-Type: multipart/mixed;\r\n";
          $header.= " boundary=\"".$mime_boundary."\"\r\n";
    
          $content = "This is a multi-part message in MIME format.\r\n\r\n";
          $content.= "--".$mime_boundary."\r\n";
          $content.= "Content-Type: text/plain charset=\"iso-8859-1\"\r\n";
          $content.= "Content-Transfer-Encoding: 7bit\r\n\r\n";
          $content.= $message."\r\n";
    
          //Dateien anhaengen
          foreach($backup_pfad AS $file)
              {
              $name = basename($file);
             $data = chunk_split(base64_encode(implode("", file($file))));
             $len = filesize($file);
             $content.= "--".$mime_boundary."\r\n";
             $content.= "Content-Disposition: attachment;\r\n";
             $content.= "\tfilename=\"$name\";\r\n";
             $content.= "Content-Length: .$len;\r\n";
             $content.= "Content-Type: application/x-gzip; name=\"".$file."\"\r\n";
             $content.= "Content-Transfer-Encoding: base64\r\n\r\n";
             $content.= $data."\r\n";
              }
    
          if(mail($to, $subject, $content, $header)) return true;
          else return false;


    Ich möchte quasi die .sql oder .gz als Anhang in der Mail haben!

    Vielen Dank schon ma

    Schönen Gruss an alle hier

    Silfer
    0 Mitglieder finden den Beitrag gut.
  2. #2
    User Pic
    Panicsheep Hall Of Fame
    Registriert seit
    24.08.2004
    Beiträge
    10.192
    Beitragswertungen
    16 Beitragspunkte
    benutzt doch phpmybackup
    Da kannst du alles einstellen wie du es gerne hättest und das Script per Cronjob aufrufen.
    Mach ich seit 2 Jahren und klappt tadellos.
    Omnia bona erunt
    0 Mitglieder finden den Beitrag gut.
  3. #3
    User Pic
    Surangumal Mitglied
    Registriert seit
    01.01.2009
    Beiträge
    28
    Beitragswertungen
    0 Beitragspunkte
    Abgesehen von Panicsheeps sicher richtiger feststellung, bleibt ja noch Rätsel zu lösen zwinker

    Der Code ist prinzipiell nicht falsch. ich habe das gerade mal so getestet:
    <?
    
    $mime_boundary = "-----=" . md5(uniqid(rand(), 1));
    
    $from = "server@MEIN_HOST.DE";
    
    $message = "das ist ein test";
    
    $header = "From: ".$from."\r\n";
    $header.= "MIME-Version: 1.0\r\n";
          $header.= "Content-Type: multipart/mixed;\r\n";
          $header.= " boundary=\"".$mime_boundary."\"\r\n";
    
          $content = "This is a multi-part message in MIME format.\r\n\r\n";
          $content.= "--".$mime_boundary."\r\n";
          $content.= "Content-Type: text/plain charset=\"iso-8859-1\"\r\n";
          $content.= "Content-Transfer-Encoding: 7bit\r\n\r\n";
          $content.= $message."\r\n";
    
          //Dateien anhaengen
          $backup_pfad = array("PFAD_ZU_EINEM_JPG", "PFAD_ZU_EINEM_ZIP_FILE");
          foreach($backup_pfad AS $file)
          {
             $name = basename($file);
             $data = chunk_split(base64_encode(implode("", file($file))));
             $len = filesize($file);
             $content.= "--".$mime_boundary."\r\n";
             $content.= "Content-Disposition: attachment;\r\n";
             $content.= "\tfilename=\"$name\";\r\n";
             $content.= "Content-Length: .$len;\r\n";
             $content.= "Content-Type: application/x-gzip; name=\"".$file."\"\r\n";
             $content.= "Content-Transfer-Encoding: base64\r\n\r\n";
             $content.= $data."\r\n";
          }
    
          $to = "MEINE_EMAIL";
          $subject= "test";
          mail($to, $subject, $content, $header);
    
    ?>
    done


    und das ging einwandfrei.

    * Was steht in $message ? Du sagst dass es ein 7bit encoding hat, führst dieses Encoding aber nicht durch. Sind da vielleicht non-us-ascii zeichen drin?

    * welche dateien werden in $backup_pfad beschrieben? gibts die? welche endung haben die, passt das? kann man im obigen test-skript verwenden?

    mehr fällt mir erstmal nicht ein.
    0 Mitglieder finden den Beitrag gut.
  4. #4
    User Pic
    Silfer Mitglied
    Registriert seit
    25.06.2008
    Beiträge
    74
    Beitragswertungen
    1 Beitragspunkte
    Sorry hab was vergessen! am schluss vom Script steht noch :

    //Backup per Email senden
    if($send == 1)
       {
      
          $from = "SQLBackup@DeineHomepage.de";
          $subject = "Datenbank-Backup ".date("d.m.Y H:i");
    	  $message = "Das SQL Backup wurde nach Plan durchgefuehrt!"; 
    
       if(!mail_att($email, $from, $subject , $message))
          echo "Es konnte <b>keine</b> Email gesendet werden<br>";
    
       }


    und bei der Mail kommt dies raus:

    Date: Tue, 6 Jan 2009 02:22:36 +0100 (CET)


    This is a multi-part message in MIME format.



    -------=e24a0c20a2bbfecc0e863ef8d097dcd9

    Content-Type: text/plain charset="iso-8859-1"

    Content-Transfer-Encoding: base64



    Das SQL Backup wurde nach Plan durchgefuehrt!

    -------=e24a0c20a2bbfecc0e863ef8d097dcd9

    Content-Disposition: attachment;

    filename="usr_web2_1_structur_2009-01-06.sql.gz";

    Content-Length: .5237;

    Content-Type: application/x-gzip; name="/var/www/web2/html/backup/usr_web2_1_structur_2009-01-06.sql.gz"

    Content-Transfer-Encoding: base64



    H4sIAAAAAAAAA8xdW3PcthV+90z/w87kwdJMZK9WktO00+m4tdp44jipI0+avuyAJHYXFS9rErvS

    +tcXN5IgiduBHKZ+8IjL78Pl4ODg4ODCrxY/0/pwTw91gtL7w/5Pi+WrF8vLF6vl8tvFcvWn1Wrx

    h2dfLR4eHl7sd/sLTMoNSncvMsx+Zr9fRP979hWjNyzvlOW92FT14g4lOV48Z9ncE7pG2ZHgh+cM

    9vcPt6/vbhd3r//27nYxeLs4e7Zg/+TDmmQLUtKzy+vzxaFsyLbE2eL9j3eL9x/fvVugA63WpExr

    XOCSfq3zapwjSqpSsG808pvbf7z++O5u8fzyeZfQgMn/a6aZdrylhUdJgSNoacXETvEjNb9uKKKH

    ZkFJeRJpnwekmJP0HlCDnz68/eH1h18X39/+ujjrxH7+7PzPz35bbUhypp05aahNITqA0onuGa4W

    PfXQ4FpJ9YjqdIfqs8ulJlb+fixZjV3n09YaSFAv5BxCPGTZySpA/rIVHv87QnCCxoViotqVUfI2

    NcFlBmEOZanKPIMcU5SzkrKmt4iyfa+k2T7CBdox0+pQUpYgQKgdN0MURxH3RGQbxT2yjsNMalkv

    RK/59tzecJp45mi7quDytTadfN22nHyKaDhFTBHtLMfN+VhYCtQcEpXBahkmZUWEDiMtj5e47sr1

    amkrGNn3Zs9aemHhDINS+x5qDoa60TXALKpRbsjWrhn8rVKMfV1tSA7XC8UrEWs4Xf6dMH767qfv

    394xnwyVGaqzcQsqPkopOeKwkb4hFK9xlRnRl0Z0gZsGbY2uhngvim97SQnN7W+NY2L/rrG+xAUi

    dmqGufTNIpXvXjYWkQp+jk7VgTq6hEBt6qqke4tkHnDOtBUg6pYgBdZmvbrRy/4LyfN70QeYOm0W

    BXO/2SjwC054eawJtj1S/kxxsWcOLhMSqc0SahHNOEXed5l7vGUeSn0Kq5WgCP3kw04QBTEoqsMF

    p/AN+YwXTYHy3O63Ly3cHSbbHe2yuzKR/2gjP5CM7qDcAhcJkwze793My5WFuU2q6j6syysGm6pV

    usw.

    wär echt spitze wenn Du mir auch da helfen könntest!

    Schönen Gruss

    Silfer
    0 Mitglieder finden den Beitrag gut.
  5. #5
    User Pic
    Surangumal Mitglied
    Registriert seit
    01.01.2009
    Beiträge
    28
    Beitragswertungen
    0 Beitragspunkte
    1.) die stelle mit Content-Length stimmt nicht: ich denke da ist ein . und ein ; zuviel. also eher so:
    2.) besser mal als content-type "application/octet-stream" verwenden

    sieht dann so aus:

    <?
    
    $mime_boundary = "-----=" . md5(uniqid(rand(), 1));
    
    $from = "server@MEIN_HOST.DE";
    
    $message = "das ist ein test";
    
    $header = "From: ".$from."\r\n";
    $header.= "MIME-Version: 1.0\r\n";
          $header.= "Content-Type: multipart/mixed;\r\n";
          $header.= " boundary=\"".$mime_boundary."\"\r\n";
    
          $content = "This is a multi-part message in MIME format.\r\n\r\n";
          $content.= "--".$mime_boundary."\r\n";
          $content.= "Content-Type: text/plain charset=\"iso-8859-1\"\r\n";
          $content.= "Content-Transfer-Encoding: 7bit\r\n\r\n";
          $content.= $message."\r\n";
    
          //Dateien anhaengen
          $backup_pfad = array(PFAD_ZU_EINEM_JPG);
          foreach($backup_pfad AS $file)
          {
             $name = basename($file);
             $data = chunk_split(base64_encode(implode("", file($file))));
             $len = filesize($file);
             $content.= "--".$mime_boundary."\r\n";
             $content.= "Content-Disposition: attachment;\r\n";
             $content.= "\tfilename=\"$name\"\r\n";
             $content.= "Content-Length: $len\r\n";
             $content.= "Content-Type: application/octet-stream;\r\n";
             $content.= "\tname=\"$name\"\r\n";
             $content.= "Content-Transfer-Encoding: base64\r\n\r\n";
             $content.= $data."\r\n";
          }
    
          $to = "MEINE_EMAIL";
          $subject= "test";
          mail($to, $subject, $content, $header);
    
    ?>
    done


    3.) kopiere doch mal den inhalt in eine php datei (z.b. test.php), dann ersetze noch MEINE_EMAIL und PFAD_ZU_EINEM_JPG mit entsprechenden werten und rufe die test.php über den browser auf.

    - kannst du das attatchment im email-programm sehen?
    - kannst du das attatchment im email-programm speichern?
    - kannst du das attatchment nach dem speichern dann öffnen?
    0 Mitglieder finden den Beitrag gut.
  6. #6
    User Pic
    Silfer Mitglied
    Registriert seit
    25.06.2008
    Beiträge
    74
    Beitragswertungen
    1 Beitragspunkte
    Hi!

    Hab das mal gemacht! mit dem test.php!

    Da is das selbe ! leider :'(

    das ist ein test

    -------=10e9b6151506868d30ce0f6c7be5c371

    Content-Disposition: attachment;

    filename="intro_5.jpg"

    Content-Length: 75142

    Content-Type: application/octet-stream;

    name="intro_5.jpg"

    Content-Transfer-Encoding: base64



    /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsK

    CwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQU

    FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCADvBAADASIA

    AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA

    AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3

    ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm

    p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA

    AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx

    BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK

    U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3

    uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD8qqKK

    KAJVHy1ZVS0eB61XX7tW7f7o+tZSN4mhb8Rmur0dv3e3nrkGuTt22ofrXXaPxGCfl+veuCtsenR3

    Ojsyu0Y5Hc1qW+WK4HB4JrIt42OccHOcHvW1ZsO+fpXkTPWgdHpu2PTpsnA75rlfDKCbxMwPK7jW

    5ny9PnY8Bl4Wuc8KymPXnYep/nWMV7smabNHtkcarDg4AAyCO1eRfGDxJ9oCaeJDuX5m/XFelTax

    Gruss Silfer
    0 Mitglieder finden den Beitrag gut.
  7. #7
    User Pic
    Silfer Mitglied
    Registriert seit
    25.06.2008
    Beiträge
    74
    Beitragswertungen
    1 Beitragspunkte
    Hab da noch nen Code Schnipsel gefunden der auch ne Mail verschickt hier funktioniert es

    ich poste mal den code der die mail verschickt viell. hilft uns das!

    <?
      if ($use_email == 'yes') {
        $fileatt_type = filetype($file_path);
      
        $headers = "From: $send_from";
      
        // Read the file to be attached ('rb' = read binary)
        $fp = fopen($file_path,'rb');
        $data = fread($fp,filesize($file_path));
        fclose($fp);
      
        // Generate a boundary string
        $semi_rand = md5(time());
        $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
      
        // Add the headers for a file attachment
        $headers .= "\nMIME-Version: 1.0\n" ."Content-Type: multipart/mixed;\n" ." boundary=\"{$mime_boundary}\"";
      
        // Add a multipart boundary above the plain message
        $message = "This is a multi-part message in MIME format.\n\n" ."--{$mime_boundary}\n" ."Content-Type: text/plain; charset=\"iso-8859-1\"\n" ."Content-Transfer-Encoding: 7bit\n\n" .
        $message . "\n\n";
      
        // Base64 encode the file data
        $data = chunk_split(base64_encode($data));
      
        // Add file attachment to the message
        $message .= "--{$mime_boundary}\n" ."Content-Type: {$fileatt_type};\n" ." name=\"{$file_name}\"\n" ."Content-Disposition: attachment;\n" ." filename=\"{$file_name}\"\n" ."Content-Transfer-Encoding: base64\n\n" .
        $data . "\n\n" ."--{$mime_boundary}--\n";
      
        // Send the message
        $ok = @mail($send_to, $subject, $message, $headers);
        
        if ($echo_status == 'yes') {
          print "<br>Mail is sent...<br>";
    ?>
    0 Mitglieder finden den Beitrag gut.
  8. #8
    User Pic
    Surangumal Mitglied
    Registriert seit
    01.01.2009
    Beiträge
    28
    Beitragswertungen
    0 Beitragspunkte
    bleiben wir mal bei dem test.

    was kommt denn bezüglich der 3 fragen aus dem test bei dir raus?

    - kannst du das attatchment im email-programm sehen?
    - kannst du das attatchment im email-programm speichern?
    - kannst du das attatchment nach dem speichern dann öffnen?
    0 Mitglieder finden den Beitrag gut.
  9. #9
    User Pic
    Silfer Mitglied
    Registriert seit
    25.06.2008
    Beiträge
    74
    Beitragswertungen
    1 Beitragspunkte
    Nein leider nicht!

    Es ist nichts angehängt!
    0 Mitglieder finden den Beitrag gut.
  10. #10
    User Pic
    Klosterwurm Mitglied
    Registriert seit
    30.11.2004
    Beiträge
    354
    Beitragswertungen
    2 Beitragspunkte
    da gib es doch ein tool für... oh verlessen denke mit cronjobs geht das doch.... wen qutsch bitte mein senf löschen lachen


    Zuletzt modifiziert von Klosterwurm am 06.01.2009 - 17:41:49
    Mein Funportal @ externer Link | Facebook @ Spasselite
    0 Mitglieder finden den Beitrag gut.
  11. #11
    User Pic
    Silfer Mitglied
    Registriert seit
    25.06.2008
    Beiträge
    74
    Beitragswertungen
    1 Beitragspunkte
    Jo ich weiss!

    Aber das is ja nicht des Rätselslösung! zwinker

    Gruss

    Silfer

    - Kein Problem! Aber Danke nochma für deine Hilfe!


    Zuletzt modifiziert von Silfer am 06.01.2009 - 17:43:14
    0 Mitglieder finden den Beitrag gut.
Geschlossen

Zurück zu HTML, PHP, SQL,...

Optionen: Bei einer Antwort zu diesem Thema eine eMail erhalten