Title: Re: Way to check for duplicate emails addresses in a message?
Paul,

I'm getting a “No result was returned from some part of this expression” error message when I run the Remove Duplicate Recipients script.

I tested it by taking a couple of my Custom View Categories, with many known dupes, pasting them into a new message, and then running the script.

 Do I have the script copied correctly?

global ods

tell application "Microsoft Entourage"
    
    set theDraft to window 1
    if class of theDraft � draft window then
       beep
        display dialog "You must have your new message window [not the Address Book, a Custom View, or anything else] in the front when you run the script." buttons {"OK"} default button "OK" with icon 0
        return
   end if
   set {theTo, theCC, theBCC} to theDraft's {to recipients, CC recipients, BCC recipients}
    set {ods, AppleScript's text item delimiters} to {AppleScript's text item delimiters, {", "}}
    set {toList, ccList, bccList} to {text items of theTo, text items of theCC, text items of theBCC}
    set AppleScript's text item delimiters to ods
    
    set toList to my ResetRecipients(toList, {}, {})
    set ccList to my ResetRecipients(ccList, toList, {})
    set bccList to my ResetRecipients(bccList, ccList, toList)
    set AppleScript's text item delimiters to {", "}
    set {window 1's to recipients, window 1's CC recipients, window 1's BCC recipients} to {"" & toList, "" & ccList, "" & bccList}
    set AppleScript's text item delimiters to ods
    
end tell


on ResetRecipients(theList, previousList, anteriorList)
    
    tell application "Microsoft Entourage"
        
        set newList to {}
        if theList � {""} then
           repeat with i from 1 to (count theList)
                set aRecip to item i of theList
                if aRecip does not contain "@" then --
must be group
                   
                    set newList to my ProcessGroup(aRecip, theList, previousList, anteriorList, newList)
                    
                else --
it's a contact
                   
                    if ({aRecip} is not in newList) and ({aRecip} is not in previousList) and ({aRecip} is not in anteriorList) then set end of newList to aRecip --
use @ format
                   
                end if
           end repeat
           
        else
           set newList to {""}
        end if
   end tell
   return newList
    
end ResetRecipients


to ProcessGroup(aRecip, theList, previousList, anteriorList, newList)
    
    
    tell application "Microsoft Entourage"
        
        try
           set theGroup to group aRecip
        on error --
if actually an artificial group member without email address
           return
       end try
       set theEntries to content of every group entry of theGroup
        
        repeat with j from 1 to (count theEntries)
            
            set anEntry to item j of theEntries
            
            repeat 1 times --
for doing next repeat after nested groups
               
                try
                   set {dName, eAddress} to {display name, address} of anEntry
                    if eAddress = "" then
                       set newList to my ProcessGroup(dName, theList, previousList, anteriorList, newList) --
recursive
                       exit repeat -- the 1 times repeat, go on to next group entry
                   end if
                   if dName � "" then
                       if dName starts with "\"" then set dName to text 2 thru -2 of dName --
equivalent to display name without quotes
                       set nameAddress to dName & " <" & eAddress & ">"
                        if ({nameAddress} is not in newList) and ({nameAddress} is not in previousList) and ({nameAddress} is not in anteriorList) then set end of newList to nameAddress --
use @ format
                       
                    else --
no display name, address only
                       if ({eAddress} is not in newList) and ({eAddress} is not in previousList) and ({eAddress} is not in anteriorList) then set end of newList to eAddress -- will have @ format
                   end if
               on error
                   exit repeat --
the 1 times  repeat, move on to next group entry
               end try
           end repeat --
the 1 times repeat
           
        end repeat
       
    end tell
   
    return newList
    
end ProcessGroup

--
Scott
<[EMAIL PROTECTED]>
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

> From: "Entourage:mac Talk" <[EMAIL PROTECTED]>
> Date: Sun, 28 Jan 2001 12:28:22 -0800

Paul wrote:
>
>> OK. Here it is. You can drag contacts and/or groups (any combination) from
>> custom view(s) and/or the Address Book to any or all of the recipient fields
>> (To, Cc, Bcc) of a new message window. Then run the script to remove
>> duplicates. It will show all contacts as contact icons, except for contacts
>> without display names (i.e. only email addresses): they will be included but
>> will display the email address with an @ icon. If you have dragged a group,
>> it will show all non-duplicate individual group members now, not the group
>> name. If the group members are contacts, it will show them as contact icons
>> (except nameless ones, as above). If you have any group members who are not
>> real contacts in the Address Book, they will be included, if not duplicates,
>> with the @ icon.  Please let me know if you hit any problem.

Reply via email to