diff --git a/debian/changelog b/debian/changelog
index 728be31..160c3de 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -7,6 +7,8 @@ ubuntu-dev-tools (0.131) UNRELEASED; urgency=low
     (LP: #844734)
   * Debian source publication records are all Published now, not pending
     (LP: #845487)
+  * requestsync: Add nice error messages to gpg-signing code, rather than
+    simple assertions (LP: #537288)
 
   [ Colin Watson ]
   * syncpackage: Fix typo.
diff --git a/ubuntutools/requestsync/mail.py b/ubuntutools/requestsync/mail.py
index 2174d43..f8bc999 100644
--- a/ubuntutools/requestsync/mail.py
+++ b/ubuntutools/requestsync/mail.py
@@ -26,6 +26,7 @@ import smtplib
 import socket
 
 from debian.changelog import Version
+from devscripts.logger import Logger
 from distro_info import DebianDistroInfo
 
 from ubuntutools.archive import rmadison, FakeSPPH
@@ -113,10 +114,14 @@ def mailBug(srcpkg, subscribe, status, bugtitle, bugtext, bug_mail_domain,
 
     # prepare sign command
     gpg_command = None
-    for cmd in ('gpg', 'gpg2', 'gnome-gpg'):
+    for cmd in ('gnome-gpg', 'gpg2', 'gpg'):
         if os.access('/usr/bin/%s' % cmd, os.X_OK):
             gpg_command = [cmd]
-    assert gpg_command # TODO: catch exception and produce error message
+            break
+
+    if not gpg_command:
+        Logger.error("Cannot locate gpg, please install the 'gnupg' package")
+        sys.exit(1)
 
     gpg_command.append('--clearsign')
     if keyid:
@@ -126,7 +131,9 @@ def mailBug(srcpkg, subscribe, status, bugtitle, bugtext, bug_mail_domain,
     gpg = subprocess.Popen(gpg_command, stdin=subprocess.PIPE,
                            stdout=subprocess.PIPE)
     signed_report = gpg.communicate(mailbody.encode('utf-8'))[0].decode('utf-8')
-    assert gpg.returncode == 0
+    if gpg.returncode != 0:
+        Logger.error("%s failed", gpg_command[0])
+        sys.exit(1)
 
     # generate email
     mail = u'''\
@@ -142,26 +149,26 @@ Content-Type: text/plain; charset=UTF-8
 
     # connect to the server
     try:
-        print 'Connecting to %s:%s ...' % (mailserver_host, mailserver_port)
+        Logger.info('Connecting to %s:%s ...', mailserver_host, mailserver_port)
         s = smtplib.SMTP(mailserver_host, mailserver_port)
     except socket.error, s:
-        print >> sys.stderr, 'E: Could not connect to %s:%s: %s (%i)' % \
-            (mailserver_host, mailserver_port, s[1], s[0])
+        Logger.error('Could not connect to %s:%s: %s (%i)',
+                     mailserver_host, mailserver_port, s[1], s[0])
         return
 
     if mailserver_user and mailserver_pass:
         try:
             s.login(mailserver_user, mailserver_pass)
         except smtplib.SMTPAuthenticationError:
-            print >> sys.stderr, ('E: Error authenticating to the server: '
-                                  'invalid username and password.')
+            Logger.error('Error authenticating to the server: '
+                         'invalid username and password.')
             s.quit()
             return
         except:
-            print >> sys.stderr, 'E: Unknown SMTP error.'
+            Logger.error('Unknown SMTP error.')
             s.quit()
             return
 
     s.sendmail(myemailaddr, to, mail.encode('utf-8'))
     s.quit()
-    print 'Sync request mailed.'
+    Logger.normal('Sync request mailed.')