`emailrelay-check-address-domains.js `_ ---------------------------------------------------------------------------- .. code:: javascript // // SPDX-FileCopyrightText: 2026 Graeme Walker // SPDX-License-Identifier: FSFAP // // Copyright (c) 2026 Graeme Walker // // Copying and distribution of this file, with or without modification, // are permitted in any medium without royalty provided the copyright // notice and this notice are preserved. This file is offered as-is, // without any warranty. // === // // emailrelay-check-address-domains.js // // An example E-MailRelay filter script for Windows that // checks the domain parts of the envelope-from address // and all envelope-to recipient addresses against a // hard-coded allow-list. // try { // list of allowed domains... var domains = [ "books.example.com" , "xn--bcher-kva.example.de" , ] ; function allow_domain( domain ) { for( var i = 0 ; i < domains.length ; i++ ) { if( domains[i] === domain.toLowerCase() ) return true ; } return false ; } function match( re , s ) { var m = s.match( re ) ; if( !m ) return "" ; return m[1] ; } function allow_address( address ) { return allow_domain( match( /@(\S*)/ , address ) ) ; } // read the envelope var envelope = WScript.Arguments(1) ; var fs = WScript.CreateObject( "Scripting.FileSystemObject" ) ; var ts = fs.OpenTextFile( envelope , 1 , false ) ; var txt = ts.ReadAll() ; ts.Close() ; var denied = [] ; // check envelope 'from' address var re_from = /^X-MailRelay-From:\s*(\S*)/m ; var address_from = match( re_from , txt ) ; if( !allow_address(address_from) ) denied.push( address_from ) ; // check envelope 'to' addresses var re_to = /^X-MailRelay-To-[^:]*:\s*(\S*)/gm ; var match_to ; while( (match_to = re_to.exec(txt)) !== null ) { var address_to = match_to[1] ; if( !allow_address( address_to ) ) denied.push( address_to ) ; } // return the result if( denied.length == 0 ) { WScript.Quit( 0 ) ; } else { WScript.StdOut.WriteLine( "<>" ) ; WScript.StdOut.WriteLine( "<<" + denied.toString() + ">>" ) ; WScript.Quit( 1 ) ; } } catch( e ) { // report errors using the special <<...>> markers WScript.StdOut.WriteLine( "<>" ) ; WScript.StdOut.WriteLine( "<<" + e.name + ": " + e.message + ">>" ) ; WScript.Quit( 1 ) ; } .. _../examples/emailrelay-check-address-domains.js: emailrelay-check-address-domains_js.html