summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Levy <alon@pobox.com>2015-01-13 15:12:37 +0200
committerAlon Levy <alon@pobox.com>2015-01-13 15:13:28 +0200
commit3442b83dbc1b67b01cd43c6fec122eebea8d03cf (patch)
treeacccc245aa8f440fd6da7a200567eea201fcfae7
parent6c4ddbdaf3b58415b58b7d351af14fc37aad84b3 (diff)
server/feedback: get rid of flask-mail; left todo: filenames for attachments
-rw-r--r--res/etc/rhizi-server.conf6
-rw-r--r--src/client/rz_config.js2
-rw-r--r--src/server/rz_feedback.py2
-rw-r--r--src/server/rz_mail.py40
-rw-r--r--src/server/rz_server.py8
5 files changed, 39 insertions, 19 deletions
diff --git a/res/etc/rhizi-server.conf b/res/etc/rhizi-server.conf
index c40aba07..186a1711 100644
--- a/res/etc/rhizi-server.conf
+++ b/res/etc/rhizi-server.conf
@@ -9,9 +9,7 @@ SERVER_NAME = rhizi.local:8080
DEBUG = True
# Mail settings
-MAIL_DEFAULT_SENDER = rhizi@localhost
-# 0/1 (not True - uses int)
-MAIL_DEBUG = 0
-FEEDBACK_RECIPIENT = feedback@localhost
+mail_default_sender = rhizi@localhost
+feedback_recipient = feedback@localhost
SECRET_KEY = notverysecretbutpeppyyaya
diff --git a/src/client/rz_config.js b/src/client/rz_config.js
index 858fbf18..df283f41 100644
--- a/src/client/rz_config.js
+++ b/src/client/rz_config.js
@@ -5,7 +5,7 @@ define(function() {
'rz_server_host': 'rhizi.local',
'rz_server_port': '8080',
'backend_enabled': true,
- 'backend__maintain_ws_connection': false,
+ 'backend__maintain_ws_connection': true,
'feedback_url': '/feedback',
};
});
diff --git a/src/server/rz_feedback.py b/src/server/rz_feedback.py
index 7c0f8b0b..071be4dc 100644
--- a/src/server/rz_feedback.py
+++ b/src/server/rz_feedback.py
@@ -46,7 +46,7 @@ watching URL:
Left note:
%(note)s
""" % dict(url=url, note=note, user=session_user if session_user else "Not logged in")
- send_message(recipients=[current_app.rz_config.FEEDBACK_RECIPIENT],
+ send_message(recipients=[current_app.rz_config.feedback_recipient],
subject="User feedback from Rhizi",
body=feedback_body,
attachments=[
diff --git a/src/server/rz_mail.py b/src/server/rz_mail.py
index e512ed91..4addc9f2 100644
--- a/src/server/rz_mail.py
+++ b/src/server/rz_mail.py
@@ -1,19 +1,35 @@
-from flask_mail import Mail, Message
+import smtplib
+from os.path import basename
+from email.mime.base import MIMEBase
+from email.mime.multipart import MIMEMultipart
+from email.mime.text import MIMEText
+from email.utils import COMMASPACE, formatdate
+from email import Encoders
-mail = None
-
-def init_mail(webapp):
- global mail
- mail = Mail(webapp)
+from flask import current_app
def send_message(recipients, subject, attachments, body):
"""
- attachments is a list of tuples (filename, data)
- libmagic is used to guess the mimetype
+ attachments is a list of tuples (filename, mimetype, data)
"""
- msg = Message(subject, recipients=recipients)
- msg.body = body
+ assert isinstance(recipients, list)
+ send_from = current_app.rz_config.mail_default_sender
+ msg = MIMEMultipart(
+ From=send_from,
+ To=COMMASPACE.join(recipients),
+ Date=formatdate(localtime=True),
+ Subject=subject
+ )
+ msg.attach(MIMEText(body))
+
for filename, mimetype, data in attachments:
- msg.attach(filename=filename, content_type=mimetype, data=data)
- mail.send(msg)
+ maintype, subtype = mimetype.split('/')
+ part = MIMEBase(maintype, subtype)
+ part.set_payload(data)
+ Encoders.encode_base64(part)
+ part.add_header('Content_Disposition', 'attachment; filename="%s"' % filename)
+ msg.attach(part)
+ smtp = smtplib.SMTP(current_app.rz_config.mail_hostname)
+ smtp.sendmail(send_from, recipients, msg.as_string())
+ smtp.close()
diff --git a/src/server/rz_server.py b/src/server/rz_server.py
index 648bfe9c..be190b9a 100644
--- a/src/server/rz_server.py
+++ b/src/server/rz_server.py
@@ -50,6 +50,13 @@ class Config(object):
cfg['static_url_path'] = '/static'
cfg['htpasswd_path'] = os.path.join(cfg['config_dir'], 'htpasswd')
+ # Mail settings
+ cfg['mail_hostname'] = 'localhost'
+ cfg['mail_port'] = 25
+
+ # User feedback settings
+ cfg['feedback_recipient'] = 'feedback@localhost'
+
# Flask keys
cfg['SECRET_KEY'] = ''
@@ -259,6 +266,5 @@ if __name__ == "__main__":
kernel = RZ_Kernel()
webapp = init_webapp(cfg, kernel)
ws_srv = init_ws_interface(cfg, kernel, webapp)
- init_mail(webapp)
ws_srv.serve_forever()