Swiftmailer versendet deutsche Umlaute inkorrekt

tklustig

Erfahrenes Mitglied
Hallo Leute, dieses Mailmodul, was ich just programmieren soll, raubt mir meine Nerven:mad:
Ein var_dump auf folgenden Befehl zeigt mir die Mail mit ihren korrekten Umlauten an, ist aber ineffektiv in Bezug auf die Speicherung in die Datenbank und erst recht bezüglich des Versandes
PHP:
  $model->bodytext = htmlspecialchars_decode($model->bodytext);
Demzufolge wandle ich die Umlaute wie folgt um, was zumindest dazu führt, dass die Speicherung korrekt erfolgt:
PHP:
       $umlaute = array("ü", "ö", "ü", "Ä", "Ö", "Ü", "ß");
        $ersetzen = array("ü", "ö", "ü", "Ä", "Ö", "Ü", "ß");
        $model->bodytext = str_replace($umlaute, $ersetzen, $model->bodytext);
        $model->bodytext = strip_tags($model->bodytext);       
        $model->save();
Leider wird die Mail wie folgt versendet:
Code:
Message-ID: <c95292cfa6ceed26afbbda6a8ef5ed76@localhost>
Date: Mon, 12 Mar 2018 23:10:51 +0100
Subject: Punkertreffen
From: abc@gmail.com
To: kipp.thomas@gmx.net
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Wir w=C3=BCrden und freuen, wenn sie k&auml;men. f=C3=BCrwahr, das ...

so verschicke ich die Mail:
PHP:
 if ($model->gesendet == 1 && !$multiple) {
                    $SendObject = Yii::$app->mailer->compose()->setFrom($string)
                            ->setTo($model->mail_antwortadresse)
                            ->setSubject($model->betreff)
                            ->setTextBody($model->bodytext)
                            ->send();
                    $session->addFlash("info", "Die Mail wurde ohne Anhänge versandt.Bitte überprüfen sie ihren Maileingang");

Wie muss ich vorgehen, damit Swiftmailer die Mail korrekt verschickt?
 
Hi

stört dich im Mail (nur) das &auml; oder auch das =C3=BC?
Wenns um auml geht, den Ersetzcode ist einfach falsch: uuml zwei Mal, dafür kein auml.
(Und nochmal, es gibt mehr als deutsche Umlaute.)
 
Korrigiert:
So ersetze ich, und das funktioniert:
PHP:
         $umlaute = array("&uuml;", "&ouml;", "&auml;", "&Auml;", "&Ouml;", "&Uuml;", "&szlig;");
            $ersetzen = array("ü", "ö", "ä", "Ä", "Ö", "Ü", "ß");
            $model->bodytext = str_replace($umlaute, $ersetzen, $model->bodytext);
            $model->bodytext = strip_tags($model->bodytext);
Verbleibt die Tatsache, dass Swiftmailer die Eingabe von
Code:
ä,ö,ü,Ä,Ö,Ü,ß
in den Editor wie folgt verschickt:
Code:
Message-ID: <fe83edddcea496e5ed42f03e7cfa120f@localhost>
Date: Tue, 13 Mar 2018 00:29:37 +0100
Subject: Absage
From: maximilianK.mitarbeiter@gmx.net
To: susanne.bewerber@web.de
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

=C3=A4,=C3=B6,=C3=BC,=C3=84,=C3=96,=C3=9C,=C3=9F

Der Versuch, den Content-Type zu ändern, ist ineffektiv, d.h., er wird nicht geändert:
PHP:
         'mailer' => [
                'class' => 'yii\swiftmailer\Mailer',
                'viewPath' => '@common/mail',
                'Content-Type' => 'text/html',
  .   
  .
            ]

Das ist Bullshit. Was also tun??
 
Zuletzt bearbeitet:
Das Problem ist nicht Text vs Html (und nur nebenbei, Html-Mails zu erstellen ist nicht nur den Contenttype zu ändern. Siehe Multipartmime usw.)

Das "Problem", wenn wir es so nennen, ist "Content-Transfer-Encoding: quoted-printable". Und das ist (meiner Meinung nach) kein Problem... genau so sollen Umlaute in diesem Schema kodiert werden, und jede Änderung daran führt dazu dass dein Email nicht mehr gültig ist und von Servern und Anzeigeprogrammen evt. nicht mehr verstanden wird.

Es gibt im wesentlichen 5 wichtige Möglichkeiten für dieses Encoding, die erlaubt sind. Zwei davon werden von Programmen nicht unbedingt unterstützt (waren schon immer optional), bleiben 3. Eins davon ist eben quoted-printable, eins erlaubt dir gar keine Umlaute, und eins macht auch Text ohne Umlaute unleserlich und verbraucht unnötig viel Speicher. Quoted-printable ist hier die sinnvollste Variante.
https://en.wikipedia.org/wiki/MIME#Content-Transfer-Encoding
 
Zuletzt bearbeitet:
Schön und gut, das löst aber nicht mein Problem. Es bringt mir gar nix, zu wissen, dass das verwendete Content-Transfer-Encoding am sinnvollsten ist. Ich möchte doch, dass die Umlaute korrekt verschickt werden:eek:
 
Deutlicher gesagt: Sie sind korrekt. Das Mail ist richtig so.

Wenn das für dich ein Problem ist, wäre es hilfreich zu wissen, warum bzw. was du deswegen nicht machen kannst.
 
Okay. Ur right. Schuld an der Missere war der Emulator. Habe jetzt Swiftmailer dahingehend konfiguriert, dass er die Mails tatsächlich auch verschickt und nicht nur emuliert.
Jetzt passt das! Mit einer Ausnahme:
Der Content-Type kommt aus unserer Datenbank. Es muss mir also gelingen, den Content-Type dynamisch festzulegen. Dazu muss ich wissen, wie man diesen Content-Type prinzipiell von text/plain auf text/html umstellt. Dann kann ich mir nämlich auch die Konvertierungsgeschichte sparen.
Folgender Versuch ergibt folgende Ausgabe:
PHP:
 $SendObject = Yii::$app->mailer->compose()
                            ->setFrom($model_eingang->mail_adresse_absender)
                            ->setTo($model->mail_antwortadresse)
                            ->setSubject($model->betreff)
                            ->setHtmlBody($model->bodytext)//bringt nix
                            ->setTextBody($model->bodytext, 'text/html');//bringt ooch nix
                    foreach ($anhang as $file) {
                        $SendObject->attach($folder_read . $file);
                    }
                    $SendObject->send();
So kommt die Mail an:
Code:
&auml;&uuml;&auml;&auml;&auml;&auml;&auml;&auml;&auml;&ouml;&ouml;&ouml;&ouml;&ouml;&ouml;&ouml;&ouml;&ouml;&Auml;&Auml;&Auml;&Auml;&Auml;&Auml;&Auml;&Auml;&uuml;&uuml;&uuml;&uuml;&uuml;&uuml;&uuml;&uuml;&uuml;&uuml;&uuml;&uuml;
Wie gesagt: Auf die Umwandlung mittels str_replace will ich verzichten, dafür 'text/html' nutzen...
Wenn du mir diese eigentlich eher triviale Abschlußfrage beantworten könntest, wäre ich in der Lage, diesen Thread als erfolgreich gelöst zu schliesen. Du hattest erwähnt, es reiche nicht aus, den Content-Type umzustellen. Da scheinst du Recht zu haben. Was muss ich also noch implementieren, damit die Mails im HTML-Format verschickt werden?
Vorab vielen Dank für Deine Hilfe!
 
Zuletzt bearbeitet:
Hat sich erledigt. folgende Codezeile verschickt die Mail endlich zu meiner vollsten Zufriedenheit
PHP:
 ->setHtmlBody($model->bodytext)
 
Zurück