SendMailToAddressGroup (include)

From 40tude Dialog Wiki


Send Mail To Address Group (Include)

Using the SendMailToAddressGroup-script enables you to organize your email contacts similar to mailing lists. After you define a group of addresses, sending an email to the group's handle will automatically expand it to the email addresses in the group.

If you found bugs or have recommendations, feel free to contact the author Thomas Barghahn (


Address groups are defined in an ini file:

; This is a comment. Lines containing comments have to start
; with a semicolon (;).

; "AddressGroups.ini"
; Datum: 21.03.2006
; Thomas Barghahn

example <user1@example.xx>
example <user2@example.yy>
example <user3@example.zz>

; Tante Klara <klara@fqdn.part>
Onkel Ernie <ernie@fqdn.part>
Freddy <freddy@fqdn.part>
Frida <frida@fqdn.part>

The text inside the square brackets start a group and define a group handle, the following lines contain the addresses in the group. You need to create a plain text file similar to the above with a text editor (like notepad) and save it.

Install & setup the script

Please note that this script is an include-file! You have to paste the script at the bottom of this page into a new custom script (for example "Include_SendMailToAddressGroup") and safe it. Take the time now to configure the script, by changing the values of "MyIniFolder" and "MyIniFile" to the folder and the name of the file with your address groups. Safe it again. You do not need to compile this custom script!

After that you have to add the following lines to your OnBeforeSending-Script:

 {$I Include_SendMailToAddressGroup.ds}    


  Change_To_Addresses ( Message, IsEmail);

This may look like this:

program OnBeforeSendingMessage;
 {$I Include_SendMailToAddressGroup.ds}   

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

  //possibly some other calls to scripts

    Change_To_Addresses ( Message, IsEmail);



Compile this OnBeforeSending-Script now to get your include-file to work. Please note that whenever you change the "Include_SendMailToAddressGroup" custom script, you have to recompile the OnBeforeSending-Script to apply the changes.

The Include-File

Please be sure that this is the only content in the include-file!

procedure Init_Change_To_Addresses ( var ChangeInEmails    : Boolean;
                                     var ChangeInNews      : Boolean;
                                     var X_OldTo           : Boolean;
                                     var MyIniFolder       : String;
                                     var MyIniFile         : String


// Date: 2006/03/22

//  ----------------------------------------------------
//  Configuration settings
//  ----------------------------------------------------

    // change To-Addresses in emails and/or postings
    // set 'true' or 'false'
    ChangeInEmails := true;
    ChangeInNews := false;
    // create Header "X-Old-To:"?    
    // set 'true' or 'false'
    X_OldTo := true;
    MyIniFolder := 'C:\Programme\40tude_Dialog\';
    MyIniFile := 'AddressGroups.ini';

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


   // --------------------------------------------------------------- //
   // ----  No user maintainable parts below this line -------------- //
   // --------------------------------------------------------------- //

procedure Change_To_Addresses (Message:TStringlist;IsEmail:boolean);

var i, j, k           : integer;
    ChangeInEmails    : Boolean;
    ChangeInNews      : Boolean;
    X_OldTo           : Boolean;
    MyIniFolder       : String;
    MyIniFile         : String;
    AddressList       : TStringList;
    MaxInt            : Integer;
    GroupAddress      : String;
    TempAddress       : String;
   Init_Change_To_Addresses ( ChangeInEmails, ChangeInNews, X_OldTo, MyIniFolder, MyIniFile );
   if ((IsEmail=true)  and (ChangeInEmails=true)) or
      ((IsEmail=false) and (ChangeInNews=true)) then begin
      AddressList := TStringList.Create;
      AddressList.LoadFromFile(MyIniFolder + MyIniFile);
      AddressList.Add (#13#10);
      GroupAddress := '';
      i := 0;
      MaxInt := 2147483647;
      while (Message.Strings[i]<>'') do begin
         if pos('To: ',Message.Strings[i]) = 1 then begin
            TempAddress := copy (Message.Strings[i], 5, MaxInt);
            For j := 0 to AddressList.Count - 1 do begin
               If LowerCase (AddressList.Strings[j]) = LowerCase ('[' + TempAddress + ']') then begin
                  k := j + 1;
                     If copy (AddressList.Strings[k],1 ,1) <> ';' then begin
                        If GroupAddress = '' then
                           GroupAddress := AddressList.Strings[k]
                           GroupAddress := GroupAddress + ', ' + AddressList.Strings[k];
                     end; // if
                     k := k + 1;
                  until (k = AddressList.Count - 1) or (AddressList.Strings[k] = '') or
                        (copy (AddressList.Strings[k],1 ,1) = '['); 
               end; // if    
            end; // for
            If GroupAddress <> '' then begin
               Message.Strings[i] := 'To: ' + GroupAddress;
               If X_OldTo = true then
                  Message.insert (i + 1, 'X-Old-To: ' + TempAddress);
            end; // if   
         end; //if
         i := i + 1;
      end; {end of while}
      end; //try .. finally   
   end; //if

Maik Prinz