robertklep / quotefixformac

QuoteFix for Apple Mail —
https://github.com/robertklep/quotefixformac/releases/latest
191 stars 15 forks source link

Cannot use message.from.email in if clause #53

Closed tkaufmann closed 8 years ago

tkaufmann commented 8 years ago

I added a dictionary in my customized attribution (email from: salutation). Now I'm trying to find out if message.from.email is a substring of "email from". This doesn't work ("A templating error occured"):

{% for key, value in persie.items() %}
    {% if (message.from.email in key) %}
Hey Foo!
    {% end %}
{% end %}

I'm quite sure it should, as the following code works (but doesn't help me much):

{% for key, value in persie.items() %}
    {% if ("foo@bar.local" in key) %}
Hey Foo!
    {% end %}
{% end %}

I'd be very thankful if you could help. I'm on OSX 10.11.1 with QuoteFix 2.7.0.

robertklep commented 8 years ago

How exactly did you define that dictionary? I think I found the issue: try using message.From.email (capital "F").

Sadly, templating errors aren't logged so it's difficult to debug these issues, I'll create a separate issue to enable some logging (#54)

tkaufmann commented 8 years ago

Well, that's better! Now only one problem is left - accessing the dictionary:

{% for key, value in persie.items() %}
    {% if (message.From.email.lower() in key) %}
        ${persie[value]}
    {% end %}
{% end %}

The ${persie[value]} is causing a template error.

robertklep commented 8 years ago

Don't you mean just ${value}?

tkaufmann commented 8 years ago

facepalm You're certainly correct. Unfortunately, this causes a template error, too. Here's the full template. It lacks an additional elif, but that doesn't matter for debugging:

{{ setvar("foo", "{'foo@foo.local': 'Hallo Herr XXXXXXXX'}") }}

{{ setvar("persie_1", "{'foo@foo.local': 'Hallo Herr XXXXXXXX'}") }}
{{ setvar("persie_2", "{'foo@foo.local': 'Hallo Herr XXXXXXXX'}") }}
{{ setvar("persie_3", "{'foo@foo.local': 'Hallo Frau XXXXXXXX'}") }}
{{ setvar("persie_4", "{'foo@foo.local': 'Hallo Herr XXXXXXXX'}") }}
{{ setvar("persie_5", "{'foo@foo.local': 'Hallo Frau XXXXXXXX'}") }}
{{ setvar("persie_6", "{'foo@foo.local': 'Hallo Frau XXXXXXXX'}") }}
{{ setvar("persie_7", "{'foo@foo.local': 'Hallo Herr XXXXXXXX'}") }}
{{ setvar("persie_8", "{'foo@foo.local': 'Hallo Herr XXXXXXXX'}") }}
{{ setvar("persie_9", "{'foo@foo.local': 'Hallo Herr XXXXXXXX'}") }}
{{ setvar("persie_10", "{'foo@foo.local': 'Hallo Herr XXXXXXXX'}") }}
{{ setvar("persie_11", "{'foo@foo.local': 'Hallo Herr XXXXXXXX'}") }}
{{ setvar("persie_12", "{'foo@foo.local': 'Hallo Herr XXXXXXXX'}") }}
{{ setvar("persie_13", "{'foo@foo.local': 'Hallo Frau XXXXXXXX'}") }}
{{ setvar("persie_14", "{'foo@foo.local': 'Hallo Herr XXXXXXXX'}") }}
{{ setvar("persie_15", "{'foo@foo.local': 'Hallo Herr XXXXXXXX'}") }}
{{ setvar("persie_16", "{'foo@foo.local': 'Hallo Frau XXXXXXXX'}") }}
{{ setvar("persie_17", "{'foo@foo.local': 'Hallo Frau XXXXXXXX'}") }}
{{ setvar("persie_18", "{'foo@foo.local': 'Hallo '}") }}
{{ setvar("persie_19", "{'foo@foo.local': 'Hallo '}") }}
{{ setvar("persie_20", "{'foo@foo.local': 'Hallo '}") }}
{{ setvar("persie_21", "{'foo@foo.local': 'Hallo '}") }}
{{ setvar("persie_22", "{'foo@foo.local': 'Hallo '}") }}
{{ setvar("persie_23", "{'foo@foo.local': 'Hallo '}") }}
{{ setvar("persie_24", "{'foo@foo.local': 'Hallo '}") }}
{{ setvar("persie_25", "{'foo@foo.local': 'Hallo '}") }}
{{ setvar("persie_26", "{'foo@foo.local': 'Hallo '}") }}
{{ setvar("persie_27", "{'foo@foo.local': 'Hallo '}") }}

{{ setvar("perdu_1", "{'foo@foo.local': 'Hallo XXXXXXXX'}") }}
{{ setvar("perdu_2", "{'foo@foo.local': 'Hallo XXXXXXXX'}") }}
{{ setvar("perdu_3", "{'foo@foo.local': 'Hallo XXXXXXXX'}") }}
{{ setvar("perdu_4", "{'foo@foo.local': 'Hallo XXXXXXXX'}") }}
{{ setvar("perdu_5", "{'foo@foo.local': 'Hallo XXXXXXXX'}") }}
{{ setvar("perdu_6", "{'foo@foo.local': 'Hallo XXXXXXXX'}") }}
{{ setvar("perdu_7", "{'foo@foo.local': 'Hallo XXXXXXXX'}") }}
{{ setvar("perdu_8", "{'foo@foo.local': 'Hallo XXXXXXXX'}") }}
{{ setvar("perdu_9", "{'foo@foo.local': 'Hallo XXXXXXXX'}") }}
{{ setvar("perdu_10", "{'foo@foo.local': 'Hallo XXXXXXXX'}") }}
{{ setvar("perdu_11", "{'foo@foo.local': 'Hallo XXXXXXXX'}") }}
{{ setvar("perdu_12", "{'foo@foo.local': 'Hallo XXXXXXXX'}") }}
{{ setvar("perdu_13", "{'foo@foo.local': 'Hallo XXXXXXXX'}") }}
{{ setvar("perdu_14", "{'foo@foo.local': 'Hallo XXXXXXXX'}") }}
{{ setvar("perdu_15", "{'foo@foo.local': 'Hi XXXXXXXX'}") }}
{{ setvar("perdu_16", "{'foo@foo.local': 'Hallo XXXXXXXX'}") }}
{{ setvar("perdu_17", "{'foo@foo.local': 'Hallo XXXXXXXX'}") }}
{{ setvar("perdu_18", "{'foo@foo.local': 'Hallo XXXXXXXX'}") }}
{{ setvar("perdu_19", "{'foo@foo.local': 'Hallo XXXXXXXX'}") }}
{{ setvar("perdu_20", "{'foo@foo.local': 'Hallo XXXXXXXX'}") }}
{{ setvar("perdu_21", "{'foo@foo.local': 'Hallo XXXXXXXX'}") }}
{{ setvar("perdu_22", "{'foo@foo.local': 'Hallo XXXXXXXX'}") }}
{{ setvar("perdu_23", "{'foo@foo.local': 'Hallo XXXXXXXX'}") }}
{{ setvar("perdu_24", "{'foo@foo.local': 'Hallo XXXXXXXX'}") }}
{{ setvar("perdu_25", "{'foo@foo.local': 'Hallo XXXXXXXX'}") }}
{{ setvar("perdu_26", "{'foo@foo.local': 'Hallo XXXXXXXX'}") }}
{{ setvar("perdu_27", "{'foo@foo.local': 'Hallo XXXXXXXX'}") }}

{{ setvar("persie", "dict(persie_1.items() + persie_2.items() + persie_3.items() + persie_4.items() + persie_5.items() + persie_6.items() + persie_7.items() + persie_8.items() + persie_9.items() + persie_10.items() + persie_11.items() + persie_12.items() + persie_13.items() + persie_14.items() + persie_15.items() + persie_16.items() + persie_17.items() + persie_18.items() + persie_19.items() + persie_20.items() + persie_21.items() + persie_22.items() + persie_23.items() + persie_24.items() + persie_25.items() + persie_26.items() + persie_27.items())") }}
{{ setvar("perdu", "dict(perdu_1.items() + perdu_2.items() + perdu_3.items() + perdu_4.items() + perdu_5.items() + perdu_6.items() + perdu_7.items() + perdu_8.items() + perdu_9.items() + perdu_10.items() + perdu_11.items() + perdu_12.items() + perdu_13.items() + perdu_14.items() + perdu_15.items() + perdu_16.items() + perdu_17.items() + perdu_18.items() + perdu_19.items() + perdu_20.items() + perdu_21.items() + perdu_22.items() + perdu_23.items() + perdu_24.items() + perdu_25.items() + perdu_26.items() + perdu_27.items())") }}

{% for key, value in persie.items() %}
    {% if (message.From.email.lower() in key) %}
        ${value}
    {% end %}
{% end %}
robertklep commented 8 years ago

Hmm, that seems to work okay with my standalone test script (here).

I'll push an update for QF shortly that will log templating errors when debugging mode is on (you can enable it in the "Advanced" settings).

tkaufmann commented 8 years ago

Ok, will get back to you then. Thanks again!

robertklep commented 8 years ago

New release pushed: 2.7.1

Errors are logged to the system log (/var/log/system.log), which you can view using the Console application (in /Applications/Utilities).

tkaufmann commented 8 years ago

Whether ${value} works or not seems to depend on the sender's email address. It works for most of them, but not all. Cannot post examples here but would like to get in touch. How can we do this?

robertklep commented 8 years ago

Feel free to e-mail me (robert DOT klep AT gmail DOT com)

tkaufmann commented 8 years ago

You've got mail ;-)

tkaufmann commented 8 years ago

Turned out, the solution was to use

${ unicode(value, 'utf-8') }

instead of

${value}