I am trying to send an email but before I was getting a nullpointerexception error which was due to mailSender not getting set correctly, now I edited the code as it is shown below and I am not getting any exception but the code breaks at the line
MimeMessage message = mailSender.createMimeMessage();
Here is my code (both sendMail() and addNewAlarm() are inside the same class "ElementService"):
public class ElementService implements ApplicationContextAware {
    private ApplicationContext ac;
public void sendMail(String toAddress, String subject, String body) throws  Exception{
   JavaMailSender mailSender = (JavaMailSender) ac.getBean("mailSender");
   MimeMessage message = mailSender.createMimeMessage();
   try{
    MimeMessageHelper helper = new MimeMessageHelper(message, true);
    helper.setFrom("xxx@gmail.com");
    helper.setTo(toAddress);
    helper.setSubject(subject);
    helper.setText(body);
     }catch (MessagingException e) {
        throw new MailParseException(e);
     }
       try{
           mailSender.send(message);
       }
       catch(Exception e){
           throw e;
       }
  }    
   //I want an email to be sent every 30 seconds
   @Scheduled(fixedDelay = 30*1000)
   public void function2RepeatEvery30Seconds()
   {
       MailService mailer = (MailService) ac.getBean("mailService");
       mailer.sendMail("xxx@hotmail.com","subject","body");
       //does other stuff..
    }  
    @Override
    public void setApplicationContext(ApplicationContext ac) throws BeansException {
        this.ac = ac;
    }
}
These are the beans in my xml:
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<!-- SMTP settings -->
<property name="host" value="smtp.gmail.com" />
<property name="port" value="587" />
<property name="username" value="***@gmail.com" />
<property name="password" value="*****" />
<property name="javaMailProperties">
    <!-- additional properties specific to JavaMail -->
    <props>
        <prop key="mail.transport.protocol">smtp</prop>
        <prop key="mail.smtp.auth">true</prop>
        <prop key="mail.smtp.starttls.enable">true</prop>
    </props>
</property>
</bean>
In debug mode I can see that mailSender has been set according to the properties shown on the mailSender bean.