Bỏ qua để đến Nội dung
Menu
Câu hỏi này đã bị gắn cờ
3 Trả lời
8583 Lượt xem

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

Ảnh đại diện
Huỷ bỏ
Câu trả lời hay nhất

Try setting an alias also.

Ảnh đại diện
Huỷ bỏ
Tác giả

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

Tác giả Câu trả lời hay nhất

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.

Ảnh đại diện
Huỷ bỏ
Câu trả lời hay nhất

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

Ảnh đại diện
Huỷ bỏ
Bài viết liên quan Trả lời Lượt xem Hoạt động
0
thg 6 21
2126
1
thg 1 24
16960
0
thg 3 23
2677
1
thg 3 15
7144
0
thg 3 15
3753