Skip to Content
Menu
This question has been flagged
3 Replies
7971 Views

When I try to send an invitation to a new user the error is "Cannot send email: user has no email address." The user does have an email address in the user form, but if you look in res_users the email field is blank.

To avoid the need for an invitation, I assigned passwords to the new users via the user form, but the passwords are rejected at login.

OpenERP is installed on my server, and the version is 7.saas~1. I used some recent tarballs from runbot/launchpad:

  2734543 2013-07-30 15:48 openerp_openerp-web_saas-1-r3740.tgz
 57124319 2013-07-30 15:33 openerp_openobject-addons_saas-1-r8753.tgz
 10571804 2013-07-30 15:47 openerp_openobject-server_saas-1-r4894.tgz

What should I look at to troubleshoot this?

I followed the code through addons/auth_signup/res_users.py,

    def action_reset_password(self, cr, uid, ids, context=None):
        """ create signup token for each user, and send their signup url by email """
        # prepare reset password signup
        res_partner = self.pool.get('res.partner')
        partner_ids = [user.partner_id.id for user in 
                                      self.browse(cr, uid, ids, context)]
        res_partner.signup_prepare(cr, uid, partner_ids, signup_type="reset", 
                             expiration=now(days=+1), context=context)

        if not context:
            context = {}

        # send email to users with their signup url 
        template = False
        if context.get('create_user'):
            try:
                template = self.pool.get('ir.model.data').get_object(cr, uid,
                                     'auth_signup', 'set_password_email')
            except ValueError:
                pass
        if not bool(template):
            template = self.pool.get('ir.model.data').get_object(cr, uid, 
                                   'auth_signup',  'reset_password_email')
        mail_obj = self.pool.get('mail.mail')
        assert template._name == 'email.template'
        for user in self.browse(cr, uid, ids, context):
            if not user.email:
                print repr(user)
                print repr(user.login)
                print repr(user.openid_email )
                traceback.print_exc(file="/tmp/stack")    

                raise osv.except_osv(
                         _("Cannot send email: user has no email address."), 
                        user.name)  
 

When it reads the res_users table, it gets the id and login fields correctly, but it gets nothing from the email field even though I have manually put an email address in using psql. Is it trying to get this email address from somewhere else?

Many thanks -- Rick

Avatar
Discard
Best Answer

Try setting an alias also.

Avatar
Discard
Author

Thanks. OpenERP seems to be creating an alias for each user automatically in the mail_alias table.

Author Best Answer

I have what seems like a crude hack to fix this signup issue. I say hack because I do not fully understand the system.

The hack: in Python code, take the 'login' field (containing joe@fooz.com), and write it to the 'email' field when the 'invite' button has been clicked, just before the invitation email is sent.

in addons/auth_signup/res_users.py, at line 269, remove:

 if not user.email:
      raise osv.except_osv(_("Cannot send email: user has no email address."), 
                           user.name)

replace it with

 if not user.email:
      # RWL AUG 2013
      values = {'email': user.login}
      self.write(cr, uid, user.id, values, context)

now I need to test it more.

Avatar
Discard
Best Answer

Why you dont want to use original e-mail adress?

Avatar
Discard
Related Posts Replies Views Activity
0
Jun 21
1657
1
Jan 24
16290
0
Mar 23
2209
1
Mar 15
6722
0
Mar 15
3385