#!hs2 ####################################################################### # # # Mail2News.hsc (C) Karl Pflästerer und Philipp Wendler # # # # Version: 1.0 vom 08.02.2003 # # # ####################################################################### # # # Syntax: # # Mail2News.hsc # # # # Durchsucht die in angegebene Mail nach Newsgruppen- # # empfängern (Format: "@", Bsp: # # "hamster.de.misc@Mail2News.invalid"), konvertiert sie in ein # # Posting und importiert sie in die entsprechenden Newsgroups. # # Sollte die Mail auch normale Empfänger haben, wird sie nach dem # # Entfernen der Newsgruppenempfänger wieder abgespeichert. # # # ####################################################################### # # # History: # # # # 1.0 08.02.2003 # # erstes öffentliches Release # # # ####################################################################### # # # ToDo: # # # # - Bounce bei verbotener Newsgroup oder Fehler beim Importieren # # # ####################################################################### # # # In dieser Variable wird eine RegExp angegeben, die auf die # # Mail2News-Domain passt. # # # varset( $Mail2NewsDomain, "Mail2News\.local" ) # # # Nur Newsgroups, die auf diese RegExp matchen, werden akzeptiert. # # Alle anderen werden kommentarlos(!) verworfen. # # # varset( $AllowedGroups, ".*" ) # # ####################################################################### varset( $Msg, ListAlloc ) # Liste mit Mailtext ListLoad( $Msg, ParamStr(2) ) varset( $Newsgroup, "" ) # enthält durch Komma getrennte Namen der NGs varset( $MailRcpt, False ) # True, wenn auch Mailempfänger vorhanden var( $Group ) # temporäre Variable varset( $i, 1 ) # Schleifenvariable # Alle !RCPT TO-Header werden durchlaufen, und eventuelle # Newsgruppenempfänger werden gesammelt und aus der Mail gelöscht. Wenn # mindestens ein Nichtnewsgruppenempfänger (also ein Mailempfänger) # vorhanden ist, merkt sich das Skript das. while( POS( "!RCPT TO:", ListGet($Msg, $i ) ) = 1 ) $Group = RE_Extract( ListGet( $Msg, $i ), _ "(?<=!RCPT TO: <)(.+)(?=@" + $Mail2NewsDomain + ">)" ) if( $Group <> "" ) # eine Newsgruppe als Adressat if( RE_MATCH( $Group, $AllowedGroups ) ) $Newsgroup = $Newsgroup + "," + $Group endif ListDelete( $Msg, $i ) else # eine Mailadresse $MailRcpt = True inc( $i ) endif endwhile if( $Newsgroup = "" ) # kein Newsgruppenempfänger vorhanden ListFree( $Msg ) quit endif # Mail ************************************************************* # Wenn mindestens ein Mailempfänger vorhanden ist, wird die Mail ohne # die Newsgroupempfänger gespeichert. if( $MaiLRcpt ) ListSave($msg, Paramstr(2)) endif # News ************************************************************* # Alle Mail-relevanten Header werden gelöscht. Delete_Header( $Msg ) # Newsgroup-Header hinzufügen $Newsgroup = trim( $Newsgroup, "," ) ListInsert( $msg, 0, "Newsgroups: " + $Newsgroup ) # Importieren, Ausgabe einer Meldung im Log und Löschen der Datei bei # Erfolg, wenn keine Mailempfänger vorhanden sind. if( HamArtImport( ListGetText($Msg) ) ) Addlog( "Ein Artikel wurde in " + $Newsgroup + " importiert", 4 ) if( !$MailRcpt ) FileDelete( ParamStr(2) ) endif else Addlog( "Fehler beim Importieren in " + $Newsgroup, 5 ) endif # Aufräumen ListFree( $Msg ) Quit sub Delete_Header ( $Message ) # $Message -> Liste mit Mailtext # $HeaderReg -> Regexp mit den Headern, die gelöscht werden sollen varset( $HeaderReg, "^(To|Cc|Return-Path|!MAIL FROM|!RCPT TO|Received|Newsgroups):.+$" ) varset( $k, 0 ) #Schleifenvariable # Durchlaufen des Headers in einer Schleife und Löschen der # entsprechenden Header. while( ListGet( $Message, $k ) <> "" ) # Body separator if( RE_Match( ListGet( $Message, $k ), $HeaderReg)) ListDelete( $Message, $k ) # Bei mehrzeiligen Headern müssen auch die nächsten Zeilen # gelöscht werden. while( !RE_Match( ListGet( $Message, $k ), _ "(^[a-z- ]+:.+)|^$" ) ) # Neuer Header oder Body separator ListDelete($message, $k) endwhile else inc( $k ) endif endwhile Return(1) endsub