[FYI] Skript Remove_UserAgent_for_Identity

13/05/2013 - 11:19 von Vínzenz Ahréndt | Report spam
Hallo,

nur der Vollstàndigkeit halber hier die Release-Version, nochmals auf
Fehler geprüft. Sonstige Optimierungsmöglichkeiten sehe ich keine mehr.

Beschreibung siehe Config Part.

Wer das Skript auf eine Webseite stellen will, kann das gerne tun.

Weitere Skripte stelle ich ich hier ansonsten nicht mehr ein, erneute
"Spam"-Anwürfe dürften also vielleicht unnötig sein.

Der übliche Einbau in OnBeforeSendingMessage:

//-

program OnBeforeSendingMessage;

// [...]

{$I Remove_UserAgent_for_Identity.ds}


function OnBeforeSendingMessage( var Message : TStringlist; const Servername : string; const IsEmail : boolean ) : boolean;

begin

// Your code goes here

// [...]

// User-Agent entfernen
Remove_UserAgent_for_Identity ( Message, IsEmail );

end;

begin
end.

//-


Die Init-Routine und das Skript selbst:

//-

//--[Procedure Init_Remove_UserAgent_for_Identity]-
Procedure Init_Remove_UserAgent_for_Identity ( Var ExFrom_in_Emails : TStringList; Var ExFrom_in_News : TStringList );
Begin
//-
// Configuration settings
//-
// User-Agent-String in allen Emails und/oder Postings entfernen, sofern
// keine Ausnahme für eine/mehrere bestimmte Identitàt(en) definiert
// ist.
//
// From-Eintràge definieren:
// Name oder Namensteile oder Mail-Adressen oder Teile davon, bei deren
// Vorhandensein im From: der User-Agent _nicht_ entfernt werden soll.
// Erfolgt hier kein Eintrag für Emails und/oder News, wird der UA-String
// in _allen_ Emails und/oder News entfernt.
// Mehrere Eintràge möglich, Eintràge durch ein Komma ',' trennen,
// Leerzeichen erlaubt.

ExFrom_in_Emails.CommaText := ' , ';
ExFrom_in_News.CommaText := ' @pixelfragment.net , ';

// Je nach Konfiguration ergeben sich somit folgende Möglichkeiten:
//
// - UA-String in Emails entfernen (außer in konfigurierten Ausnahmen)
// - UA-String in Postings entfernen (außer in konfigurierten Ausnahmen)
// - UA-String in Emails und Postings entfernen (außer in konfigurierten
// Ausnahmen)


//-
// End of configuration settings
//-
End;


//--[Check_R_UA_FromHeader]
Function Check_R_UA_FromHeader ( strl_MessageH, strl_Search : TStringList ) : Boolean;

Var
b_Result : Boolean;
i : integer;
str_H : String;


Begin
b_Result := true;
str_H := '';

For i := 0 To strl_MessageH.IndexOf('') - 1 Do
Begin
// From-String auslesen
If AnsiPos('from:' , AnsiLowerCase(strl_MessageH[i])) = 1 Then
Begin
str_H := Trim(Copy(strl_MessageH[i], AnsiPos(' ', strl_MessageH[i]) + 1, Length(strl_MessageH[i])));

// From-String mehrzeilig?
i := i + 1;
While Trim(Copy(strl_MessageH[i], 1, 1)) = '' Do
Begin
If i = strl_MessageH.IndexOf('') Then
Break;

str_H := str_H + ' ' + Trim(strl_MessageH[i]);
i := i + 1;
End; // End While

// From-String ausgelesen
str_H := AnsiLowerCase(str_H);
Break;
End;
End; // End For


// Vergleich mit Ausschlußliste, ob Ausschlüsse zu beachten sind
If str_H <> '' Then
Begin
For i := 0 To strl_Search.Count - 1 Do
Begin
If AnsiPos(strl_Search[i], str_H) > 0 Then
Begin
// UAString soll spàter nicht entfernt werden
b_Result := false;
Break;
End;
End; // End For
End;

Result := b_Result;

End; // End Function


//--[Procedure Remove_UserAgent_for_Identity]
Procedure Remove_UserAgent_for_Identity ( Message:TStringlist; IsEmail:boolean );

var
strl_MessageHeader,
strl_ExFromEmails,
strl_ExFromNews : TStringList;

b_Remove_UA,
b_MessageHeader_changed : Boolean;

i,
j,
i_UAString : integer;

str_H : String;


Begin
strl_MessageHeader := TStringList.Create;
strl_ExFromEmails := TStringList.Create;
strl_ExFromNews := TStringList.Create;

b_Remove_UA := false;
b_MessageHeader_changed := false;
i_UAString := -1;
str_H := '';

// Nur Header der Message (samt Leerzeile) übernehmen
i := Message.IndexOf('');
j := i;
For i := 0 To j Do
strl_MessageHeader.Add(Message[i]);

// Ist überhaupt ein UA-String im Header vorhanden?
For i := 0 To strl_MessageHeader.IndexOf('') - 1 Do
Begin
str_H := AnsiLowerCase(strl_MessageHeader[i]);
If AnsiPos('user-agent:' , str_H) = 1 Then
Begin
i_UAString := i;
Break;
End;
End; // End For


// Wurden Ausschlüsse definiert und sind zu beachten?
If (i_UAString >= 0) Then
Begin
Init_Remove_UserAgent_for_Identity ( strl_ExFromEmails, strl_ExFromNews );

// Email prüfen
If ( (IsEmail = true) and (strl_ExFromEmails.Count > 0) ) Then
Begin
strl_ExFromEmails.CommaText := AnsiLowerCase(strl_ExFromEmails.CommaText);
b_Remove_UA := Check_R_UA_FromHeader (strl_MessageHeader, strl_ExFromEmails);
End;

// Posting prüfen
If ( (IsEmail = false) and (strl_ExFromNews.Count > 0) ) Then
Begin
strl_ExFromNews.CommaText := AnsiLowerCase(strl_ExFromNews.CommaText);
b_Remove_UA := Check_R_UA_FromHeader (strl_MessageHeader, strl_ExFromNews);
End;

End;


// User-Agent im Header entfernen, falls vorhanden und Flag gesetzt
If ( b_Remove_UA = true) Then
Begin
For i := i_UAString To strl_MessageHeader.IndexOf('') - 1 Do
Begin
// UA-String löschen
If AnsiPos('user-agent:' , AnsiLowerCase(strl_MessageHeader[i])) = 1 Then
Begin
strl_MessageHeader.Delete(i);
b_MessageHeader_changed := true;

// UA-String mehrzeilig?
While Trim(Copy(strl_MessageHeader[i], 1, 1)) = '' Do
Begin
If i = strl_MessageHeader.IndexOf('') Then
Break;

strl_MessageHeader.Delete(i);
End; // End While

Break;
End;
End; // End For
End;


// Geànderte Header in Nachricht zurückschreiben
If ( b_MessageHeader_changed = true ) Then
Begin
// Anzahl Message-Header verringern
i := Message.IndexOf('');
j := strl_MessageHeader.IndexOf('');
While i > j Do
Begin
Message.Delete(i - 1);
i := Message.IndexOf('');
End; // End While

// Header ab geàndertem Header übernehmen
For i := i_UAString To j - 1 Do
Message[i] := strl_MessageHeader[i];

End;


strl_MessageHeader.Free;
strl_ExFromEmails.Free;
strl_ExFromNews.Free;

End;

//-


/
°
 

Lesen sie die antworten

#1 Jürgen Schmadlak
13/05/2013 - 13:35 | Warnen spam
Vínzenz Ahréndt wrote:

nur der Vollstàndigkeit halber hier die Release-Version, nochmals auf
Fehler geprüft. Sonstige Optimierungsmöglichkeiten sehe ich keine mehr.



eine Versionsnummer im Kommentar wàre hier hilfreich. Gerade wenn es
spàter mal darum geht Probleme bei einzelnen Usern zu lösen.

Wir verurteilen Homer und Marge nicht, das überlassen wir lieber
dem Rachegott.

Ähnliche fragen