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)))