This is the problem: <table border="0" cellpadding="0" cellspacing="0" width="100%">
Notice you are extending mailing/template.html and you may have more similar problems there. This is subtle. auth.messages.reset_password is supposed to be a string with placeholders like %(key)s. Internally the placeholders are replaced using message = auth.messages.reset_password % dict(key=....) You generate auth.messages.reset_password using response.render and your template include %" and perhaps other % symbols. So when web2py does message = auth.messages.reset_password % dict(key=....) it expects % to be an escape symbol for a placeholder but %" is an invalid placeholder. So what do you do? You must replace all % which are not placeholders with %%. This can be automated: 1) define: def fixit(text): import re return re.compile('(\%)[^(]').sub('%%',text) 2) In your code define: auth.messages.reset_password = fixit(response.render(....)) et voila'. Massimo On Monday, 7 October 2013 09:29:08 UTC-5, Massimo Di Pierro wrote: > > > > On Monday, 7 October 2013 09:04:07 UTC-5, lesssugar wrote: >> >> Here's the code of mailing/pass_reset.html: >> >> {{extend 'mailing/template.html'}} >> >> <tr> >> <td bgcolor="#ffffff" style="padding: 40px 30px 40px 30px;"> >> <table border="0" cellpadding="0" cellspacing="0" width="100%"> >> <tbody> >> <tr> >> <td style="color: #000000; font-family: Arial, >> sans-serif; font-size: 20px;"> >> <b>Your requested password reset</b> >> </td> >> </tr> >> <tr> >> <td style="padding: 20px 0 30px 0; color: #333333; >> font-family: Arial, sans-serif; font-size: 14px; line-height: 22px;"> >> Click the link below to continue: >> </td> >> </tr> >> <tr> >> <td style="padding: 20px 0 30px 0; color: #333333; >> font-family: Arial, sans-serif; font-size: 14px; line-height: 22px;"> >> {{=link}} >> </td> >> </tr> >> <tr> >> <td style="padding: 10px 0 20px 0; color: #666666; >> font: italic 14px Georgia,serif; line-height: 22px;"> >> MR Team >> </td> >> </tr> >> </tbody> >> </table> >> </td> >> </tr> >> >> The view extends mailing/template.html but I used the temaplate for other >> mailings which work correct, so I guess the template is not a problem. >> >> >> On Monday, October 7, 2013 3:29:20 PM UTC+2, Massimo Di Pierro wrote: >>> >>> Sorry. Now I understand better what you are trying to do. Your invalid >>> character must be in mailing/pass_reset.html. Can you show us that file? >>> >>> On Monday, 7 October 2013 04:17:53 UTC-5, lesssugar wrote: >>>> >>>> Your problem does not come from the code you show us >>>> >>>> >>>> When I comment this piece of code *(A)*: >>>> auth.messages.reset_password = response.render( >>>> 'mailing/pass_reset.html', >>>> dict(subject='Password reset', >>>> link = 'http://'+request.env.http_host+URL('default', 'user', >>>> args=['reset_password'])+'/%(key)s')) >>>> >>>> - password reset works with no errors. >>>> >>>> The code you are showing is wrong because your link contains "%(key)s" >>>>> which is unresolved >>>> >>>> >>>> What do you mean? This code is directly copied from the book. E.g. when >>>> I do this *(B)*, the reset works as well: >>>> >>>> auth.messages.reset_password = 'Click on link http://'+ >>>> request.env.http_host + URL('default', 'user', args=['reset_password']) + >>>> '/%(key)s to reset your password' >>>> >>>> When I go with the earlier code *(A)*, it fails. >>>> >>>> Anyway, I'll keep digging. Thanks for help and suggestions. >>>> >>>> >>>> >>>> >>>> On Monday, October 7, 2013 4:36:22 AM UTC+2, Massimo Di Pierro wrote: >>>>> >>>>> I cannot help you without looking at the entire code. Your problem >>>>> does not come from the code you show us. >>>>> >>>>> The code you are showing is wrong because your link contains "%(key)s" >>>>> which is unresolved but this is not the cause of the (0x22) problem. >>>>> >>>>> >>>>> On Sunday, 6 October 2013 11:53:27 UTC-5, lesssugar wrote: >>>>>> >>>>>> Massimo (or anyone willing to help), >>>>>> >>>>>> all I'm trying to achieve is use my own email template to send a >>>>>> password-reset message to user. How do I do this properly? >>>>>> >>>>>> Currently, I have this >>>>>> >>>>>> *db.py* >>>>>> auth.messages.reset_password = response.render( >>>>>> 'mailing/pass_reset.html', >>>>>> dict(subject='Password reset', >>>>>> link = 'http://'+request.env.http_host+URL('default', 'user', >>>>>> args=['reset_password'])+'/%(key)s')) >>>>>> >>>>>> *pass_reset.html* >>>>>> ... >>>>>> <tr> >>>>>> <td style="padding: 20px 0 30px 0; color: #333333; font-family: >>>>>> Arial, sans-serif; font-size: 14px; line-height: 22px;"> >>>>>> *{{=link}}* >>>>>> </td> >>>>>> </tr> >>>>>> ... >>>>>> >>>>>> I constantly get "unsupported format character" error. The character >>>>>> (0x22) is ASCII quotation mark: *"*. I don't see it in my code. It's >>>>>> getting a little bit frustrating as I'm not sure where to look for the >>>>>> bug. >>>>>> >>>>>> On Thursday, October 3, 2013 1:22:50 AM UTC+2, Massimo Di Pierro >>>>>> wrote: >>>>>>> >>>>>>> What is this supposed to do? >>>>>>> >>>>>>> {{=XML('%(key)s')}} >>>>>>> >>>>>>> Are you sure you are not looking for: >>>>>>> >>>>>>> <a href="{{=URL('default','user', args=('reset_password',key), >>>>>>> scheme=True, host=True)}}"> Go to password reset</a> >>>>>>> >>>>>>> Is key a variable? >>>>>>> Anyway, I am not sure your problem comes from this code. >>>>>>> >>>>>>> On Wednesday, 2 October 2013 08:14:17 UTC-5, lesssugar wrote: >>>>>>>> >>>>>>>> Sorry, Massimo, but I really don't get it. Is the slash causing the >>>>>>>> problem? I use '[controller_name]/[view_name.html]' to render other >>>>>>>> emails >>>>>>>> and it's all ok. >>>>>>>> >>>>>>>> I even tried to do it this way in the mailing view: >>>>>>>> >>>>>>>> <a href="{{=URL('default','user', args='reset_password', >>>>>>>> scheme=True, host=True)}}/{{=XML('%(key)s')}}"> Go to password >>>>>>>> reset</a> >>>>>>>> >>>>>>>> - and nothing, still the same error. I would be grateful for >>>>>>>> another hint, if there is one. >>>>>>>> >>>>>>>> >>>>>>>> On Tuesday, October 1, 2013 10:31:23 PM UTC+2, Massimo Di Pierro >>>>>>>> wrote: >>>>>>>>> >>>>>>>>> You probably have same strange character in >>>>>>>>> 'mailing/pass_reset.html' >>>>>>>>> >>>>>>>>> On Tuesday, 1 October 2013 13:26:46 UTC-5, lesssugar wrote: >>>>>>>>>> >>>>>>>>>> I'm trying to send a custom email template to user when they >>>>>>>>>> perform password reset: >>>>>>>>>> >>>>>>>>>> *db.py:* >>>>>>>>>> >>>>>>>>>> auth.messages.reset_password = response.render( >>>>>>>>>> 'mailing/pass_reset.html', >>>>>>>>>> dict(subject="Password reset", >>>>>>>>>> link=URL('default','user', args='reset_password'))) >>>>>>>>>> >>>>>>>>>> and in *mailing/pass_reset.html*: >>>>>>>>>> >>>>>>>>>> ... >>>>>>>>>> <a href="{{=URL('default','user', args=['reset_password'], >>>>>>>>>> scheme=True, host=True) + '/%(key)s'}}"> Go to password reset</a> >>>>>>>>>> ... >>>>>>>>>> >>>>>>>>>> and everytime I'm testing, I get this: >>>>>>>>>> >>>>>>>>>> File "/home/username/www/web2py/gluon/tools.py", line 2739, in >>>>>>>>>> email_reset_password >>>>>>>>>> dict(key=reset_password_key, link=link)): >>>>>>>>>> ValueError: unsupported format character '"' (0x22) at index 411 >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Any ideas what might be wrong? >>>>>>>>>> >>>>>>>>>> -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.