Actually the first is grammatically correct, though a little awkward, the second is wrong.
The essence of both is the verbal construct. In the first we have:
did not send
This is perfectly valid. "Did" is a helper for the negation "not".
In the second we have
has not send (sic)
This second is incorrect. What you are probably going for is (to have with the past participle):
has not sent
Which is the present perfect form of "to send", essentially meaning that the action of sending (letters) which should have happened in the past and completed now, did not happen.
Were you to correct the "send" in the second to "sent" both would be valid, with slightly different meanings. The first is emphasizing the present state of there having been no letters sent, whereas the second emphasizing the continuous nature, a process in time when letters would have expect to have been sent, but were not. (The difference is in the verb's aspect.)
The sentences are both awkward because the adverbial phrase "so far" is in an odd place. This might better be extracted. The sentence could be written better as:
In spite of several reminders, he did not send any reply to my letters so far.
In spite of several reminders, he has not sent any reply to my letters so far.
Or better:
Despite several reminders he did not reply to any of my letters so far.
Despite several reminders he has not replied to any of my letters so far.