The constantly growing offering of online learning materials to students is making it more difficult to locate specific information from data pools. Personalization systems attempt to reduce this complexity through adaptive e-learning and recommendation systems. The latter are, generally, based on machine learning techniques and algorithms and there has been progress. However, challenges remain in the form of data-scarcity, cold-start, scalability, time consumption and accuracy. In this article, we provide an overview of recommendation systems in the e-learning context following four strands: Content-Based, Collaborative Filtering, Knowledge-Based and Hybrid Systems. We developed a taxonomy that accounts for components required to develop an effective recommendation system. It was found that machine learning techniques, algorithms, datasets, evaluation, valuation and output are necessary components. This paper makes a significant contribution to the field by providing a much-needed overview of the current state of research and remaining challenges.