I discovered I already had a keyboard maestro action to do this. I had deactivated it when I was using MailMate.
Apologies for not crediting the original author. If you are them, please let me know.
I can’t attach a .kmmacros file here, but the following can be used in a run script action in Keyboard Maestro (thanks @anon41602260 for the better example of uploading a script here). Caveat emptor, your mileage may vary, void where prohibited by law, sorry Tennessee.
tell application "Mail"
set _sel to get selection
set _links to {}
repeat with _msg in _sel
set _messageURL to "message://%3c" & _msg's message id & "%3e"
set end of _links to _messageURL
end repeat
set AppleScript's text item delimiters to return
set the clipboard to (_links as string)
end tell
Hmm, my own script for that is less complicated. Has the advantage of prompting if the user wants the link in standard message://... format or as a markdown link with [message subject](message://...).
tell application "Mail"
try
if selection is {} then error
set theMessage to the first item of (selection as list)
set theID to the message id of theMessage as string
set theLink to "message://%3c" & theID & "%3e"
set linkType to display alert "Markdown Link" buttons {"Yes", "No"} default button 2
set answer to button returned of linkType
if the answer is "No" then
set the clipboard to theLink
else
set the clipboard to "[" & subject of theMessage & "](" & theLink & ")"
end if
end try
end tell
Just run that script inside a “run a script” action in KM.
(Discourse garbles AppleScript code formatting, but the code above is intact and should be workable.)