diff --git a/admin/mailu/admin/forms.py b/admin/mailu/admin/forms.py index 015a6df1..d653a2f8 100644 --- a/admin/mailu/admin/forms.py +++ b/admin/mailu/admin/forms.py @@ -119,6 +119,7 @@ class FetchForm(flask_wtf.FlaskForm): tls = fields.BooleanField(_('Enable TLS')) username = fields.StringField(_('Username')) password = fields.StringField(_('Password')) + keep = fields.BooleanField(_('Keep emails on the server')) submit = fields.SubmitField(_('Submit')) diff --git a/admin/mailu/admin/models.py b/admin/mailu/admin/models.py index ff46b9f9..9e4bcd10 100644 --- a/admin/mailu/admin/models.py +++ b/admin/mailu/admin/models.py @@ -222,5 +222,6 @@ class Fetch(Base): tls = db.Column(db.Boolean(), nullable=False) username = db.Column(db.String(255), nullable=False) password = db.Column(db.String(255), nullable=False) + keep = db.Column(db.Boolean(), nullable=False) last_check = db.Column(db.DateTime, nullable=True) error = db.Column(db.String(1023), nullable=True) diff --git a/admin/mailu/admin/templates/fetch/list.html b/admin/mailu/admin/templates/fetch/list.html index 1e82cb78..54364a0f 100644 --- a/admin/mailu/admin/templates/fetch/list.html +++ b/admin/mailu/admin/templates/fetch/list.html @@ -19,6 +19,7 @@ {% trans %}Actions{% endtrans %} {% trans %}Endpoint{% endtrans %} {% trans %}Username{% endtrans %} + {% trans %}Keep emails{% endtrans %} {% trans %}Last check{% endtrans %} {% trans %}Status{% endtrans %} {% trans %}Created{% endtrans %} @@ -32,6 +33,7 @@ {{ fetch.protocol }}{{ 's' if fetch.tls else '' }}://{{ fetch.host }}:{{ fetch.port }} {{ fetch.username }} + {% if fetch.keep %}{% trans %}yes{% endtrans %}{% else %}{% trans %}no{% endtrans %}{% endif %} {{ fetch.last_check or '-' }} {{ fetch.error or '-' }} {{ fetch.created_at }} diff --git a/admin/migrations/versions/3f6994568962_.py b/admin/migrations/versions/3f6994568962_.py new file mode 100644 index 00000000..2e59c160 --- /dev/null +++ b/admin/migrations/versions/3f6994568962_.py @@ -0,0 +1,32 @@ +""" Add keep as an option in fetches + +Revision ID: 3f6994568962 +Revises: 2335c80a6bc3 +Create Date: 2017-02-02 22:31:00.719703 + +""" + +# revision identifiers, used by Alembic. +revision = '3f6994568962' +down_revision = '2335c80a6bc3' + +from alembic import op +import sqlalchemy as sa + +from mailu import app, db +from mailu.admin import models + + +def upgrade(): + op.add_column('fetch', sa.Column('keep', sa.Boolean(), nullable=False, server_default=sa.sql.expression.false())) + # also apply the current config value if set + if app.config.get("FETCHMAIL_KEEP", "False") == "True": + for fetch in models.Fetch.query.all(): + fetch.keep = True + db.session.commit() + + + +def downgrade(): + with op.batch_alter_table('fetch') as batch: + batch.drop_column('keep') diff --git a/fetchmail/fetchmail.py b/fetchmail/fetchmail.py index f6453825..3ef218de 100755 --- a/fetchmail/fetchmail.py +++ b/fetchmail/fetchmail.py @@ -37,14 +37,14 @@ def fetchmail(fetchmailrc): return output -def run(connection, cursor, keep, debug): +def run(connection, cursor, debug): cursor.execute(""" - SELECT user_email, protocol, host, port, tls, username, password + SELECT user_email, protocol, host, port, tls, username, password, keep FROM fetch """) for line in cursor.fetchall(): fetchmailrc = "" - user_email, protocol, host, port, tls, username, password = line + user_email, protocol, host, port, tls, username, password, keep = line options = "options antispam 501, 504, 550, 553, 554" options += " ssl" if tls else "" options += " keep" if keep else " fetchall" @@ -83,11 +83,10 @@ def run(connection, cursor, keep, debug): if __name__ == "__main__": debug = os.environ.get("DEBUG", None) == "True" - keep = os.environ.get("FETCHMAIL_KEEP", None) == "True" db_path = os.environ.get("DB_PATH", "/data/main.db") connection = sqlite3.connect(db_path) while True: cursor = connection.cursor() - run(connection, cursor, keep, debug) + run(connection, cursor, debug) cursor.close() time.sleep(int(os.environ.get("FETCHMAIL_DELAY", 60)))