Spamassassin en notify

Installatie lukt niet? Plotseling een foutmelding. Of weet je niet hoe iets werkt. Problemen met phpBB2 kun je in dit archief opzoeken.
Forumregels

Sinds 1 januari 2009 wordt phpBB2 niet meer ondersteund.
Onderstaande informatie is verouderd en dient uitsluitend als archief.
phpBB2.0.x
Gesloten
Henk van de Kamer
Berichten: 49
Lid geworden op: 01 jun 2004, 12:09

Spamassassin en notify

Bericht door Henk van de Kamer » 01 jun 2004, 12:37

Hoi,

Het probleem is bekend op phpBB.com, maar de ontwikkelaars daar snappen er weinig van. Of ze doen het af met simpele suggesties zonder verder uitzoekwerk. Waar het om gaat? Heel simpel, de notificatie die je kunt krijgen als er iets nieuws gepost wordt, wordt door SpamAssassin als spam gezien:

Code: Selecteer alles

This mail is probably spam. The original message has been attached along with this report, so you can recognize or block similar unwanted mail in future. See http://spamassassin.org/tag/ for more details.

Content preview: Hello, You are receiving this email because you are
watching the topic, "xxx" at yyy. This topic has received a reply since your last visit. You can use the following link to view the replies made, no more notifications will be sent until you visit the topic. [...]

Content analysis details: (5.80 points, 5 required)
NO_REAL_NAME (0.8 points) From: does not include a real name
TO_EMPTY (2.6 points) To: is empty
INVALID_DATE (0.6 points) Invalid Date: header (not RFC 2822)
EXCUSE_1 (0.7 points) BODY: Gives a lame excuse about why you were sent this spam
MISSING_HEADERS (0.5 points) Missing To: header
MISSING_OUTLOOK_NAME (0.6 points) Message looks like Outlook, but isn't
De eerste suggestie was een upgrade naar de nieuwste versie. Het forum gebruikte 2.0.5 en de changelog geeft aan dat sindsdien één en ander gewijzigd is in het mailen. Na een upgrade naar 2.0.8a verdwijnt echter alleen de INVALID_DATE. Deze werd veroorzaakt omdat de tijdzone in versie 2.0.5 niet juist werd gezet. De overige problemen blijven.

Zeer zwaar wordt het lege To veld aangerekend. In de suggesties stond ook iets over een sendmail_fix welke het To-veld aanpast naar een spatie in plaats van Undisclosed-recipients:;. Echter de volgende testpagina geeft aan dat het aanpassen van het To-veld juist wordt doorgevoerd:

Code: Selecteer alles

<?php

define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);

$to = ($to == '') ? (($board_config['sendmail_fix']) ? ' ' : 'Undisclosed-recipients:;') : $to;

print "---$to---<br>";

?>
Toevallig ontdekten we nog een aantal ander fora met hetzelfde probleem of juist niet. Je krijgt een TO_MALFORMED (met veel minder strafpunten) als het forum een relay gebruikt in plaats van lokaal verstuurd.

Na de nodige experimenten ontdekten we dat een aantal hosters voor de lokale mail deze To aanpassen naar een lege string, zelfs als er Undisclosed-recipients:; staat! Kortom het probleem is dus niet echt phpBB, maar een combinatie van de mailroute die daarop volgt.

Nu het probleem duidelijk is, moet er voor mijn gevoel ook een oplossing te bedenken zijn. Zoals gezegd wordt het To veld (terecht) zeer zwaar geteld in SpamAssassin. Hier is dus de meeste eer te behalen. Andere oplossing is omschakelen naar Nederlands, dan vervalt het slappe excuus (EXCUSE_1) :)

Ben benieuwd naar suggesties...
Henk van de Kamer
auteur Het Lab

Gebruikersavatar
WebSiteNet
Berichten: 6524
Lid geworden op: 20 okt 2003, 16:56
Locatie: Wieringerwerf
Contacteer:

Bericht door WebSiteNet » 01 jun 2004, 15:46

Ten eerste: Welkom.

Je site is hier al meerdere keren ten sprake gekomen.

Mischien is er een makkelijke opplossing. Ik denk dat spamassin ook mailtjes weigert die automatisch verstuurd worden. Dus moet het niet lijken als of hij met php verstuurd is. Mischien werkt dit:

OPEN includes/emailer.php en VIND rond lijn 195 in de send() functie:

Code: Selecteer alles

		$this->extra_headers = (($this->reply_to != '') ? "Reply-to: $this->reply_to\n" : '') . (($this->from != '') ? "From: $this->from\n" : "From: " . $board_config['board_email'] . "\n") . "Return-Path: " . $board_config['board_email'] . "\nMessage-ID: <" . md5(uniqid(time())) . "@" . $board_config['server_name'] . ">\nMIME-Version: 1.0\nContent-type: text/plain; charset=" . $this->encoding . "\nContent-transfer-encoding: 8bit\nDate: " . date('r', time()) . "\nX-Priority: 3\nX-MSMail-Priority: Normal\nX-Mailer: PHP\nX-MimeOLE: Produced By phpBB2\n" . $this->extra_headers . (($cc != '') ? "Cc: $cc\n" : '')  . (($bcc != '') ? "Bcc: $bcc\n" : '');
Verwijder daar uit:

Code: Selecteer alles

\nX-Mailer: PHP\nX-MimeOLE: Produced By phpBB2

Henk van de Kamer
Berichten: 49
Lid geworden op: 01 jun 2004, 12:09

Bericht door Henk van de Kamer » 01 jun 2004, 18:46

WebSiteNet schreef:Je site is hier al meerdere keren ten sprake gekomen.
Heb ik gezien in de logs. Verder heeft iemand contact opgenomen om het over te nemen. Maar aangezien ik nog lang niet klaar ben, leek mij dat wat voorbarig :)
WebSiteNet schreef:Mischien is er een makkelijke opplossing. Ik denk dat spamassin ook mailtjes weigert die automatisch verstuurd worden. Dus moet het niet lijken als of hij met php verstuurd is. Mischien werkt dit:
Mogelijk. Ik heb echter de indruk dat Spamassassin niet hierover struikelt, maar over deze toevoeging:

Code: Selecteer alles

X-MSMail-Priority: Normal\n
Deze kon wel eens de verklaring voor:

Code: Selecteer alles

MISSING_OUTLOOK_NAME (0.6 points) Message looks like Outlook, but isn't 
zijn. Dit wordt de volgende die we gaan testen. Ondertussen zijn we ook een heel stuk verder met de mailfunctie bij de providers waar het mis gaat. phpBB voegt in een lege To: (wat het geval is in een notify) een Undisclosed recipients:; toe. De mailscripts bij deze providers slopen dat er weer uit omdat het geen e-mailadres bevat. Vervolgens blijft dan een lege To: over en die wordt dus afgestraft met TO_EMPTY. Na experimenteren hebben we de volgende oplossing bedacht:

Code: Selecteer alles

			$to = ($to == '') ? (($board_config['sendmail_fix']) ? ' ' : '"' . $board_config['sitename'] . '" <Undisclosed-recipients>') : $to;
Omdat er tussen de <> geen @ voorkomt, voegt het mailscript bij beide providers hier keurig de FQDN van de machine toe. Waardoor een eventueel gebruik van het e-mailadres keurig in de logs van de provider terecht komt, moet die dat maar gaan oplossen :)

Hoe dan ook, het To: veld wordt zo helemaal perfect, er is nu ook een "echte naam". Hierdoor zijn:

Code: Selecteer alles

TO_EMPTY (2.6 points) To: is empty
MISSING_HEADERS (0.5 points) Missing To: header
Opgelost en krijgen we er geen:

Code: Selecteer alles

NO_REAL_NAME (0.8 points) From: does not include a real name
maar dan voor To: voor terug. Een zelfde iets moeten we ook doorvoeren in de From. Als we dan ook nog even de Engelstalige notify mail aanpassen naar iets wat een beter excuus lijkt, zijn we volgens mij klaar. Ben eigenlijk wel benieuwd of het bovenstaande over Outlook waar is. Laat ik nog weten.
Henk van de Kamer
auteur Het Lab

Henk van de Kamer
Berichten: 49
Lid geworden op: 01 jun 2004, 12:09

Bericht door Henk van de Kamer » 03 jun 2004, 13:20

Even een tussentijdse update. Weghalen van de X-MSMail-Priority is niet de oplossing. Ga proberen of het weghalen van de andere twee regels effect heeft. Maar ik heb een beetje de indruk dat Spamassassin ervan uit gaat dat iedereen Outlook of Outlook Express gebruikt :twisted:

De genoemde aanpassing van het To: veld werkt bij één provider, bij een ander lijkt het erop dat er nog steeds een leeg To: veld ontstaat door de mailroutine op die webserver. Hoe dan ook, het probleem is definitief zeker niet volledig toe te schrijven aan phpBB, maar grotendeels aan mailscripts bij de hosting bedrijven. Een andere oplossing die we nog gaan testen als zeker is dat het mailscript ook onze nieuwe vorm stript is een echt e-mailadres als no-reply@domein.xxx gebruiken.

Voor het Engelstalige excuus probleem, is hier een mogelijke oplossing gevonden. Moeten we nog uittesten, maar het idee is denk ik duidelijk.

Op het forum waar de aangepaste To: wel werkt, gaat de spamscore van 5.2 naar 2.1. Daarmee moet het zelfs in zeer streng afgestelde filters toch eigenlijk geen spam meer zijn :)

We blijven experimenteren totdat we op nul uitkomen. Want dan is tenminste zeker dat het geen spam is en het gewoon aankomt. Moet denk ik wel gaan lukken...
Henk van de Kamer
auteur Het Lab

Henk van de Kamer
Berichten: 49
Lid geworden op: 01 jun 2004, 12:09

Bericht door Henk van de Kamer » 03 jun 2004, 14:43

Henk van de Kamer schreef:Even een tussentijdse update. Weghalen van de X-MSMail-Priority is niet de oplossing. Ga proberen of het weghalen van de andere twee regels effect heeft. Maar ik heb een beetje de indruk dat Spamassassin ervan uit gaat dat iedereen Outlook of Outlook Express gebruikt :twisted:
Ik ben maar eens in de source van SpamAssassin gedoken en vind daar het volgende:

Code: Selecteer alles

header __HAS_X_MAILER      exists:X-Mailer
header __HAS_OUTLOOK_IN_MAILER   X-Mailer =~ /Microsoft (CDO|Outlook|Office Outlook)\b/
meta MISSING_OUTLOOK_NAME   ((__HAS_MIMEOLE || __HAS_MSMAIL_PRI) && __HAS_X_MAILER && !__HAS_OUTLOOK_IN_MAILER && !__HAS_SQUIRRELMAIL_IN_MAILER)
describe MISSING_OUTLOOK_NAME   Message looks like Outlook, but isn't 
Als ik dit goed begrijp moet het eerste stuk false worden in geval we (terecht) een X-Mailer willen hebben die ongelijk is aan een Microsoft product of Squirrelmail. Dit verklaard ook waarom het weghalen van de voor mijn gevoel verantwoordelijke regel MSMail priority geen effect had. Want OLE is ook een typisch Windows iets. Ofwel die moet dus weg :twisted:

Nu maar duimen of mijn logica nog steeds werkt. Wordt vervolgd.
Henk van de Kamer
auteur Het Lab

Henk van de Kamer
Berichten: 49
Lid geworden op: 01 jun 2004, 12:09

Bericht door Henk van de Kamer » 09 jun 2004, 20:16

Opgelost. Zelfs de Engelstalige notificatie mailtjes krijgen nu in Spamassassin een score van 0,0 ofwel geen spam :)

De benodigde stappen:

Code: Selecteer alles

Content analysis details: (5.80 points, 5 required)
NO_REAL_NAME (0.8 points) From: does not include a real name
TO_EMPTY (2.6 points) To: is empty
INVALID_DATE (0.6 points) Invalid Date: header (not RFC 2822)
EXCUSE_1 (0.7 points) BODY: Gives a lame excuse about why you were sent this spam
MISSING_HEADERS (0.5 points) Missing To: header
MISSING_OUTLOOK_NAME (0.6 points) Message looks like Outlook, but isn't
NO_REAL_NAME
Deze heeft te maken met de From: zoals die wordt samengesteld in de 2.0.8a code:

Code: Selecteer alles

"From: $this->from\n" : "From: " . $board_config['board_email'] . "\n"
Een net e-mailadres is echter opgebouwd als volgt:

Code: Selecteer alles

From: "Henk van de Kamer" <mijn@emailadres.xxx>
Kortom we moeten het geheel verbouwen tot bijvoorbeeld:

Code: Selecteer alles

"From: \"" . $board_config['sitename'] . "\" <$this->from>\n" : "From: \"" . $board_config['sitename'] . "\" <" . $board_config['board_email'] . ">\n"
Zorg er trouwens voor dat je minimaal de standaard sitename aanpast. Want yourdomain.com levert een:

Code: Selecteer alles

FRIEND_AT_PUBLIC (2.9 points) sent to you@you.com or similar 
op :)


TO_EMPTY
MISSING_HEADERS

Deze bleek het meest lastige om op te lossen. Het probleem zit hem in de mailscripts die bij de meeste providers de verzonden e-mail verder opknappen. De truc van phpBB wordt daarbij te niet gedaan. Omdat deze truc ook niet altijd werkt met sendmail, wordt er ook nog eens een fix gebruikt. Uiteindelijk hebben wij de volgende oplossing bedacht:

To: "Forumtitel" <Undisclosed-recipients>

Bij de meeste providers wordt dit aangevuld met een @machinenaam.provider.xxx en daarmee krijgen zij in hun maillog de nodige user unknowns. Dat is echter hun probleem, moeten ze maar zorgen voor een net mailscript dat geen lege To: van de phpBB truc maakt :)

De patch:

Code: Selecteer alles

$to = ($to == '') ? '"' . $board_config['sitename'] . '" <Undisclosed-recipients>' : $to;

INVALID_DATE
Deze komt door een incorrecte tijdzone van 0 ipv +0100 of iets dergelijks. Is opgelost vanaf 2.0.6 en de enige die dus opgelost wordt als je het standaardadvies van patchen naar 2.0.8a opvolgt.


EXCUSE_1
Deze wordt veroorzaakt als iemand de Engelse taal gebruikt. In het phpBB forum, is een betere tekst te vinden.


MISSING_OUTLOOK_NAME
Deze komt doordat in de headers een tweetal zaken worden toegevoegd die typisch voor Outlook en aanverwanten zijn. De oplossing is gewoon beide verwijderen:

Code: Selecteer alles

X-MSMail-Priority: Normal\nX-Mailer: PHP\nX-MimeOLE: Produced By phpBB2\n
naar:

Code: Selecteer alles

X-Mailer: PHP\n
Zoals hierboven uit de Spamassassin code blijkt, heeft het verwijderen van één van beide geen nut.

Voor wie een mooie diff ten opzichte van een standaard 2.0.8a wil:

Code: Selecteer alles

diff -crbB phpBB2.0.8a/includes/emailer.php antispam2.0.8a/includes/emailer.php
*** phpBB2.0.8a/includes/emailer.php	Wed Sep 10 18:37:50 2003
--- antispam2.0.8a/includes/emailer.php	Wed Jun  9 20:11:52 2004
***************
*** 192,198 ****
  		$bcc = (count($this->addresses['bcc'])) ? implode(', ', $this->addresses['bcc']) : '';
  
  		// Build header
! 		$this->extra_headers = (($this->reply_to != '') ? "Reply-to: $this->reply_to\n" : '') . (($this->from != '') ? "From: $this->from\n" : "From: " . $board_config['board_email'] . "\n") . "Return-Path: " . $board_config['board_email'] . "\nMessage-ID: <" . md5(uniqid(time())) . "@" . $board_config['server_name'] . ">\nMIME-Version: 1.0\nContent-type: text/plain; charset=" . $this->encoding . "\nContent-transfer-encoding: 8bit\nDate: " . date('r', time()) . "\nX-Priority: 3\nX-MSMail-Priority: Normal\nX-Mailer: PHP\nX-MimeOLE: Produced By phpBB2\n" . $this->extra_headers . (($cc != '') ? "Cc: $cc\n" : '')  . (($bcc != '') ? "Bcc: $bcc\n" : ''); 
  
  		// Send message ... removed $this->encode() from subject for time being
  		if ( $this->use_smtp )
--- 192,198 ----
  		$bcc = (count($this->addresses['bcc'])) ? implode(', ', $this->addresses['bcc']) : '';
  
  		// Build header
! 		$this->extra_headers = (($this->reply_to != '') ? "Reply-to: $this->reply_to\n" : '') . (($this->from != '') ? "From: \"" . $board_config['sitename'] . "\" <$this->from>\n" : "From: \"" . $board_config['sitename'] . "\" <" . $board_config['board_email'] . ">\n") . "Return-Path: " . $board_config['board_email'] . "\nMessage-ID: <" . md5(uniqid(time())) . "@" . $board_config['server_name'] . ">\nMIME-Version: 1.0\nContent-type: text/plain; charset=" . $this->encoding . "\nContent-transfer-encoding: 8bit\nDate: " . date('r', time()) . "\nX-Priority: 3\nX-Mailer: PHP\n" . $this->extra_headers . (($cc != '') ? "Cc: $cc\n" : '')  . (($bcc != '') ? "Bcc: $bcc\n" : '');
  
  		// Send message ... removed $this->encode() from subject for time being
  		if ( $this->use_smtp )
***************
*** 207,213 ****
  		else
  		{
  			$empty_to_header = ($to == '') ? TRUE : FALSE;
! 			$to = ($to == '') ? (($board_config['sendmail_fix']) ? ' ' : 'Undisclosed-recipients:;') : $to;
  	
  			$result = @mail($to, $this->subject, preg_replace("#(?<!\r)\n#s", "\n", $this->msg), $this->extra_headers);
  			
--- 207,213 ----
  		else
  		{
  			$empty_to_header = ($to == '') ? TRUE : FALSE;
! 			$to = ($to == '') ? '"' . $board_config['sitename'] . '" <Undisclosed-recipients>' : $to;
  
  			$result = @mail($to, $this->subject, preg_replace("#(?<!\r)\n#s", "\n", $this->msg), $this->extra_headers);
  			
diff -crbB phpBB2.0.8a/language/lang_english/email/topic_notify.tpl antispam2.0.8a/language/lang_english/email/topic_notify.tpl
*** phpBB2.0.8a/language/lang_english/email/topic_notify.tpl	Sun Jul 20 17:42:24 2003
--- antispam2.0.8a/language/lang_english/email/topic_notify.tpl	Thu Jun  3 12:58:42 2004
***************
*** 3,13 ****
  
  Hello {USERNAME},
  
! You are receiving this email because you are watching the topic, "{TOPIC_TITLE}" at {SITENAME}. This topic has received a reply since your last visit. You can use the following link to view the replies made, no more notifications will be sent until you visit the topic.
  
  {U_TOPIC}
  
! If you no longer wish to watch this topic you can either click the "Stop watching this topic link" found at the bottom of the topic above, or by clicking the following link:
  
  {U_STOP_WATCHING_TOPIC}
  
--- 3,13 ----
  
  Hello {USERNAME},
  
! You are watching the topic, "{TOPIC_TITLE}" at {SITENAME}. This topic has received a reply since your last visit. You can use the following link to view the replies made.
  
  {U_TOPIC}
  
! You may click the "Stop watching this topic link" found at the bottom of the topic above or click the following link to stop receiving these notifications:
  
  {U_STOP_WATCHING_TOPIC}
  
Henk van de Kamer
auteur Het Lab

Gebruikersavatar
WebSiteNet
Berichten: 6524
Lid geworden op: 20 okt 2003, 16:56
Locatie: Wieringerwerf
Contacteer:

Bericht door WebSiteNet » 10 jun 2004, 05:11

Vertaal het in het engels en mail het door naar phpbb.com!

Prachtig!

Nursaniyem
Berichten: 464
Lid geworden op: 08 jun 2004, 13:21
Locatie: Breedtje @
Contacteer:

Bericht door Nursaniyem » 21 aug 2004, 11:22

Deze codes waar Henk het over heeft staat niet in mijn emailer.php
Dit zijn de codes die in mijn emailer.php staan :

Code: Selecteer alles

<?php
/***************************************************************************
                                emailer.php
                             -------------------
    begin                : Sunday Aug. 12, 2001
    copyright            : (C) 2001 The phpBB Group
    email                : support@phpbb.com

    $Id: emailer.php,v 1.15.2.34 2003/07/26 11:41:35 acydburn Exp $

***************************************************************************/

/***************************************************************************
 *
 *   This program is free software; you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation; either version 2 of the License, or
 *   (at your option) any later version.
 *
 ***************************************************************************/

//
// The emailer class has support for attaching files, that isn't implemented
// in the 2.0 release but we can probable find some way of using it in a future
// release
//
class emailer
{
	var $msg, $subject, $extra_headers;
	var $addresses, $reply_to, $from;
	var $use_smtp;

	var $tpl_msg = array();

	function emailer($use_smtp)
	{
		$this->reset();
		$this->use_smtp = $use_smtp;
		$this->reply_to = $this->from = '';
	}

	// Resets all the data (address, template file, etc etc to default
	function reset()
	{
		$this->addresses = array();
		$this->vars = $this->msg = $this->extra_headers = '';
	}

	// Sets an email address to send to
	function email_address($address)
	{
		$this->addresses['to'] = trim($address);
	}

	function cc($address)
	{
		$this->addresses['cc'][] = trim($address);
	}

	function bcc($address)
	{
		$this->addresses['bcc'][] = trim($address);
	}

	function replyto($address)
	{
		$this->reply_to = trim($address);
	}

	function from($address)
	{
		$this->from = trim($address);
	}

	// set up subject for mail
	function set_subject($subject = '')
	{
		$this->subject = trim(preg_replace('#[\n\r]+#s', '', $subject));
	}

	// set up extra mail headers
	function extra_headers($headers)
	{
		$this->extra_headers .= trim($headers) . "\n";
	}

	function use_template($template_file, $template_lang = '')
	{
		global $board_config, $phpbb_root_path;

		if (trim($template_file) == '')
		{
			message_die(GENERAL_ERROR, 'No template file set', '', __LINE__, __FILE__);
		}

		if (trim($template_lang) == '')
		{
			$template_lang = $board_config['default_lang'];
		}

		if (empty($this->tpl_msg[$template_lang . $template_file]))
		{
			$tpl_file = $phpbb_root_path . 'language/lang_' . $template_lang . '/email/' . $template_file . '.tpl';

			if (!@file_exists(@phpbb_realpath($tpl_file)))
			{
				$tpl_file = $phpbb_root_path . 'language/lang_' . $board_config['default_lang'] . '/email/' . $template_file . '.tpl';

				if (!@file_exists(@phpbb_realpath($tpl_file)))
				{
					message_die(GENERAL_ERROR, 'Could not find email template file :: ' . $template_file, '', __LINE__, __FILE__);
				}
			}

			if (!($fd = @fopen($tpl_file, 'r')))
			{
				message_die(GENERAL_ERROR, 'Failed opening template file :: ' . $tpl_file, '', __LINE__, __FILE__);
			}

			$this->tpl_msg[$template_lang . $template_file] = fread($fd, filesize($tpl_file));
			fclose($fd);
		}

		$this->msg = $this->tpl_msg[$template_lang . $template_file];

		return true;
	}

	// assign variables
	function assign_vars($vars)
	{
		$this->vars = (empty($this->vars)) ? $vars : $this->vars . $vars;
	}

	// Send the mail out to the recipients set previously in var $this->address
	function send()
	{
		global $board_config, $lang, $phpEx, $phpbb_root_path, $db;

    	// Escape all quotes, else the eval will fail.
		$this->msg = str_replace ("'", "\'", $this->msg);
		$this->msg = preg_replace('#\{([a-z0-9\-_]*?)\}#is', "' . $\\1 . '", $this->msg);

		// Set vars
		reset ($this->vars);
		while (list($key, $val) = each($this->vars)) 
		{
			$$key = $val;
		}

		eval("\$this->msg = '$this->msg';");

		// Clear vars
		reset ($this->vars);
		while (list($key, $val) = each($this->vars)) 
		{
			unset($$key);
		}

		// We now try and pull a subject from the email body ... if it exists,
		// do this here because the subject may contain a variable
		$drop_header = '';
		$match = array();
		if (preg_match('#^(Subject:(.*?))$#m', $this->msg, $match))
		{
			$this->subject = (trim($match[2]) != '') ? trim($match[2]) : (($this->subject != '') ? $this->subject : 'No Subject');
			$drop_header .= '[\r\n]*?' . phpbb_preg_quote($match[1], '#');
		}
		else
		{
			$this->subject = (($this->subject != '') ? $this->subject : 'No Subject');
		}

		if (preg_match('#^(Charset:(.*?))$#m', $this->msg, $match))
		{
			$this->encoding = (trim($match[2]) != '') ? trim($match[2]) : trim($lang['ENCODING']);
			$drop_header .= '[\r\n]*?' . phpbb_preg_quote($match[1], '#');
		}
		else
		{
			$this->encoding = trim($lang['ENCODING']);
		}

		if ($drop_header != '')
		{
			$this->msg = trim(preg_replace('#' . $drop_header . '#s', '', $this->msg));
		}

		$to = $this->addresses['to'];

		$cc = (count($this->addresses['cc'])) ? implode(', ', $this->addresses['cc']) : '';
		$bcc = (count($this->addresses['bcc'])) ? implode(', ', $this->addresses['bcc']) : '';

		// Build header
		$this->extra_headers = (($this->reply_to != '') ? "Reply-to: $this->reply_to\n" : '') . (($this->from != '') ? "From: $this->from\n" : "From: " . $board_config['board_email'] . "\n") . "Return-Path: " . $board_config['board_email'] . "\nMessage-ID: <" . md5(uniqid(time())) . "@" . $board_config['server_name'] . ">\nMIME-Version: 1.0\nContent-type: text/plain; charset=" . $this->encoding . "\nContent-transfer-encoding: 8bit\nDate: " . date('r', time()) . "\nX-Priority: 3\nX-MSMail-Priority: Normal\n" . $this->extra_headers . (($cc != '') ? "Cc: $cc\n" : '')  . (($bcc != '') ? "Bcc: $bcc\n" : ''); 

		// Send message ... removed $this->encode() from subject for time being
		if ( $this->use_smtp )
		{
			if ( !defined('SMTP_INCLUDED') ) 
			{
				include($phpbb_root_path . 'includes/smtp.' . $phpEx);
			}

			$result = smtpmail($to, $this->subject, $this->msg, $this->extra_headers);
		}
		else
		{
			$empty_to_header = ($to == '') ? TRUE : FALSE;
			$to = ($to == '') ? (($board_config['sendmail_fix']) ? ' ' : 'Undisclosed-recipients:;') : $to;
	
			$result = @mail($to, $this->subject, preg_replace("#(?<!\r)\n#s", "\n", $this->msg), $this->extra_headers);
			
			if (!$result && !$board_config['sendmail_fix'] && $empty_to_header)
			{
				$to = ' ';

				$sql = "UPDATE " . CONFIG_TABLE . " 
					SET config_value = '1'
					WHERE config_name = 'sendmail_fix'";
				if (!$db->sql_query($sql))
				{
					message_die(GENERAL_ERROR, 'Unable to update config table', '', __LINE__, __FILE__, $sql);
				}

				$board_config['sendmail_fix'] = 1;
				$result = @mail($to, $this->subject, preg_replace("#(?<!\r)\n#s", "\n", $this->msg), $this->extra_headers);
			}
		}

		// Did it work?
		if (!$result)
		{
			message_die(GENERAL_ERROR, 'Failed sending email :: ' . (($this->use_smtp) ? 'SMTP' : 'PHP') . ' :: ' . $result, '', __LINE__, __FILE__);
		}

		return true;
	}

	// Encodes the given string for proper display for this encoding ... nabbed 
	// from php.net and modified. There is an alternative encoding method which 
	// may produce lesd output but it's questionable as to its worth in this 
	// scenario IMO
	function encode($str)
	{
		if ($this->encoding == '')
		{
			return $str;
		}

		// define start delimimter, end delimiter and spacer
		$end = "?=";
		$start = "=?$this->encoding?B?";
		$spacer = "$end\r\n $start";

		// determine length of encoded text within chunks and ensure length is even
		$length = 75 - strlen($start) - strlen($end);
		$length = floor($length / 2) * 2;

		// encode the string and split it into chunks with spacers after each chunk
		$str = chunk_split(base64_encode($str), $length, $spacer);

		// remove trailing spacer and add start and end delimiters
		$str = preg_replace('#' . phpbb_preg_quote($spacer, '#') . '$#', '', $str);

		return $start . $str . $end;
	}

	//
	// Attach files via MIME.
	//
	function attachFile($filename, $mimetype = "application/octet-stream", $szFromAddress, $szFilenameToDisplay)
	{
		global $lang;
		$mime_boundary = "--==================_846811060==_";

		$this->msg = '--' . $mime_boundary . "\nContent-Type: text/plain;\n\tcharset=\"" . $lang['ENCODING'] . "\"\n\n" . $this->msg;

		if ($mime_filename)
		{
			$filename = $mime_filename;
			$encoded = $this->encode_file($filename);
		}

		$fd = fopen($filename, "r");
		$contents = fread($fd, filesize($filename));

		$this->mimeOut = "--" . $mime_boundary . "\n";
		$this->mimeOut .= "Content-Type: " . $mimetype . ";\n\tname=\"$szFilenameToDisplay\"\n";
		$this->mimeOut .= "Content-Transfer-Encoding: quoted-printable\n";
		$this->mimeOut .= "Content-Disposition: attachment;\n\tfilename=\"$szFilenameToDisplay\"\n\n";

		if ( $mimetype == "message/rfc822" )
		{
			$this->mimeOut .= "From: ".$szFromAddress."\n";
			$this->mimeOut .= "To: ".$this->emailAddress."\n";
			$this->mimeOut .= "Date: ".date("D, d M Y H:i:s") . " UT\n";
			$this->mimeOut .= "Reply-To:".$szFromAddress."\n";
			$this->mimeOut .= "Subject: ".$this->mailSubject."\n";
			$this->mimeOut .= "X-Mailer: PHP/".phpversion()."\n";
			$this->mimeOut .= "MIME-Version: 1.0\n";
		}

		$this->mimeOut .= $contents."\n";
		$this->mimeOut .= "--" . $mime_boundary . "--" . "\n";

		return $out;
		// added -- to notify email client attachment is done
	}

	function getMimeHeaders($filename, $mime_filename="")
	{
		$mime_boundary = "--==================_846811060==_";

		if ($mime_filename)
		{
			$filename = $mime_filename;
		}

		$out = "MIME-Version: 1.0\n";
		$out .= "Content-Type: multipart/mixed;\n\tboundary=\"$mime_boundary\"\n\n";
		$out .= "This message is in MIME format. Since your mail reader does not understand\n";
		$out .= "this format, some or all of this message may not be legible.";

		return $out;
	}

	//
   // Split string by RFC 2045 semantics (76 chars per line, end with \r\n).
	//
	function myChunkSplit($str)
	{
		$stmp = $str;
		$len = strlen($stmp);
		$out = "";

		while ($len > 0)
		{
			if ($len >= 76)
			{
				$out .= substr($stmp, 0, 76) . "\r\n";
				$stmp = substr($stmp, 76);
				$len = $len - 76;
			}
			else
			{
				$out .= $stmp . "\r\n";
				$stmp = "";
				$len = 0;
			}
		}
		return $out;
	}

	//
   // Split the specified file up into a string and return it
	//
	function encode_file($sourcefile)
	{
		if (is_readable(phpbb_realpath($sourcefile)))
		{
			$fd = fopen($sourcefile, "r");
			$contents = fread($fd, filesize($sourcefile));
	      $encoded = $this->myChunkSplit(base64_encode($contents));
	      fclose($fd);
		}

		return $encoded;
	}

} // class emailer

?>
Ik kom er echt niet uit :(

Henk van de Kamer
Berichten: 49
Lid geworden op: 01 jun 2004, 12:09

Bericht door Henk van de Kamer » 05 sep 2004, 18:26

Nursaniyem schreef:Deze codes waar Henk het over heeft staat niet in mijn emailer.php
Toch wel :)

Het gaat om de volgende regels in de door jouw aanghaalde code:

Code: Selecteer alles

		// Build header
		$this->extra_headers = (($this->reply_to != '') ? "Reply-to: $this->reply_to\n" : '') . (($this->from != '') ? "From: $this->from\n" : "From: " . $board_config['board_email'] . "\n") . "Return-Path: " . $board_config['board_email'] . "\nMessage-ID: <" . md5(uniqid(time())) . "@" . $board_config['server_name'] . ">\nMIME-Version: 1.0\nContent-type: text/plain; charset=" . $this->encoding . "\nContent-transfer-encoding: 8bit\nDate: " . date('r', time()) . "\nX-Priority: 3\nX-MSMail-Priority: Normal\n" . $this->extra_headers . (($cc != '') ? "Cc: $cc\n" : '')  . (($bcc != '') ? "Bcc: $bcc\n" : ''); 
en

Code: Selecteer alles

			$to = ($to == '') ? (($board_config['sendmail_fix']) ? ' ' : 'Undisclosed-recipients:;') : $to;
Deze twee regels bevatten dus de code die ervoor zorgt dat SpamAssassin de gemailde notify terecht als spam ziet. Mocht je er nog niet uitkomen, mail me dan even (zie http://www.vandekamer.com/henk/email.asp ) en ik stuur je een aangepaste versie. Maar waarschijnlijk kom je er nu wel uit.
Henk van de Kamer
auteur Het Lab

rembert
Berichten: 3
Lid geworden op: 13 sep 2004, 10:41
Contacteer:

MODje

Bericht door rembert » 13 sep 2004, 10:45

Ik heb voor 2.0.10 een MODje aangemaakt voor bovenstaande wijzigingen. Aan Henk om deze evt. aan te passen en in te sturen naar phpbb.com. Ik heb m al draaien op 2 forums en het werkt prima! Henk, bedankt voor je tips!

Edit: wijziging credits

##############################################################
## MOD Title: spamassassin fix
## MOD Author: Henk van de Kamer
## (mod realized by Rembert Oldenboom from detailed instructions given by Henk.
## MOD Description: Prevent act. msgs 2b marked as spam
##
## MOD Version: 1.0
##
## Installation Level: easy
## Installation Time: 10 Minutes
## Files To Edit: (1) includes/emailer.php
## Included Files: n/a
##############################################################
## For Security Purposes, Please Check: http://www.phpbb.com/mods/ for the
## latest version of this MOD. Downloading this MOD from other sites could cause malicious code
## to enter into your phpBB Forum. As such, phpBB will not offer support for MOD's not offered
## in our MOD-Database, located at: http://www.phpbb.com/mods/
##############################################################
## Author Notes:
##
## First MOD version: Henk van de Kamer
##
##############################################################
## MOD History:
##
## 2004-09-13
## - created for 2.0.10
##
##############################################################
## Before Adding This MOD To Your Forum, You Should Back Up All Files Related To This MOD
##############################################################

#
#-----[ OPEN ]------------------------------
#
includes/emailer.php

#
#-----[ FIND ]------------------------------------------
#
// Build header
$this->extra_headers = (($this->reply_to != '') ? "Reply-to: $this->reply_to\n" : '') . (($this->from != '') ? "From: $this->from\n" : "From: " . $board_config['board_email'] . "\n") . "Return-Path: " . $board_config['board_email'] . "\nMessage-ID: <" . md5(uniqid(time())) . "@" . $board_config['server_name'] . ">\nMIME-Version: 1.0\nContent-type: text/plain; charset=" . $this->encoding . "\nContent-transfer-encoding: 8bit\nDate: " . date('r', time()) . "\nX-Priority: 3\nX-MSMail-Priority: Normal\nX-Mailer: PHP\nX-MimeOLE: Produced By phpBB2\n" . $this->extra_headers . (($cc != '') ? "Cc: $cc\n" : '') . (($bcc != '') ? "Bcc: $bcc\n" : '');

#
#-----[ REPLACE WITH ]-----------------------------------
#
// Build header
$this->extra_headers = (($this->reply_to != '') ? "Reply-to: $this->reply_to\n" : '') . (($this->from != '') ? "From: \"${board_config['sitename']}\" <$this->from>\n" : "From: \"${board_config['sitename']}\" <" . $board_config['board_email'] . ">\n") . "Return-Path: " . $board_config['board_email'] . "\nMessage-ID: <" . md5(uniqid(time())) . "@" . $board_config['server_name'] . ">\nMIME-Version: 1.0\nContent-type: text/plain; charset=" . $this->encoding . "\nContent-transfer-encoding: 8bit\nDate: " . date('r', time()) . "\nX-Priority: 3\nX-Mailer: PHP\n" . $this->extra_headers . (($cc != '') ? "Cc: $cc\n" : '') . (($bcc != '') ? "Bcc: $bcc\n" : '');

#
#-----[ SAVE/CLOSE ALL FILES ]-----------------------------------
# EoM
Laatst gewijzigd door rembert op 13 sep 2004, 14:51, 1 keer totaal gewijzigd.

Gebruikersavatar
mosymuis
Berichten: 6940
Lid geworden op: 05 feb 2003, 14:00
Locatie: Amsterdam
Contacteer:

Re: MODje

Bericht door mosymuis » 13 sep 2004, 13:38

rembert schreef: ## MOD Author: Rembert Oldenboom, based upon instructions
## written by Henk van de Kamer on http://www.phpbb.nl
Ik denk dat het eerlijker is om Henk de volledige credits te geven bij MOD Author. En dus niet als tweede naam.

rembert
Berichten: 3
Lid geworden op: 13 sep 2004, 10:41
Contacteer:

Bericht door rembert » 13 sep 2004, 14:52

Ja, dat vond ik ook, maar aan de andere kant kan ik me ook voorstellen dat Henk niet zomaar ongevraagd als MOD author genoemd wil worden. Dat is een dilemma. Anywya, ik heb het hierboven aangepast.

Henk van de Kamer
Berichten: 49
Lid geworden op: 01 jun 2004, 12:09

Bericht door Henk van de Kamer » 21 sep 2004, 10:32

rembert schreef:Ja, dat vond ik ook, maar aan de andere kant kan ik me ook voorstellen dat Henk niet zomaar ongevraagd als MOD author genoemd wil worden. Dat is een dilemma. Anywya, ik heb het hierboven aangepast.
In ulke gevallen stuur ik altijd even een maitje :)

Persoonlijk zou ik meteen hebben ingestemd met de eerste constructie. Jij bent tenslotte de auteur van deze MOD, ook al is het geheel gebaseerd op mijn aanwijzingen.

Waarom ik zo denk? Heel simpel. Stel dat iemand deze MOD vind en gaat gebruiken. Ik heb geen flauw idee hoe zo'n MOD werkt (ik ben zo'n figuur die gewoon lekker de code zelf mishandelt :)) en kan dus ook geen vragen beantwoorden. Jij kan dat waarschijnlijk wel. Ofwel ik zou het prachtig vinden als ik genoemd wordt als oorspronkelijke bron, maar jij bent in mijn ogen de auteur van dit afgeleidde werk.

Nu zit iedereen anders in elkaar, dus kan het best wezen dat in een vergelijkbare situatie een ander iemand graag als auteur wordt genoemd. Voor mij hoeft dat niet zo nodig, ben al bekend genoeg :)

Aan jouw de keuze...
Henk van de Kamer
auteur Het Lab

Henk van de Kamer
Berichten: 49
Lid geworden op: 01 jun 2004, 12:09

Bericht door Henk van de Kamer » 21 sep 2004, 10:50

Bij sommige hosters gaat mijn aanpassing trouwens mis. De reden is heel simpel, deze hosters gebruiken een aangepaste mail routine. Deze snappen niets van de geldige Undisclosed-recipients:; constructie in het To: veld en strippen deze dus weg. Waarna al ons werk voor niets was en SpamAssassin nog steeds een leeg To: veld ziet.

Een ander probleem is de zogenaamde Sendmail fix. Bij een aantal hosters wordt deze fix geactiveerd, terwijl zij geen Sendmail gebruiken. De reden is dat bij deze hosters $result niet 0 wordt, maar een lege string. In bovenstaande MOD zie ik niet de aanpassing van het To veld. Omdat ik gewend ben om diff en patch te gebruiken, hierbij alle wijzingen die nodig zijn om phpBB en SpamAssassin vreedzaam samen te laten werken:

Code: Selecteer alles

*** emailer_orig.php	Sat Jul 17 17:58:22 2004
--- emailer_gametalk.php	Tue Jul 27 16:12:00 2004
***************
*** 192,198 ****
  		$bcc = (count($this->addresses['bcc'])) ? implode(', ', $this->addresses['bcc']) : '';
  
  		// Build header
! 		$this->extra_headers = (($this->reply_to != '') ? "Reply-to: $this->reply_to\n" : '') . (($this->from != '') ? "From: $this->from\n" : "From: " . $board_config['board_email'] . "\n") . "Return-Path: " . $board_config['board_email'] . "\nMessage-ID: <" . md5(uniqid(time())) . "@" . $board_config['server_name'] . ">\nMIME-Version: 1.0\nContent-type: text/plain; charset=" . $this->encoding . "\nContent-transfer-encoding: 8bit\nDate: " . date('r', time()) . "\nX-Priority: 3\nX-MSMail-Priority: Normal\nX-Mailer: PHP\nX-MimeOLE: Produced By phpBB2\n" . $this->extra_headers . (($cc != '') ? "Cc: $cc\n" : '')  . (($bcc != '') ? "Bcc: $bcc\n" : ''); 
  
  		// Send message ... removed $this->encode() from subject for time being
  		if ( $this->use_smtp )
--- 192,198 ----
  		$bcc = (count($this->addresses['bcc'])) ? implode(', ', $this->addresses['bcc']) : '';
  
  		// Build header
! 		$this->extra_headers = (($this->reply_to != '') ? "Reply-to: $this->reply_to\n" : '') . (($this->from != '') ? "From: \"" . $board_config['sitename'] . "\" <$this->from>\n" : "From: \"" . $board_config['sitename'] . "\" <" . $board_config['board_email'] . ">\n") . "Return-Path: " . $board_config['board_email'] . "\nMessage-ID: <" . md5(uniqid(time())) . "@" . $board_config['server_name'] . ">\nMIME-Version: 1.0\nContent-type: text/plain; charset=" . $this->encoding . "\nContent-transfer-encoding: 8bit\nDate: " . date('r', time()) . "\nX-Priority: 3\nX-Mailer: PHP\n" . $this->extra_headers . (($cc != '') ? "Cc: $cc\n" : '')  . (($bcc != '') ? "Bcc: $bcc\n" : '');
  
  		// Send message ... removed $this->encode() from subject for time being
  		if ( $this->use_smtp )
***************
*** 207,232 ****
  		else
  		{
  			$empty_to_header = ($to == '') ? TRUE : FALSE;
! 			$to = ($to == '') ? (($board_config['sendmail_fix']) ? ' ' : 'Undisclosed-recipients:;') : $to;
  	
  			$result = @mail($to, $this->subject, preg_replace("#(?<!\r)\n#s", "\n", $this->msg), $this->extra_headers);
- 			
- 			if (!$result && !$board_config['sendmail_fix'] && $empty_to_header)
- 			{
- 				$to = ' ';
- 
- 				$sql = "UPDATE " . CONFIG_TABLE . " 
- 					SET config_value = '1'
- 					WHERE config_name = 'sendmail_fix'";
- 				if (!$db->sql_query($sql))
- 				{
- 					message_die(GENERAL_ERROR, 'Unable to update config table', '', __LINE__, __FILE__, $sql);
  				}
  
! 				$board_config['sendmail_fix'] = 1;
! 				$result = @mail($to, $this->subject, preg_replace("#(?<!\r)\n#s", "\n", $this->msg), $this->extra_headers);
! 			}
! 		}
  
  		// Did it work?
  		if (!$result)
--- 207,219 ----
  		else
  		{
  			$empty_to_header = ($to == '') ? TRUE : FALSE;
! 			$to = ($to == '') ? '"' . $board_config['sitename'] . '" <Undisclosed-recipients>' : $to;
  	
  			$result = @mail($to, $this->subject, preg_replace("#(?<!\r)\n#s", "\n", $this->msg), $this->extra_headers);
  				}
  
! 		// HK 16-06-2004: bij sommige hostingbedrijven wordt $result leeg als het mailen is gelukt...
! 		$result = ($result == '') ? TRUE : $result;
  
  		// Did it work?
  		if (!$result)

Verder moeten Engelstalige forums nog even de E-mail template aanpassen en het minder spammy maken...
Henk van de Kamer
auteur Het Lab

Gebruikersavatar
Peerke
Berichten: 77
Lid geworden op: 13 sep 2003, 07:15

Bericht door Peerke » 14 okt 2004, 20:20

Begrijp ik nu goed dat er nog geen oplossing voor is?

Ik heb er met mijn forum alleen last van bij de Chello klanten.
Krijg onderstaand terug:

Code: Selecteer alles

  xxxxxx@chello.nl
    SMTP error from remote mailer after RCPT TO:<xxxxxx@chello.nl>:
    host smtp.chello.nl [ipweggehaald]: 551 Mail from your IP address is currently blocked based on RBL listing
  cccccccc@chello.nl
    SMTP error from remote mailer after RCPT TO:<cccccccc@chello.nl>:
    host smtp.chello.nl [ipweggehaald]: 551 Mail from your IP address is currently blocked based on RBL listing
Baal als een stekker!

Grzt Peer

Henk van de Kamer
Berichten: 49
Lid geworden op: 01 jun 2004, 12:09

Bericht door Henk van de Kamer » 15 okt 2004, 14:16

Peerke schreef:551 Mail from your IP address is currently blocked based on RBL listing
Oei. Dat betekend dat de server waarop jouw website gehost wordt, op de zwarte lijst staat. Ik mag hopen dat jouw provider ondertussen zijn leven gebeterd heeft. Zo ja, dan kan je proberen om deze server van de lijst te krijgen...
Henk van de Kamer
auteur Het Lab

Gebruikersavatar
Peerke
Berichten: 77
Lid geworden op: 13 sep 2003, 07:15

Bericht door Peerke » 16 okt 2004, 10:16

Misschien, domme vraag, maar kan ik dit checken. Het is een virtuele server, dus ws kan de provicer er zelf niets aan doen. Ik heb alleen maar goed ervaringen er mee! :thumb:


Vervelend is dat dit alleen bij Chello klanten gebeurd!

Of is dit te verklaren?

Grtz Peer

Henk van de Kamer
Berichten: 49
Lid geworden op: 01 jun 2004, 12:09

Bericht door Henk van de Kamer » 17 okt 2004, 19:42

Peerke schreef:Misschien, domme vraag, maar kan ik dit checken.
Ja. Zie bijvoorbeeld http://www.openrbl.org/
Peerke schreef:Vervelend is dat dit alleen bij Chello klanten gebeurd!

Of is dit te verklaren?
Chello heeft onlangs spamfilters geïnstalleerd en bij mijn weten hebben ze die bij iedereen aangezet. Is ook een e-mail (twee zelfs) over geweest. Zo te zien staat het filter wel erg strak afgesteld...
Henk van de Kamer
auteur Het Lab

Henk van de Kamer
Berichten: 49
Lid geworden op: 01 jun 2004, 12:09

Bericht door Henk van de Kamer » 17 okt 2004, 19:52

Sorry, gooide even twee dingen door elkaar. Chello heeft onlangs een virusscanner op alle e-mail (zowel in- als uitgaand) geïnstalleerd. Dat verklaard dus waarschijnlijk niet die meldingen, tenzij ze één of andere virus rbl gebruiken...
Henk van de Kamer
auteur Het Lab

Gesloten