diff --git a/uffd/api/views.py b/uffd/api/views.py
index 1871f0efd083ffbb2822fe75dad8518c40f4a39b..18104c29a04c2fa7b4cddd152c1b4cd2837b3e2e 100644
--- a/uffd/api/views.py
+++ b/uffd/api/views.py
@@ -3,6 +3,7 @@ import functools
 from flask import Blueprint, jsonify, current_app, request, abort
 
 from uffd.user.models import User, Group
+from uffd.mail.models import Mail
 from uffd.session.views import login_get_user, login_ratelimit
 
 bp = Blueprint('api', __name__, template_folder='templates', url_prefix='/api/v1/')
@@ -93,3 +94,26 @@ def checkpassword():
 		login_ratelimit.log(username)
 		return jsonify(None)
 	return jsonify(generate_user_dict(user))
+
+def generate_mail_dict(mail):
+	return {'name': mail.uid, 'receive_addresses': list(mail.receivers),
+	        'destination_addresses': list(mail.destinations)}
+
+@bp.route('/getmails', methods=['GET', 'POST'])
+@apikey_required('getmails')
+def getmails():
+	if len(request.values) > 1:
+		abort(400)
+	key = (list(request.values.keys()) or [None])[0]
+	values = request.values.getlist(key)
+	if key is None:
+		mails = Mail.query.all()
+	elif key == 'name' and len(values) == 1:
+		mails = Mail.query.filter_by(uid=values[0]).all()
+	elif key == 'receive_address' and len(values) == 1:
+		mails = Mail.query.filter_by(receivers=values[0]).all()
+	elif key == 'destination_address' and len(values) == 1:
+		mails = Mail.query.filter_by(destinations=values[0]).all()
+	else:
+		abort(400)
+	return jsonify([generate_mail_dict(mail) for mail in mails])