Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] PHPMailer und Umlaute

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] PHPMailer und Umlaute

    Hallo,

    ich weiß zu dem Thema gibt es hier im Forum schon einige Threads, aber bisher konnte mir keiner meine Frage baentworten....

    also ich hab ein "PHP"- Mail Script mit dem ich eine HTML Mail und die dazu passende Text alternative verschicke (mit PHPMailer).

    Das Script läuft soweit wie es soll.

    Mein Problem ist das die Umlaute in der Text Alternative nicht richtig dargestellt werden.

    Das hab ich im PHPMailer eingetragen:

    PHP-Code:
    public $CharSet           'iso-8859-1';
    public 
    $ContentType       'text/plain';
    public 
    $Encoding          'quoted-printable'
    Anrede, Name und Vorname kommen aus einer Datenbank und da werden auch die Umlaute in den Namen richtig dargestellt, beim restlichen Alternativtext sieht das z.B. so aus: Ÿbrigens, mšglich

    wenn ich nun iso-8859-1 in utf-8 ändere, werden gar keine Umlaute angezeigt : brigens, mglich

    und die Namen aus der Datenbank werden auch nicht mehr richtig angezeigt, statt der Umlaute erscheinen dann schwarze vierecke....

    Was muss ich denn nun angeben damit es funktioniert?

    Oder muss ich die Umlaute auch im Alternativtext irgendwie codieren?

  • #2
    Hast du darauf geachtet das die Kodierung in deiner Datei auch UTF8 entspricht?

    Kommentar


    • #3
      also deine PHP Datei:
      sollte sowas haben
      PHP-Code:
      header('Content-type: text/html; charset=utf-8'); 
      deine MYSQL Datenbank sollte sowas haben:

      PHP-Code:
      mysql_connect()
      mysql_select_db();
      mysql_query("SET NAME 'utf8'"); 
      und dann im PHP Mailer auch auf utf8 stellen..

      wenn das alles nicht geht.... dann weis ich auch net
      apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

      Kommentar


      • #4
        So hab in Meiner Datenbank jetzt Anrede, Name und Vorname bei Kollation auf utf8_general_ci umgestellt und utf8_general_ci im PHPMailer eingetragen.

        Ergebnis: Umlaute aus der Datenbank werden dargestellt.

        nur mit den Umlauten in der Mail klappts net, jetzt wird zwar nicht mehr gar nichts angezeigt, dafür werden die umlaute aber in der Form angezeigt:
        Ÿber

        auch das ergänzen von

        PHP-Code:
        header('Content-type: text/html; charset=utf-8'); 
        ändert das nicht...

        Kommentar


        • #5
          mysql_query("SET NAME 'utf8'");
          Es heißt SET NAMES
          [COLOR="#F5F5FF"]--[/COLOR]
          [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
          [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
          [COLOR="#F5F5FF"]
          --[/COLOR]

          Kommentar


          • #6
            dafür werden die umlaute aber in der Form angezeigt:
            Ÿber
            Dann ist der phpmailer immer noch nicht auf utf-8 umgestellt.
            Hast die Datei auch hochgeladen ?
            auch das ergänzen von

            PHP-Code:
            header('Content-type: text/html; charset=utf-8');

            ändert das nicht..
            hat ja auch nichts mit der mail zu tun.

            Hast Du Deine php-Datei und den html-Code als utf-8 gespeichert (im Editor) ???

            Welchen Editor benutzt Du ?
            Eine if-else-Abfrage nimmt, ordentlich geschrieben eine Menge Platz weg. Platzsparend geht es mit einem ternären Operator.

            Kommentar


            • #7
              Hast die Datei auch hochgeladen ?
              Ja hab ich. Habs auch grad nochmal überprüft.

              Hast Du Deine php-Datei und den html-Code als utf-8 gespeichert (im Editor) ???
              Hatte ich nicht (wusste einfach nicht das ich das im Editor auf utf-8 umstellen muss).

              Welchen Editor benutzt Du ?
              Als Editor benutze ich Eclipse.


              Naja jetzt hab ich im Editor auf utf-8 umgestellt, die Datei gespeichert und hochgeladen, aber die Umlaute werden immer noch nicht korrekt dargestellt...Im Moment sieht das so aus:

              Code:
               
              Verfügung.
              möglich.
              verstärkte
              Im PHPMailer hab ich im Moment
              PHP-Code:
              public $CharSet 'utf8_general_ci'
              stehen.
              Wenn ich im PHPMailer nur utf-8 schreibe, bleibt die Darstellung der Sonderzeichen im Alternativtext genauso wie bei utf8_general_ci, nur das die Umlaute aus der Datenbank nicht mehr dargestellt werden.

              Kommentar


              • #8
                Hatte ich nicht (wusste einfach nicht das ich das im Editor auf utf-8 umstellen muss).
                nicht gewußt ?
                Hast du darauf geachtet das die Kodierung in deiner Datei auch UTF8 entspricht?
                Im PHPMailer hab ich im Moment
                PHP-Code:
                public $CharSet = 'utf8_general_ci';

                stehen.
                das ist falsch.

                Es muß so aussehn:
                PHP-Code:
                  /**
                   * Sets the CharSet of the message.
                   * @var string
                   */
                  
                public $CharSet           'utf-8'
                Und SET NAMES hast Du drin ?

                Die Daten in der DB sind utf-8 ???

                Gibt es da noch irgendein mail-Template welches als iso gespeichert ist ?

                error_reporting ist eingeschaltet ?

                Gib als meta charset utf8 an und mach ne Testausgabe des mail-Textes per echo.

                Ansonsten mußt eben ein Jobangebot erstellen oder unter Projekthilfe posten.
                Eine if-else-Abfrage nimmt, ordentlich geschrieben eine Menge Platz weg. Platzsparend geht es mit einem ternären Operator.

                Kommentar


                • #9
                  nicht gewußt ?
                  Zitat:
                  Hast du darauf geachtet das die Kodierung in deiner Datei auch UTF8 entspricht?
                  Hab gedacht das ne UTF-8 Angabe in der Datei dazu muss, hätte nicht gedacht das man den Zeichensatz im Editor in irgendeiner weise umstellen kann.

                  Die PHPMailer Angabe hab ich nun geändert.


                  Und SET NAMES hast Du drin?
                  Ja
                  Die Daten in der DB sind utf-8 ???
                  Ja

                  Gibt es da noch irgendein mail-Template welches als iso gespeichert ist ?
                  nein, das Script verwendet nur die eigentliche HTML-Mail und den PHPMailer...

                  error_reporting ist eingeschaltet ?
                  ja

                  Gib als meta charset utf8 an und mach ne Testausgabe des mail-Textes per echo.
                  Hab ich gemacht.
                  Umlaute aus der Datenbank in der HTML-Mail werden nicht dargestellt,
                  Umlaute aus der Datenbakt in der reinen Text-Mail schon.

                  Außerdem werden die Umlaute bei der Browserausgabe der reinen Text-Mail richtig dargestellt, bei der Ausgabe im Email-Programm Mail jedoch nicht.

                  Bei Mail & GMX werden außerdem Umlaute richtig dargestellt, aber nur wenn der Name aus der Datenbank keine Umlaute enthält. Ansonsten ist der Name richtig und die Umlaute im Text sind falsch.

                  Bei Web.de kann ich leider nur die HTML Mail prüfen, Da werden die Namen aus der Datenbank falsch dargestellt. Dort werden scheinbar zwei charset angaben übersendet:

                  Content-Type: text/html; charset="iso-8859-15"
                  Content-Transfer-Encoding: 8bit

                  und

                  Content-Type: text/plain; charset = "utf-8"
                  Content-Transfer-Encoding: quoted-printable

                  Kommentar


                  • #10
                    Ansonsten ist der Name richtig und die Umlaute im Text sind falsch.
                    wie meinen ? was ist der Unterschied zwischen Name und Text ???

                    Dort werden scheinbar zwei charset angaben übersendet:
                    ???
                    Poste mal den mail-header.

                    das Script verwendet nur die eigentliche HTML-Mail
                    was ist denn die eigentliche HTML-Mail ???

                    Ist das ne separate Datei ?

                    Ist diese "eigentliche HTML-Mail" auch im Editor als utf8 gespeichert worden ?

                    Wie kommt der html-Code ins php-Script ?

                    Poste mal Dein php-Script.
                    Eine if-else-Abfrage nimmt, ordentlich geschrieben eine Menge Platz weg. Platzsparend geht es mit einem ternären Operator.

                    Kommentar


                    • #11
                      wie meinen ? was ist der Unterschied zwischen Name und Text ???
                      Die Namen kommen aus der Datenbank (also auch die Umlaute in den Namen)
                      und der Text steht halt direkt in der Mail (auch mit Umlauten).

                      Poste mal den mail-header.
                      Web.de:

                      Code:
                      Received: from [00.000.00.00] (helo=xxx.xx-xx.net)
                      by mx00.web.de with esmtp (WEB.DE 4.110 #4)
                      id xxx
                      for xxxx_xx@web.de; Mon, 29 Mar 2010 17:03:32 +0200
                      X-KSD: < xxxx_xx@web.de>
                      Received: from www.xxxxxx.de (xxx.xx-xx.net [00.000.00.00])
                      (authenticated bits=0)
                      by xxx.xx-xx.net (9.14.2/9.14.2) with ESMTP id o2TF3evM005501
                      for < xxxx_xx@web.de>; Mon, 29 Mar 2010 17:03:40 +0200
                      Date: Mon, 29 Mar 2010 17:03:40 +0200
                      To: xxxx_xx@web.de
                      From: "xxx.de" <xxx@xxxx.de>
                      Subject:Webmail
                      Message-ID: <12354@www.xxx.de>
                      X-Priority: 3
                      X-Mailer: PHPMailer 5.1 (phpmailer.sourceforge.net)
                      MIME-Version: 1.0
                      Return-Path: xxx@xxx.de
                      Content-Type: text/html; charset="iso-8859-15"
                      Content-Transfer-Encoding: 8bit
                      und Mail:

                      Code:
                      Return-Path: <xxx@xxx.de>
                      Received: from xxx-xxxx.de ([00.000.00.00])
                         by KEN (0.00.00-v000000) with POP3
                         ; Mon, 29 Mar 2010 17:04:03 +0200
                      Received: from www.xxx.de (xxx.xx-xx.net [00.000.00.00])
                         (authenticated bits=0)
                         by xxx.xx-xx.net (9.14.2/9.14.2) with ESMTP id o2TF3evL005501
                         for <xx@xx-xx.de>; Mon, 29 Mar 2010 17:03:40 +0200
                      Date: Mon, 29 Mar 2010 17:03:40 +0200
                      From: "xxx.de" <xxx@xxx.de>
                      Subject: Webmail
                      To: xx@xx-xx.de
                      Message-ID: <12354@www.xxx.de>
                      Mime-Version: 1.0
                      Content-Type: multipart/alternative;
                         boundary="12354"
                      X-KENRecTime: 126910875043
                      X-Priority: 3
                      X-Spam-Virus: No
                      X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on
                      X-Spam-Level: 
                      X-Spam-Status: No, score=-1.4 required=5.0 tests=ALL_TRUSTED,HTML_MESSAGE
                         shortcircuit=no autolearn=disabled version=3.2.5
                      X-KSD: <xx@xx-xx.de>
                      X-Mailer: PHPMailer 5.1 (phpmailer.sourceforge.net)
                      Status: 
                      X-AVK-Virus-Check: AVA 00.10000;00000
                      
                      
                      --12354
                      Content-Type: text/plain; charset = "utf-8"
                      Content-Transfer-Encoding: quoted-printable
                      was ist denn die eigentliche HTML-Mail ???
                      Naja ich versende eine HTML-Mail und biete dazu eine Text-Alternative an. Mit dem Satz wollte ich nur sagen das da nur PHP-Script + PHPMailer+Datenbank miteinander verknüpft sind

                      Wie kommt der html-Code ins php-Script ?
                      der kommt da nicht rein, der ist da schon drin

                      PHP-Code:
                      Poste mal Dein php-Script
                      Ok aber ohne HTML-Inhalt und Texte, sonst wird das zu lang....

                      PHP-Code:
                      <?php
                       session_start
                      ();   
                       
                      error_reporting(E_ALL); 
                      ini_set('display_errors',true);
                      header('Content-type: text/html; charset=utf-8'); 


                        
                      $maxTime ini_get("max_execution_time") + time() - 3
                        
                      define ("ZEILENUMBRUCH""\r\n");

                                           
                      $pfad get_include_path();

                                          
                                           
                      $pfad .= PATH_SEPARATOR '../PHPMailer';
                                           
                                           
                      set_include_path($pfad);
                                           require_once 
                      'class.phpmailer.php';
                                           
                      $mail = new PHPMailer();
                                           
                      $mail -> SMTPDebug PHP_INT_MAX;
                                           
                      $mail->SetLanguage ("de""../PHPMailer/"); 
                                           
                                           
                      $mail->IsSMTP();
                                           
                      $mail->Host     "";  
                                           
                      $mail->SMTPAuth true;
                                          
                                           
                      $mail->Username "";                     
                                           
                      $mail->Password ""
                                           
                      $mail->From     "";
                                           
                      $mail->FromName "";                     
                                           
                      $mail->Subject  "Webmail";
                                            
                                           
                                       
                                           require_once 
                      'config.inc.php';
                                           
                      $verbindung mysql_connect(__CFG_DB_SERVER__CFG_DB_USERNAME__CFG_DB_PASSWORD)
                                           or die (
                      "keine Verbindung möglich.");
                                           
                      mysql_select_db("User")
                                           or die (
                      "Die Datenbank existiert nicht.");   
                                           
                      mysql_query("SET NAME 'utf8'");
                                           
                                             
                      // Größte ID ermitteln 
                                             
                      $abfrage "select max(ID) from Webmail";   
                                             
                      $ergebnis mysql_query ($abfrage);   
                                             
                      $max mysql_result($ergebnis,0); 
                          
                                             if (isset(
                      $_SESSION['lastID'])) 
                                               {
                                               
                      $lastID $_SESSION['lastID']; 
                                               }
                                             else 
                                               {
                                               
                      $lastID 0;
                                               } 
                                                     
                                           
                      $abfrage "SELECT ID, Anrede, Name, Vorname, Email, Freigeschalten FROM Webmail WHERE Einverstanden = 'ja'"
                                                                    
                                             if (
                      $lastID)     
                                                    {
                                                    
                      $abfrage .= "and ID > $lastID  order by ID ASC"
                                                    }
                                             else 
                                                   {
                                                   
                      $abfrage .= "order by ID ASC"
                                                   }
                                                   
                                           
                      $ergebnis mysql_query($abfrage); 
                                         
                                           while (
                      $row mysql_fetch_assoc($ergebnis)) 
                                                   {   
                                                       
                      $lastID $row['ID']; 
                                                       
                                                  
                      $mail->AddAddress($row['Email']);  
                                                  
                                                  
                      $anrede $row['Anrede'] ." "$row['Vorname'] ." "$row['Name'] .",\n"
                                                  
                                                  if (
                      time() > $maxTime)
                                                  { 
                                                      
                      $more false
                                                      
                      $_SESSION['lastID'] = $lastID
                                                  }                        
                         
                                             
                      $mail->IsHTML(true);
                          
                                                  
                      $mailtext='HTML+Text'
                                                  
                      $mailtext.=$anrede;                                                                             
                                                  
                      $mailtext.='noch mehr HTML+Text';

                                           
                                             
                      $mail->Body  =  "$mailtext";                 

                                                  
                      $alt_mailtext 'Text';
                                                  
                      $alt_mailtext=$anrede;                                                                      
                                                  
                      $alt_mailtext.= ZEILENUMBRUCH;                            
                                                  
                      $alt_mailtext.= 'weiter im Text';                
                                                  
                                             
                      $mail->AltBody  "$alt_mailtext"
                                           
                                                  if (
                      $mail->send()) 
                                                    {     
                                                   echo 
                      "Die Email wurde versandt.<br>";         
                                                    }   
                                                  
                      $mail->ClearAddresses();                            
                                                   } 
                        if (
                      $max $lastID)  
                        { 
                          echo 
                      '<html><head> 
                                <meta http-equiv="refresh" content="5; URL=http://' 
                      $_SERVER['SERVER_NAME'] . $_SERVER['PHP_SELF'] . '?lastID=' $lastID '"> 
                                <head> 
                                <body> 
                                   Gleichs gehts weiter! 
                                </body> 
                                </html>'

                        } 
                        else
                        {    
                           echo 
                      "Fertig.";   
                        } 

                                    
                      ?>

                      Kommentar


                      • #12
                        mysql_query("SET NAME 'utf8'");
                        Das ist doch falsch !

                        Liest Du Dir denn die Antworten hier auch richtig durch ?

                        SET NAMES
                        Eine if-else-Abfrage nimmt, ordentlich geschrieben eine Menge Platz weg. Platzsparend geht es mit einem ternären Operator.

                        Kommentar


                        • #13
                          Das ist doch falsch !
                          jaaaa daran hat's gelegen Danke,danke,danke,danke!

                          Und: Ja ich lese mir die Antworten richtig durch, aber das hier
                          PHP-Code:
                          mysql_query("SET NAME 'utf8'"); 
                          hatte ich von BlackScorp kopiert und ins Script eingefügt in der Überzeugung so kann ich mich nicht vertippen...naja und so weiter halt....

                          Also danke nochmal an alle und ganz besonders an Koala, für die viele Geduld mit mir

                          Kommentar


                          • #14
                            Und ich hatte explizit und alleinstehend geschrieben:
                            Es heißt SET NAMES
                            [COLOR="#F5F5FF"]--[/COLOR]
                            [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                            [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                            [COLOR="#F5F5FF"]
                            --[/COLOR]

                            Kommentar


                            • #15
                              Zitat von nikosch Beitrag anzeigen
                              Und ich hatte explizit und alleinstehend geschrieben:
                              ja und ich hab's überlesen gehabt, tut mir leid...

                              Kommentar

                              Lädt...
                              X