Index: main/waeup.sirp/trunk/src/waeup/sirp/applicants/authentication.py
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/applicants/authentication.py	(revision 7228)
+++ main/waeup.sirp/trunk/src/waeup/sirp/applicants/authentication.py	(revision 7229)
@@ -245,4 +245,7 @@
         return None
 
+    def getAccount(self, login):
+        return None
+
 class ApplicantsAuthUtility(grok.GlobalUtility):
     """A global utility that sets up any PAU passed.
Index: main/waeup.sirp/trunk/src/waeup/sirp/browser/__init__.py
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/browser/__init__.py	(revision 7228)
+++ main/waeup.sirp/trunk/src/waeup/sirp/browser/__init__.py	(revision 7229)
@@ -4,4 +4,5 @@
     WAeUPPage, WAeUPLayout, WAeUPDisplayFormPage, WAeUPEditFormPage,
     WAeUPAddFormPage, NullValidator)
+from waeup.sirp.browser.pages import ContactAdminForm
 
 IMAGE_PATH = os.path.join(
Index: main/waeup.sirp/trunk/src/waeup/sirp/browser/browser.txt
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/browser/browser.txt	(revision 7228)
+++ main/waeup.sirp/trunk/src/waeup/sirp/browser/browser.txt	(revision 7229)
@@ -45,5 +45,5 @@
   >>> print browser.contents
   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"...
-  ...There were errors...
+  ...>Required input is missing...
   ...
 
Index: main/waeup.sirp/trunk/src/waeup/sirp/browser/pages.py
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/browser/pages.py	(revision 7228)
+++ main/waeup.sirp/trunk/src/waeup/sirp/browser/pages.py	(revision 7229)
@@ -479,5 +479,5 @@
         return get_user_account(self.request)
 
-    @grok.action('Send now')
+    @grok.action('Send message now')
     def send(self, *args, **data):
         useraccount = self.get_user_account
Index: main/waeup.sirp/trunk/src/waeup/sirp/students/browser.py
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/students/browser.py	(revision 7228)
+++ main/waeup.sirp/trunk/src/waeup/sirp/students/browser.py	(revision 7229)
@@ -31,5 +31,6 @@
 from waeup.sirp.accesscodes.workflow import USED
 from waeup.sirp.browser import (
-    WAeUPPage, WAeUPEditFormPage, WAeUPAddFormPage, WAeUPDisplayFormPage)
+    WAeUPPage, WAeUPEditFormPage, WAeUPAddFormPage, WAeUPDisplayFormPage,
+    ContactAdminForm)
 from waeup.sirp.browser.breadcrumbs import Breadcrumb
 from waeup.sirp.browser.resources import datepicker, datatable, tabs
@@ -37,5 +38,5 @@
     ManageActionButton, AddActionButton)
 from waeup.sirp.interfaces import (
-    IWAeUPObject, IUserAccount, IExtFileStore, IPasswordValidator)
+    IWAeUPObject, IUserAccount, IExtFileStore, IPasswordValidator, IContactForm)
 from waeup.sirp.widgets.datewidget import (
     FriendlyDateWidget, FriendlyDateDisplayWidget,
@@ -57,4 +58,5 @@
 from waeup.sirp.authentication import get_principal_role_manager
 from waeup.sirp.hostels.hostel import NOT_OCCUPIED
+from waeup.sirp.utils.helpers import get_user_account, send_mail
 
 def write_log_message(view, message):
@@ -350,4 +352,45 @@
             return 'set'
         return 'unset'
+
+class ContactActionButton(ManageActionButton):
+    grok.order(4)
+    grok.context(IStudent)
+    grok.view(StudentBaseDisplayFormPage)
+    grok.require('waeup.manageStudent')
+    icon = 'actionicon_mail.png'
+    text = 'Send email'
+    target = 'contacstudent'
+
+class ContactStudentForm(ContactAdminForm):
+    grok.context(IStudent)
+    grok.name('contacstudent')
+    grok.require('waeup.manageStudent')
+    pnav = 4
+    title = 'Contact'
+    form_fields = grok.AutoFields(IContactForm).select('subject', 'body')
+
+    def label(self):
+        return u'Send message to %s' % self.context.fullname
+
+    @grok.action('Send message now')
+    def send(self, *args, **data):
+        useraccount = self.get_user_account
+        if useraccount is None:
+            self.flash("You don't have a user account.")
+            return
+        fullname = useraccount.title
+        email_from = useraccount.email
+        username = useraccount.name
+        body = data['body']
+        #subject = u'Mail from SIRP'
+        subject = data['subject']
+        email_to = self.context.email
+        success = send_mail(fullname,username,self.config.name,
+                  body,email_from,email_to,subject)
+        if success:
+            self.flash('Your message has been sent.')
+        else:
+            self.flash('An smtp server error occurred.')
+        return
 
 class StudentBaseManageActionButton(ManageActionButton):
Index: main/waeup.sirp/trunk/src/waeup/sirp/utils/helpers.py
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/utils/helpers.py	(revision 7228)
+++ main/waeup.sirp/trunk/src/waeup/sirp/utils/helpers.py	(revision 7229)
@@ -27,5 +27,5 @@
 from cStringIO import StringIO
 from docutils.core import publish_string
-from zope.component import getUtility
+from zope.component import getUtility, getUtilitiesFor
 from zope.component.interfaces import IFactory
 from zope.interface import implementedBy
@@ -477,6 +477,9 @@
     """
     principal_id = request.principal.id
-    authenticator = getUtility(IAuthenticatorPlugin, name='users')
-    account = authenticator.getAccount(principal_id)
+    authenticators = getUtilitiesFor(IAuthenticatorPlugin)
+    for authenticator in authenticators:
+        account = authenticator[1].getAccount(principal_id)
+        if account:
+            break
     return account
 
