As proposed by JohnWiegley in order to select a Message-ID from any nnml group:

    (defun gnus-goto-article (message-id)
      (let ((info (nnml-find-group-number message-id)))
        (gnus-summary-read-group (concat "nnml:" (car info)) nil t)
        (gnus-summary-goto-article (cdr info) nil t)))

With the very latest Gnus and nnir.el, you can use something like this (edit the “INBOX” string to a default mailbox name):

    (defun gnus-goto-article (message-id)
      (gnus-summary-read-group "INBOX" 15 t)
      (gnus-summary-refer-article message-id))

Make sure that nnir is high up in your gnus-refer-article-method list. Here’s what mine looks like:

     (nnir "nnimap:Local")
     (nntp "LocalNews"
           (nntp-address "localhost")
           (nntp-port-number 9119))
     (nntp "Gmane"
           (nntp-address ""))
     (nntp "Eternal September"
           (nntp-address "")
           (nntp-authinfo-user "jwiegley")))

The advantage here is that it finds the article by message-id anywhere that can be found via article referral. – JohnWiegley