Zum Inhalt springen

Unerklärlicher Effekt, doppelte punkte in URLs

Erstellt am 14. Juni 2013 · 17 Antworten · letzte Antwort am 1. Juli 2013

Tags: URLs & Routing, E-Mail-Versand, Frage

florist ·

Hallo liebe Gemeinde

ich stehe vor einem sehr seltsamen Problem.
Wenn vom Typo3 System E-Mails mit Links versendet werden, habe ich völlig unregelmässig in manchen URLs einen doppelten Punkt
z.B. www..domain.com oder auch www.domain..com oder www.domain.com/index..php

Das Ganze verhätlich sehr inkonsistent und tritt nur vereinzelt bei Links auf.
z.B Newsletterversand mit direct_mail von ca. 50 Links im Newsletter tritt bei 2 der Effekt auf, versende ich ihn nochmals tritt der bei anderen Links auf, nicht mehr bei den selben.
Zunächst dacht ich es ist eine Konfigurationsgeschcihte, aber nun ist es mir auch in anderen Extensions aufgefallen.
(toctoc_comments versendet E-Mails um kommentare vom Administrator freischalten lassen zu können, auch bei einigen Links in diesen Mails kommt der ".." effekt vor.

ich kann mir nicht erklären woran das liegen soll, es laufen viele typo3 Seiten auf diesem server mit denselben Konfigurationen, Extensions und Versionen. Bisher hatte ich das Problem nie.

Kann es an der Relurl Config liegen? oder daran dass ich mir auf dieser spezeillenseite die URLs mit ".html" am ende generieren lasse?
Bin für Jede Idee dankbar, denn auch freund Google konnte mir überhaupt nicht weiterhelfen.

Grüsse
Flo

karlchen ·

Hi,

Mal ne frage um die Suche eventuell etwas einzugrenzen.

der Doppelpunkt ist also direkt in der URL in der E-Mail drin oder erst nach dem Aufruf des Links im Browser ?

Taucht der Link nur im Domain Teil auf oder auch in allem anderen danach ?

florist ·

Hi Karlchen

Richtig der link ist wirklich so in der E-Mail drin.
Rufe ich zb. die Newsletterseite aus typo3 direkt im browser auf, passen alle links.
Nachdem ich Sie versendet hab, stimmen sie teilweise nicht mehr und die doppelten Punkte sind drin.

Zuerst dachte ich es handelt sich um direct_mail problem, aber wie gesagt, hab es nun auch schon bei einer 2. Extension, die E-Mails versendet bemerkt.

Vielleicht noch ein Hinweis, es scheint nicht nur an den Links zu liegen, wenn ich mir den Quelltext des versendeten Newsletters anseh, sind teilweise auch schon die CSS Klassen mit doppelpunkt, aber auch nicht alle sondern nur vereinzelt.

a.link {}
a.link2 {}
a..link3 {}

Bei Links hab ich bisher folgendes bemerkt:
www.domain..com
subdomain..email@mail.com
aber auch www.domain.com/index..php?id=1

Wie gesagt auf dem Server laufen ca 10 Typo3 Seiten, die alle dieselben Einstellungen haben, der Effekt tritt nur bei einer Installation auf (alleinstellungsmerkmal ist einzig und allein das realurl verwendet wird und nicht cooluri wie bei den anderen) version ist TYPO3 v4.7.1. Effekt tritt erst nach versenden von Mails auf, sonst klappen URLs wunderbar.

karlchen ·

hmmm,

alle E-Mails in TYPO3 werden über das Tool SwiftMailer verschickt und da scheint auch das Problem zu liegen.
Google mal nach "swiftmailer double dot" da findet man einige Diskussionen auf Github, vielleicht hilft dir eine davon weiter die richtige Anpassung zu machen.

florist ·

hmmmm.... ist gut! ich steh ziemlich auf dem Schlauch.
Aber deinem Tipp mit dem Swiftmailer werd ich mal nachgehen, vielleicht bringts mich weiter.
Ich meld mich hier wieder, und geb feedback, morgen muss der newsletter raus, brrrr#paralyzed#

florist ·

Nein bis jetzt noch nicht. Das Problem besteht immer noch.
Newsletter ging zwar raus, da daer effekt glücklicherweise diesmal nur bei einem Link auftrat.
Bin momentan noch an einer Kopie der Seite dran, auf der ich mal alles testen kann, da die momentane Seite live ist.
Werde Anfang nä. Woche richtig zum testen kommen.
Bleib mit dran :-)

florist ·

So, ich bin wieder an dem Problem dran.
Ich hab diesen thread zum Thema gefunden:
https://github.com/swiftmailer/swiftmailer/issues/72

Anscheinend liegt es wirklich an der Swiftmailer config.
Hab bereits den sendmail mit dem -i parameter ergänzt, leider ohne Erfolg

[MAIL][transport_sendmail_command] = /usr/sbin/sendmail -bs -i

Probier jetzt mal den Ecoder auf 7bit umzustellen bzw. den Zeichensatz auf utf8

$message->setEncoder(\Swift_Encoding::get7BitEncoding());
$message->setCharset('UTF-8');

Ich bin mir aber nicht sicher, wo ich das zun muss? Im TYPO3 Core?

florist ·

Ich bin noch auf etwas weiteres gestossen, wie auch in dem github link beschrieben. taucht das Problem erst beim senden von mehreren Mails auf.
Wenn ich über direkt_mail einen Newsletter an:
- 1 adresse verschicke (send test-mail funktion), kein korrupter link
- 5 Adressen verschicke habe ich 1 korrupten link.
- wenn ich an 1000+ verschicke sind es schon 3 korrupte links

Kannst du mir sagen in welcher Datei ich den hier beschriebenen Workaround testen kann? typo3 4.7.
https://github.com/swiftmailer/swiftmailer/issues/216

karlchen ·

hi,

im Ordner t3lib/utility gibt es die Datei class.t3lib_utility_mail.php in dieser wird der gesamte E-Mail kram von TYPO3 geregelt. Über einen Hook in dieser Datei wird dann SwiftMailer integriert und der versandt dort deligiert.

im Ordern t3lib/mail/ findest du eine Datei class.t3lib_mail_swiftmaileradapter.php in dieser Datei wird Swiftmailer dann ins System integriert.

florist ·

Dankschön Karlchen, ich probier das Ganze mal aus.
Allerdings beweg ich mich auf dünnem eis, da ich kein PHP-Entwickler bin:o

florist ·

Puh...
Ich glaub das übersteigt meine Fähigkeiten.
Ich weiss nicht genau wie oder wo ich in der class.t3lib_mail_swiftmaileradapter.php das encoding anpassen kann.

Es gibt hier eine Variable

$encoding = '';

Aber was muss ich hier eintragen, damit ich mal das 7-bit encoding aktivieren kann?

protected function setBody($body) {
		if ($this->boundary) {
				// handle multi-part
			$bodyParts = preg_split('/--' . preg_quote($this->boundary) . '(--)?/m', $body, NULL, PREG_SPLIT_NO_EMPTY);
			foreach ($bodyParts as $bodyPart) {
					// skip empty parts
				if (trim($bodyPart) == '') {
					continue;
				}
					// keep leading white space when exploding the text
			$lines = explode(LF, $bodyPart);
				// set defaults for this part
				$encoding = '';
				$charset = 'utf-8';
				$contentType = 'text/plain';
					// skip intro messages
				if (trim($lines[0]) == 'This is a multi-part message in MIME format.') {
					continue;
				}
					// first line is empty leftover from splitting
				array_shift($lines);
				while (count($lines) > 0) {
					$line = array_shift($lines);
					if (preg_match('/^content-type:(.*);( charset=(.*))?$/i', $line, $matches)) {
						$contentType = trim($matches[1]);
						if ($matches[2]) {
							$charset = trim($matches[3]);
						}
					} elseif (preg_match('/^content-transfer-encoding:(.*)$/i', $line, $matches)) {
						$encoding = trim($matches[1]);
					} elseif (strlen(trim($line)) == 0) {
							// empty line before actual content of this part
						break;
					}
				}
					// use rest of part as body, but reverse encoding first
				$bodyPart = $this->decode(implode(LF, $lines), $encoding);
				$this->message->addPart($bodyPart, $contentType, $charset);
			}
		} else {
				// Handle single body
				// The headers have already been set, so use header information
			$contentType = $this->message->getContentType();
			$charset = $this->message->getCharset();
			$encoding = $this->message->getEncoder()->getName();
				// reverse encoding and set body
			$rawBody = $this->decode($body, $encoding);
			$this->message->setBody($rawBody, $contentType, $charset);
		}
	}
karlchen ·

hmm, vielleicht erst mal nur ein Strohhalm ...

Hier wird ebenfalls ein DoppelPunkt Problem beschrieben http://forge.typo3.org/issues/47064, allerdings auch ein einfacherer Workaround:

We solved this problem by switching the default type for mail transport to 'smtp' instead of 'mail'.

$TYPO3_CONF_VARS['MAIL']['transport'] = 'smtp';

Sollte man im InstallTool Einstellen können.

karlchen ·

vielleicht auch nur noch mal um deinen Workaround zu testen
ich nehme mal an deinen Newsletter verschickst du über Direct_mail und dort hast du einen Scheduler Task eingerichtet,der das automatische Senden übernimmt ?

Dann kannst du dir zum testen mal diese Datei ansehen:
direct_mail/res/scripts/class.dmailer.php -> und dort die Funktion sendTheMail(),

dort würde ich mal testhalber vor dem

//TODO: do we really need the return value?
		$sent = $mailer->send();

deinen Workaorund testen

$mailer->setEncoder(Swift_Encoding::get7BitEncoding());

//TODO: do we really need the return value?
		$sent = $mailer->send();
florist ·

Meister Karlchen, dein Tipp war Gold wert!!!

We solved this problem by switching the default type for mail transport to 'smtp' instead of 'mail'.
$TYPO3_CONF_VARS['MAIL']['transport'] = 'smtp';

Und ich gram da im TYPO3 Core umher, dabei liegt das Problem ganz wo anders.
Über SMTP klappt nun scheinpaar alles. Zumindest auch bei den Tests mit 10 Adressen.
Den Grossen Test gibts dann am Mittwoch wenn 10000 raus gehen :-p

Danke nochmal für deine Hilfe und shcönes Wochenende

karlchen ·

Mensch, das freut mich das es geklappt hat 🙂

Mal so nebenbei, woher würdest du wissen das am Mittwoch alles klappt ? Habt ihr irgendein Monitoring oder einfach nur Abonnenten die sich melden wenn was nicht geht ?

Wir verschicken nämlich auch mit direct_mail Newsletter und da gibt es auch gerade ein Problem was ich irgendwie noch klären muss...

florist ·

Moin moin!

Naja, Mittwoch gehen bei uns ne Menge Newsletter raus, unter anderem auch der Problemfall. Wir haben eine geringe Anzahl an Testern, die uns Rückmeldung geben.
Aber bei meinem Problem dürfte das einfach werdne, dann die ".." sind ja in jeder Mail aufgetreten, d.h. wenn 10 leute keine .. drin haben, sollten auch die anderen sauber sein.
Was hast du für ein Problem? Vielleicht kann ich die weiterhelfen. Bin Zwar kein codecrack, aber mit directmail doch ziemlich fit. ;-)

karlchen ·

Moin,

ach so, na gut statistische Hochrechnungen also 🙂
Mein Problem habe ich mal hier als neuen Beitrag erstellt: #115288
Wenn da ne Idee hast, immer her damit. 🙂