Running an AppleScript during Rule processing for Mail, Repeat issue

I have cobbled together some code found here and elsewhere that is triggered to run by a certain rule in Mail. The script is designed to add a reminder to be completed the following day, titled with the subject line of the email, a URL of the message added to the reminder ‘notes’, and an iMessage sent to my phone.

This all works great so long as there is only one email message processed by that rule. If there are two messages, the repeat with statement will run twice (as it should) but the message information such as the subject or the URL will not update. As a result I get a duplicate reminder. I’m new to AppleScript so I’m not sure where I’m going wrong – any ideas?? Here’s the script:

using terms from application "Mail"
	on perform mail action with messages theMessages for rule theRule
		tell application "Mail"
			repeat with eachMessage in theMessages
				set emailSubject to the subject of eachMessage
				
				set remindMeDate to (current date) + 1 * days
				set time of remindMeDate to 60 * 60 * 9
				
				# Get the unique identifier (ID) of selected email/message
				set theOrigMessageId to the message id of eachMessage
				
				
				#we need to encode % with %25 because otherwise the URL will be screwed up in Reminders and you won't be able to just click on it to open the linked message in Mail
				set theUrl to {"message:%3C" & my replaceText(theOrigMessageId, "%", "%25") & "%3E"}
				
				tell application "Reminders"
					
					#Using the work reminder list below
					tell list "Work"
						# create new reminder with proper due date, subject name and the URL linking to the email in Mail
						make new reminder with properties {name:emailSubject, remind me date:remindMeDate, body:theUrl}
						
					end tell
					
				end tell
				
				
				tell application "Messages"
					
					set targetBuddy to "+12223334444"
					set targetService to (id of 1st service whose service type = iMessage)
					set textMessage to "ALERT: " & emailSubject
					
					set theBuddy to buddy targetBuddy of service id targetService
					send textMessage to theBuddy
					
				end tell
				
			end repeat
		end tell
	end perform mail action with messages
end using terms from



# string replace function
# used to replace % with %25
on replaceText(subject, find, replace)
	set prevTIDs to text item delimiters of AppleScript
	set text item delimiters of AppleScript to find
	set subject to text items of subject
	
	set text item delimiters of AppleScript to replace
	set subject to "" & subject
	set text item delimiters of AppleScript to prevTIDs
	
	return subject
end replaceText

As I’m fighting against an other script triggered by a rule, I tested your script using this edited version:

 # four extraneous instructions used for tests
tell application "Mail"
	set test_list to selection
	tell me to perform mail action with messages (test_list)
end tell


using terms from application "Mail"
	on perform mail action with messages theMessages --for rule theRule
		--tell me to say "I received " & (count theMessages) & " messages"
		tell application "Mail"
			set report to {}
			repeat with i from 1 to count theMessages
				set eachMessage to contents of theMessages's item i
				set emailSubject to the subject of eachMessage

				# without "tell me to" the nex instruction issue a non fatal --> error number -10004
				tell me to set remindMeDate to (current date) + 1 * days
				set time of remindMeDate to 9 * hours # neater than your original syntax
				
				# Get the unique identifier (ID) of selected email/message
				set theOrigMessageId to the message id of eachMessage
				
				
				#we need to encode % with %25 because otherwise the URL will be screwed up in Reminders and you won't be able to just click on it to open the linked message in Mail
				set theUrl to {"message:%3C" & my replaceText(theOrigMessageId, "%", "%25") & "%3E"}
				set end of report to theUrl
				--	tell me to say "message number " & i
				
				tell me to delay 0.1
			end repeat
		end tell
		--log "prèt à sortir"
		set the clipboard to my recolle(report, linefeed)
		
	end perform mail action with messages
end using terms from



# string replace function
# used to replace % with %25
on replaceText(subject, find, replace)
	set prevTIDs to text item delimiters of AppleScript
	set text item delimiters of AppleScript to find
	set subject to text items of subject
	
	set text item delimiters of AppleScript to replace
	set subject to "" & subject
	set text item delimiters of AppleScript to prevTIDs
	
	return subject
end replaceText


#=====

on recolle(l, d)
	local oTIDs, t
	set {oTIDs, AppleScript's text item delimiters} to {AppleScript's text item delimiters, d}
	set t to l as text
	set AppleScript's text item delimiters to oTIDs
	return t
end recolle

#=====

With two messages selected I got this log events :

tell application "Mail"
	get selection
		--> {message id 227511 of mailbox "INBOX" of account id "0EC90E4E-2781-40D8-89F3-FE7474BB9DD0", message id 227583 of mailbox "INBOX" of account id "606ACFB8-F0A8-4845-8EC4-E3F5A6D1979C"}
	get message id 227511 of mailbox "INBOX" of account id "0EC90E4E-2781-40D8-89F3-FE7474BB9DD0"
		--> message id 227511 of mailbox "INBOX" of account id "0EC90E4E-2781-40D8-89F3-FE7474BB9DD0"
	get subject of message id 227511 of mailbox "INBOX" of account id "0EC90E4E-2781-40D8-89F3-FE7474BB9DD0"
		--> "Eva Green : "Je viens d'une autre planète""
end tell
tell current application
	current date
		--> date "lundi 16 janvier 2017 Ã  21:10:11"
end tell
tell application "Mail"
	get message id of message id 227511 of mailbox "INBOX" of account id "0EC90E4E-2781-40D8-89F3-FE7474BB9DD0"
		--> "100084.517919641.201701161706167475358.0006349757@redaction.telerama.fr"
	get message id 227583 of mailbox "INBOX" of account id "606ACFB8-F0A8-4845-8EC4-E3F5A6D1979C"
		--> message id 227583 of mailbox "INBOX" of account id "606ACFB8-F0A8-4845-8EC4-E3F5A6D1979C"
	get subject of message id 227583 of mailbox "INBOX" of account id "606ACFB8-F0A8-4845-8EC4-E3F5A6D1979C"
		--> "Re: AS Bug with 10.12?"
end tell
tell current application
	current date
		--> date "lundi 16 janvier 2017 Ã  21:10:11"
end tell
tell application "Mail"
	get message id of message id 227583 of mailbox "INBOX" of account id "606ACFB8-F0A8-4845-8EC4-E3F5A6D1979C"
		--> "B676143F-A62F-4176-80BD-D47BC2329B00@gmail.com"
end tell
tell application "Script Editor"
	set the clipboard to "message:%3C100084.517919641.201701161706167475358.0006349757@redaction.telerama.fr%3E
message:%3CB676143F-A62F-4176-80BD-D47BC2329B00@gmail.com%3E"
end tell

After disabling the four calling instructions I saved it as a rule and never got more than one url in the clipboard.
I enabled the first say instruction and it always said “I received 1 message(s)”

Hoping that it would help, I used a loop using an index after getting the same behavior with the original one.
But no positive effect.

Yvan KOENIG running Sierra 10.12.2 in French (VALLAURIS, France) lundi 16 janvier 2017 21:24:16

It’s strange that it will work with a selection but not when triggered by a rule. I’m starting to wonder whether this is just a mysterious Mail/Rule/Applescript bug.