Ankündigung

Einklappen
Keine Ankündigung bisher.

Emailversand: Html wird als Anhang angezeigt.

Einklappen

Neue Werbung 2019

Einklappen
Dieses Thema ist geschlossen.
X
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Emailversand: Html wird als Anhang angezeigt.

    Hallo,

    ich habe folgendes Problem: Ich versende Emails per Php mit folgender Function:

    PHP-Code:

    function email_sendEmail($email,$subject,$body,$htmlbody="none",$attachment_file="none",$attachment_name="none",$attachment_type="none"){

        
        
    # Trenner
        
    $separator md5(uniqid(time()));
        
        
        
    # Header  
        
    $header "From: test.de <system@test.de>";      
        
    $header .= "\n"
        
    $header .= "MIME-Version: 1.0"
        
    $header .= "\n"
        
    $header .= "Content-Type: multipart/mixed; boundary=$separator"
        
    $header .= "\n\n"
        
    $header .= "This is a multi-part message in MIME format"
        
    $header .= "\n";

        
        
    # Plain-Text Inhalt
        
    $header .= "--$separator"
        
    $header .= "\n"
        
    $header .= "Content-Type: text/plain; charset=utf-8"
        
    $header .= "\n"
        
    $header .= "Content-Transfer-Encoding: 8bit"
        
    $header .= "\n\n"
        
    $header .= $body
        
    $header .= "\n";
        
        
        
    # Html Inhalt
        
    if ($htmlbody != "none"){
            
            
    $header .= "--$separator"
            
    $header .= "\n"
            
    $header .= "Content-Type: text/html; charset=utf-8"
            
    $header .= "\n"
            
    $header .= "Content-Transfer-Encoding: 8bit"
            
    $header .= "\n\n"
            
    $header .= $htmlbody
            
    $header .= "\n";    
        }

        
        
    # Attachment
        
    if ($attachment_file != "none"){ 
            
            
    $header .= "--$separator"
            
    $header .= "\n"
            
    $header .= "Content-Type: $attachment_type; name=$attachment_name"
            
    $header .= "\n"
            
    $header .= "Content-Transfer-Encoding: base64"
            
    $header .= "\n"
            
    $header .= "Content-Disposition: attachment; filename=$attachment_name"
            
    $header .= "\n\n"
            
    $filedata fread(fopen($attachment_file"r"), filesize($attachment_file)); 
            
    $header .= chunk_split(base64_encode($filedata)); 
            
    $header .= "\n";
        }


        
    $header .= "--$separator--"
         
        
        
    # Mail versenden
        
    mail($email$subject""$header);     

    Bisher hat das auch immer alles geklappt. Ich konnte reine Text-Mails, Html-Mails usw versenden.
    Neuerdings zeigt mir zB Thunderbird aber die Html-Emails als Anhang an, wenn ich die Email zusätzlich noch als Plain/Text verschicke. Das brauche ich zB bei einem Newsletter.

    Ist in meiner Funktion ein grober Denkfehler oder was ist da passiert?

    Gruß,
    der Jackson

  • #2
    Hallo und willkommen hier im Forum!
    Das könnte ja auch am Thunderbird liegen ..

    Ich kann dir nur raten, den phpmailer [1] zu verwenden, der abstrahiert dir die Verwendung komplett, du musst dich nicht mehr um Header kümmern, es funktioniert ganz einfach ohne wenn und aber.

    Falls du trotzdem nicht auf deine Klasse verzichten möchtest, kann ich dir leider nicht weiterhelfen, da ich mein Wissen über den Aufbau von E-Mails verbannt oder nicht weiterausgebaut habe, seit es den phpmailer gibt, und da bin ich nicht der einzigste

    Code-Beispiel für den phpmailer:
    Code:
    require("class.phpmailer.php");
    
    $mail = new PHPMailer();
    
    $mail->From     = "list@mydomain.com";
    $mail->FromName = "List manager";
    $mail->Host     = "smtp1.site.com;smtp2.site.com";
    $mail->Mailer   = "smtp";
    
    @MYSQL_CONNECT("localhost","root","password");
    @mysql_select_db("my_company");
    $query  = "SELECT full_name, email, photo FROM employee WHERE id=$id";
    $result = @MYSQL_QUERY($query);
    
    while ($row = mysql_fetch_array ($result))
    {
        // HTML body
        $body  = "Hello <font size=\"4\">" . $row["full_name"] . "</font>, 
    
    ";
        $body .= "Your personal photograph to this message.
    
    ";
        $body .= "Sincerely, 
    ";
        $body .= "PHPMailer List manager";
    
        // Plain text body (for mail clients that cannot read HTML)
        $text_body  = "Hello " . $row["full_name"] . ", \n\n";
        $text_body .= "Your personal photograph to this message.\n\n";
        $text_body .= "Sincerely, \n";
        $text_body .= "PHPMailer List manager";
    
        $mail->Body    = $body;
        $mail->AltBody = $text_body;
        $mail->AddAddress($row["email"], $row["full_name"]);
        $mail->AddStringAttachment($row["photo"], "YourPhoto.jpg");
    
        if(!$mail->Send())
            echo "There has been a mail error sending to " . $row["email"] . "
    ";
    
        // Clear all addresses and attachments for next loop
        $mail->ClearAddresses();
        $mail->ClearAttachments();
    }
    Das Unübersichtliche hierbei ist eigentlich lediglich das Erstellen der Daten für den phpmailer, die Aufrufe sind sehr einfach gestrickt wie du siehst.

    [1] http://phpmailer.sourceforge.net

    Kommentar


    • #3
      Hallo Zergling,

      danke für die schnelle Antwort. Ich habe die Lösung gefunden.
      Es liegt am Content-Type:

      aus

      Content-Type: multipart/mixed;


      muß

      Content-Type: multipart/alternative;

      werden.

      Jetzt kann der Client selber entscheiden und die modernen Email-Programme blicken das. Thread kann geschlossen/gelöscht werden

      Gruß,
      der Jackson

      Kommentar

      Lädt...
      X