Это невозможно в общем случае (сообщения могут быть установлены из мест, где нет себя, таких как среда выполнения или основная функция), и это нецелесообразно даже там, где это технически возможно, потому что это потребует от вас пройтись по стеку и проанализировать байты там.
На практике вам не нужно знать отправителя в большинстве случаев, кроме методов действий. Обычно это признак плохого дизайна. И в любом случае, когда вам нужно получить ссылку на другой объект, она должна быть передана в качестве аргумента методу.
РЕДАКТИРОВАТЬ: Я просто наткнулся на это и заметил комментарий. В случае, если кому-то интересно, причина, по которой это часто является признаком плохого дизайна, заключается в том, что он создает тесную связь между компонентами, что почти никогда не требуется (опять же, за пределами методов действия). Обычно для выполнения той же цели вы можете взять делегат или блок обратного вызова.