Newsletter Probleme V4.6.23

Gesperrt
Paulchen
Beiträge: 12
Registriert: Mi 25. Mai 2005, 20:56
Kontaktdaten:

Newsletter Probleme V4.6.23

Beitrag von Paulchen » So 21. Okt 2007, 11:38

Hallo zusammen,

irgendwie bin ich zu blöde den HTML Newsletter einzurichten und brauche deshalb Hilfe.

Ich bin nach der Anleitung von HerrB Punkt für Punkt durchgegangen, aber leider ohne Erfolg.

- Neue Module Newsletter Form & Handler eingefügt und übersetzt.
- Neue Templates erstellt.
- Newsletter Handler und Template Artikel in einer öffentlichen Kategorie erstellt
- Newsletter erstellt und alles konfiguriert
- Newslett als HTML aktiviert und Template ausgewählt.
- Newsletter testweise an mich versandt mit Erfolg
- Email abgerufen, folgende Fehlermeldung in der Email erhalten:

Error 403

We're sorry, but we could not fulfill your request for /front_content.php?idclient=1&idlang=1&idcat=91&idart=265&noex=1&send=1 on this server. ......


Dann habe ich unter der Mandanteneinstellung geschaut ob Newsletter Email Adresse und idcatart richtig eingetragen wurde.
Soweit scheint alles zu stimmen, aber ich finde den Fehler einfach nicht.
Newsletter Artikel wird auch in der gewünschten Kategorie erzeugt.

TEXT Newsletter funktioniert einwandfrei, nur bei HTML Newsletter erhalte ich diese Meldung.

Kann mir jemand sagen, warum der Webserverpfad nicht eingetragen wird???
Was mache ich falsch??

wosch

Re: Newsletter Probleme V4.6.23

Beitrag von wosch » So 21. Okt 2007, 16:08

Paulchen hat geschrieben: - Email abgerufen, folgende Fehlermeldung in der Email erhalten:

Error 403

We're sorry, but we could not fulfill your request for /front_content.php?idclient=1&idlang=1&idcat=91&idart=265&noex=1&send=1 on this server. ......


Kann mir jemand sagen, warum der Webserverpfad nicht eingetragen wird???
Was mache ich falsch??
Diese Fehlermeldung findet man leicht im Internet.
Schuld ist nicht der Webserver oder das Newsletter-Modul.
(Von dort stammt auch nicht die Fehlermeldung)
Sondern eine Spamfilter-Software in Verbindung mit bestimmten Browsern.

Teste es mal mit einem anderen System/Konfiguration/Browser.

Paulchen
Beiträge: 12
Registriert: Mi 25. Mai 2005, 20:56
Kontaktdaten:

Re: Newsletter Probleme V4.6.23

Beitrag von Paulchen » So 21. Okt 2007, 16:35

wosch hat geschrieben:
Paulchen hat geschrieben: - Email abgerufen, folgende Fehlermeldung in der Email erhalten:

Error 403

We're sorry, but we could not fulfill your request for /front_content.php?idclient=1&idlang=1&idcat=91&idart=265&noex=1&send=1 on this server. ......


Kann mir jemand sagen, warum der Webserverpfad nicht eingetragen wird???
Was mache ich falsch??
Diese Fehlermeldung findet man leicht im Internet.
Schuld ist nicht der Webserver oder das Newsletter-Modul.
(Von dort stammt auch nicht die Fehlermeldung)
Sondern eine Spamfilter-Software in Verbindung mit bestimmten Browsern.

Teste es mal mit einem anderen System/Konfiguration/Browser.
Hallo wosch,

leider kann ich das nicht nachvollziehen.
Auch wenn ich ein Cronjob für den Newsletter anlege und ich den Cronjob anschaue, steht dort schon die Fehlermeldung drin.

Ich habe zwar mit einem anderen System (Browser & Email Programm) es noch mal versucht, aber dort ist es das gleiche. Ich glaube auch nicht das es daran liegen soll.

Der URL Pfad wird denke ich beim erzeugen des Newsletter einfach nicht mit angegeben.

wosch

Beitrag von wosch » So 21. Okt 2007, 17:24

So richtig "familär" bin ich mit dem neuen (HTML-)Newsletter auch noch nicht.
Aber hier stimmt etwas nicht.

Du schreibst:
- Email abgerufen, folgende Fehlermeldung in der Email erhalten: ...
Also ist das mal keine Fehlermeldung des Servers oder von Contenido.
Der URL Pfad wird denke ich beim erzeugen des Newsletter einfach nicht mit angegeben.
Beim Newsletter wird überhaupt keine URL/Pfad versendet.
Sondern der komplette Inhalt (incl. alles Head/Titel/.../Body/...) des angelegten (und dann versendeten) Artikels wird ausgelesen und auch so komplett an den Mail-Empfänger versendet.
Das habe ich mit einem Test-Newsletter gerade nochmals ausprobiert, es ist so.

Hier kannst du dich selber mal durchklicken und lesen was diese Fehlermeldung erzeugt:

Fehlermeldung bei google

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Mi 24. Okt 2007, 09:41

Contenido erzeugt den HTML-Newsletter, in dem es beim Versand (bzw. erzeugen des Jobs) den HTML-Newsletter-Artikel wie ein Browser abruft, einliest und als Newsletter weiterverarbeitet.

Es handelt sich dabei um die Funktion getHTMLMessage in der classes/class.newsletter.php, der Abruf erfolgt über die Funktion fsockopen.

Du solltest mal prüfen, was bei Dir ein

Code: Alles auswählen

echo "Path: ".$aURL["path"].$sFile;
nach

Code: Alles auswählen

$aURL 	= parse_url($cfgClient[$client]['path']['htmlpath']);
ausgibt (Versand eines Test-HTML-Newsletters sollte ausreichend sein).

Ist die URL, die ausgegeben wird, korrekt und verfügbar?

Gruß
HerrB
Zuletzt geändert von HerrB am Di 8. Jan 2008, 21:54, insgesamt 1-mal geändert.
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

Paulchen
Beiträge: 12
Registriert: Mi 25. Mai 2005, 20:56
Kontaktdaten:

Beitrag von Paulchen » Mi 24. Okt 2007, 09:56

Hallo HerrB,

habe mich gestern Abend mit der ganzen sache noch einmal intensiv damit auseinander gestezt und auch das mal überprüft was mir wosch gesagt hat.

Der Fehler konnte ich mittlerweile einkreisen bzw. habe ich die Ursache gefunden.
Ich habe die Erweiterung "bad-behavior" von Doger77 in Contenido eingebaut und das verursacht den Fehler. Sobald ich "bad-behavior" in die front_content.php include erhalte ich diese oben genannte Fehlermeldung.

Werde aber Deine Anregung in den nächsten Tagen mal ausprobieren.

Danke für die Info´s :wink:

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Mi 24. Okt 2007, 11:32

Das erklärt es natürlich - offensichtlich gefällt Bad Behaviour nicht die Art, wie die URL aufgerufen wird (oder ihm fehlt eine schöne Browser-Kennung). Da kenne ich mich wenig aus.

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

GaMbIt_
Beiträge: 674
Registriert: Do 16. Mär 2006, 16:17
Kontaktdaten:

Beitrag von GaMbIt_ » Mi 2. Jan 2008, 17:57

Ich hab auch so ein kleines Problemchen...

Versand vom Text Newsletter funktioniert einwandfrei...
HTML Newsletter funktioniert nicht... dafür auf meinem Testsystem... gagaga... sowas nervt gewaltig...

Ich hab die Klasse class.newsletter.php auch schon angepasst damit sie mir den Pfad ausgibt... funktioniert auch wunderbar...
Der Pfad ist korrekt und der Newsletter Artikel ist auch vorhanden.
Trotzdem will das Ding nicht.

Fehlermeldung:

Code: Alles auswählen

Path: /cms/front_content.php?idclient=1&idlang=1&idcat=14&idart=60&noex=1&send=1
Warning: fsockopen() [function.fsockopen]: unable to connect to www.domain.de:80 (Die Wartezeit für die Verbindung ist abgelaufen) in /www/Dxyz628/www.domain.de/htdocs/contenido/classes/class.newsletter.php on line 558
Das Contenido System gibt mir dafür eine weitere Meldung aus ohne dass ich die Klasse dazu bewegen musste.

Code: Alles auswählen

Der Newsletter wurde nicht gesendet (im Ganzen oder in Teilen):
Erfolgreich:

Fehlermeldungen:
Newsletter konnte nicht versendet werden: Keine HTML-Nachricht verfügbar
Wenn ich das richtig verstanden habe ruft die Klasse beim Versand die front_content.php mit verschiedenen Parametern auf und versendet diese...
1; ) die Funktion fsockopen() kann aber keine Datei aufrufen weil entweder der Zugriff nicht gestattet ist... (wirr... muss doch gehen...)
2; ) Die Funktion irgendetwas nicht tut was sie eigentlich sollte (warscheinlicher.. aber deswegen nicht besser nachzuvollziehen)
oder
3; ) fsockopen() garkeine datei aufrufen kann weil sie auf irgendeinem vHost vom Server hängt und irgendwie wo anders raus kommt als sie sollte... trotz korrekter Konfiguration...

GaMbIt_
Beiträge: 674
Registriert: Do 16. Mär 2006, 16:17
Kontaktdaten:

Beitrag von GaMbIt_ » So 6. Jan 2008, 18:36

Sodele... nachdem Ihr ja nicht aus dem Quark gekommen seid... :twisted:
(ich mach ja nur Spass... ist ja kein "Ich frag - Ihr hüpft" Forum... :mrgreen: )

Nochmal zur Sache...

Die generierte e-Mail aus einem Artikel konnte nicht zum Versand eingelesen werden da keine Socket Verbindung zustande kam.

Im Prinzip ist das (wenn man es weiss) recht schnell geklärt...
Durch das Load Balancing kann der Server nicht auf sich selbst zugreifen... naja... doch schon... aber nicht auf den Host selbst...
Also hab ich ein bischen rumgespielt und die "SERVER_ADDR" als Ziel für die Funktion fsockopen() angegeben...

Ich hab hier mal die Klasse mit allen Debug Infos usw zur Verfügung gestellt...
Meine Änderungen sind mit [GaMbIt] gekennzeichnet...

class.newsletter.php aus contenido/classes/

Code: Alles auswählen

<?php

/*****************************************
* File      :   $RCSfile: class.newsletter.php,v $
* Project   :   Contenido
* Descr     :   Newsletter recipient class
* Modified  :   $Date: 2007/09/03 23:03:36 $
*
* © four for business AG, www.4fb.de, generated by HerrB (01.08.2004)
*
* $Id: class.newsletter.php,v 1.15 2007/09/03 23:03:36 bjoern.behrens Exp $
******************************************/

	/**
	* If newsletter is HTML newsletter and necessary data available
	* returns final HTML message
	* @return string HTML message
	*/
	function getHTMLMessage()
	{
		global $lang, $client, $cfgClient, $contenido;

		if ($this->get("type") == "html" && $this->get("idart") > 0 && $this->htmlArticleExists()) {
			cInclude("classes", "contenido/class.client.php");
			cInclude("classes", "contenido/class.clientslang.php");
			cInclude("classes", "contenido/class.articlelanguage.php");

			// Article ID
			$iIDArt = $this->get("idart");

			// Category ID
			$oClientLang	= new cApiClientLanguage(false, $client, $lang);
			$iIDCat			= $oClientLang->getProperty("newsletter", "html_newsletter_idcat");
			unset ($oClientLang);

			// Get http username and password, if frontend is protected
			$oClient = new cApiClient($client);
			$sHTTPUserName = $oClient->getProperty("newsletter", "html_username");
			$sHTTPPassword = $oClient->getProperty("newsletter", "html_password");
			unset ($oClient);

			// Get HTML
			if ($iIDArt > 0 && $iIDCat > 0)
			{
				// Check, if newsletter is online and set temporarely online, otherwise
				$bSetOffline = false;
				$oArticles = new cApiArticleLanguageCollection;
				$oArticles->setWhere("idlang",	$this->get("idlang"));
				$oArticles->setWhere("idart",	$this->get("idart"));
				$oArticles->query();

				if ($oArticle = $oArticles->next())
				{
					if ($oArticle->get("online") == 0)
					{
						$bSetOffline = true;
						$oArticle->set("online", 1);
						$oArticle->store();
					}
					unset ($oArticle);
				}
				unset ($oArticles);

		   		//$sFile = $cfgClient[$client]['path']['htmlpath']."front_content.php?idclient=$client&idlang=$lang&idcat=$iIDCat&idart=$iIDArt&noex=1&send=1";
		   		$sFile	= "front_content.php?idclient=$client&idlang=$lang&idcat=$iIDCat&idart=$iIDArt&noex=1&send=1";
				$aURL 	= parse_url($cfgClient[$client]['path']['htmlpath']);

/**
 * Ab hier sind Anpassungen enthalten [GaMbIt]
 */

// Path Ausgabe für den Newsletter DEBUG Info [GaMbIt]
                                 echo '<div style="border:1px solid #666666; padding:4px; margin:0px 0px 5px 0px;"><b>Path :</b><br>' . $aURL["scheme"] . '://' . $aURL["host"] . $aURL["path"] . $sFile . '</div>';
// $aURL Dump [GaMbIt]
                                 echo '<div style="border:1px solid #666666; padding:4px; margin:0px 0px 5px 0px;"><b>Var Dump für $aURL :</b><br><pre>';
                                 var_dump($aURL) ;
                                 echo '</pre></div>';


				// TODO: Other schemes than http should be tested before use!
                                 // TODO: Other Host and Address Methods to open the Connection [GaMbIt]
				if ($aURL["scheme"] == "https") {
					$iPort		= 443;
					$sTarget	= "ssl://".$aURL["host"];
				} else {
					$iPort		= 80;
				     // $sTarget	= $aURL["host"]; // Herkömmliche Methode ausgehebelt [GaMbIt]
                                         $sTarget	= $_SERVER['SERVER_ADDR']; // Aufruf über die Server Adresse [GaMbIt]
				}
				if ($aURL["port"]) {
					$iPort		= $aURL["port"];
				}

				$iErrorNo 	= 0;
				$sErrorMsg	= "";


/**
 * DEBUG Info für $sTarget !!! hier tritt wohl der Fehler bei verschiedenen Load Balancern auf,
 * da der Hostname nicht automatisch der Server ist...
 * Problematisch könnte der Aufruf ohne Host-Header sein ohne den der Apache den vHost nicht identifizieren kann...
 */
                                 echo '<div style="border:1px solid #666666; background-color:#CCFFCC; padding:4px; margin:0px 0px 5px 0px;"><b>fsockopen() Hostname :</b><br>' . $sTarget . '</div>';

                                 echo '<div style="border:1px solid #666666; background-color:#FFCCFF; padding:4px; margin:0px 0px 5px 0px;"><b>SERVER_NAME Variable :</b><br>' . $_SERVER['SERVER_NAME'] . '<br />';
                                 echo '<b>HTTP_HOST Variable :</b><br /> ' . $_SERVER['HTTP_HOST'] . '<br />';
                                 echo '<b>SERVER_ADDR Variable :</b><br /> ' . $_SERVER['SERVER_ADDR'] . '<br />';
                                 echo '<b>REMOTE_ADDR Variable :</b><br /> ' . $_SERVER['REMOTE_ADDR'] . '<br />';
                                 echo '<b>REMOTE_HOST Variable :</b><br /> ' . $_SERVER['REMOTE_HOST'] . '<br />';
                                 echo 'gibt die Adresse des aufrufenden Computer aus. Da dieser in einer lokalen Entwicklungsumgebung der bereitstellende Server sein kann, könnte diese Information evtl nützlich sein.<br /><i>Für <b>REMOTE HOST</b> muss HostnameLookups auf On gestellt sein (httpd.conf)</i><br />!!! Hilft natürlich nicht in Clusterconfigurationen wo die Newsletterkomponenten auf einen anderen Server ausgelagert sind oder die Contenido Installation gesplittet ist!!!';
                                 echo '</div>';

// Ende der Debug Ein, bzw. Ausgaben [GaMbIt]

				if ($iHandler = fsockopen($sTarget, $iPort, $iErrorNo, $sErrorMsg, 30))
				{
					// If you use HTTP 1.1 you may get chunked data... you could solve
					// this easily by using HTTP 1.0, but then you get a problem with
					// virtual servers, as HTTP 1.0 doesn't use the host information...
					fputs($iHandler, "GET ".$aURL["path"].$sFile." HTTP/1.1\r\n");
					fputs($iHandler, "Host: ".$aURL["host"]."\r\n");

					// Maybe the website has been protected using .htaccess, then login
					if ($sHTTPUserName != "" && $sHTTPPassword != "")
					{
						fputs($iHandler, "Authorization: Basic " . base64_encode("$sHTTPUserName:$sHTTPPassword") . "\r\n");
					}

					fputs($iHandler, "Referer: http://".$aURL["host"]."\r\n");
					fputs($iHandler, "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n");
					fputs($iHandler, "Connection: close\r\n\r\n");

					// Get the HTTP header and body separately
					$sHTML		= "";
					$sHeader	= "";
					$bBody		= false;
					while (!feof($iHandler))
					{
						// $sLine = fgets($iHandler, 4096);
						$sLine = fgets($iHandler, 1024);
						if ($bBody) {
							$sHTML .= $sLine;
						} else if ($sLine == "\r\n") {
							$bBody = true;
						} else {
							$sHeader .= $sLine;
						}
					}
					fclose ($iHandler);

					$sHTML = $this->_deChunkHTTPBody($sHeader, $sHTML);

					// If someone likes to use anchors in html newsletters (*sigh*)
					// the base href tag has to be removed - that means, we have to fix
					// all source paths manually...
					if (getEffectiveSetting('newsletter', 'remove_base_tag', "false") == "true")
					{
						// Remove base tag
						$sHTML = preg_replace('/<base href=(.*?)>/is', '', $sHTML, 1);

						// Fix source path
						// TODO: Test any URL specification that may exist under the sun...
						$sHTML = preg_replace('/[sS[rR][cC][ ]*=[ ]*"([^h][^t][^t][^p][^:].*)"/', 'rc="'.$cfgClient[$client]['path']['htmlpath'].'$1"', $sHTML);
						$sHTML = preg_replace('/[hH][rR][eE][fF][ ]*=[ ]*"([^h][^t][^t][^p][^:][A-Za-z0-9#\.?\-=_&]*)"/', 'href="'.$cfgClient[$client]['path']['htmlpath'].'$1"', $sHTML);
						$sHTML = preg_replace('/url\((.*)\)/', 'url('.$cfgClient[$client]['path']['htmlpath'].'$1)', $sHTML);

						// Now replace anchor tags to the newsletter article itself just by the anchor
						$sHTML = str_replace($cfgClient[$client]['path']['htmlpath']."front_content.php?idart=".$iIDArt."#", "#", $sHTML);
					}

			   		/* The following is a bad idea, as all needed objects have to be globally
			   		 * available... (e.g. $db, $sess and so on) - but it may be a solution,
			   		 * if fsockopen is not available
			   		# I don't know, why we should get idartlang...
					# $idartlang	= getArtLang ($iIDArt, $lang);
   					$sCode = conGenerateCode($iIDCat, $iIDArt, $lang, $client);

			   		$db = new DB_Contenido;
					ob_start();
					eval("?>".stripslashes($sCode)."<?php\n");
					$sHTMLMessage = ob_get_contents();
		    		ob_end_clean();
	    			unset ($sCode); */

	    			$sReturn = $sHTML;
				} else {
					if ($contenido) { // Use i18n only in backend
						$sErrorText = i18n("There was a problem getting the newsletter article using http. Error: %s (%s)");
					} else {
						$sErrorText = "There was a problem getting the newsletter article using http. Error: %s (%s)";
					}

					$this->_sError = sprintf($sErrorText, $sErrorMsg, $iErrorNo);
					$sReturn = false;
				}

				// Set previously offline article back to offline
				if ($bSetOffline)
				{
					$oArticles = new cApiArticleLanguageCollection;
					$oArticles->setWhere("idlang",	$this->get("idlang"));
					$oArticles->setWhere("idart",	$this->get("idart"));
					$oArticles->query();

					if ($oArticle = $oArticles->next())
					{
						$oArticle->set("online", 0);
						$oArticle->store();
					}
					unset ($oArticle);
					unset ($oArticles);
				}

				return $sReturn;
			} else {
				return false;
			}
		} else {
			return false;
		}
	}
Ich hab die Klasse mal gekürzt...
Jetzt ist nur noch die Methode getHTMLMessage() gepostet...
Wenn ich die gesamte Klasse poste steigt das Forum aus ;-)

frankee
Beiträge: 8
Registriert: Di 12. Feb 2013, 15:32
Kontaktdaten:

Re: Newsletter Probleme V4.6.23

Beitrag von frankee » Di 12. Feb 2013, 17:59

Hallo, ich habe dasselbe Problem. Also Plain Text wird verdsendet, der HTML Newsletter aber nicht. Verstehe aber die Lösung meines Vorredners nicht. Kann mir jemand konkreter sagen, was ich ändern muss und wo?

Gesperrt