diff --git a/app/src/main/java/eu/faircode/email/EmailProvider.java b/app/src/main/java/eu/faircode/email/EmailProvider.java index 56dfbb43d1..b90cb4fd72 100644 --- a/app/src/main/java/eu/faircode/email/EmailProvider.java +++ b/app/src/main/java/eu/faircode/email/EmailProvider.java @@ -1049,8 +1049,10 @@ public class EmailProvider implements Parcelable { EntityLog.log(context, "Handshake " + address + ": " + Log.formatThrowable(ex)); } finally { try { - if (sslSocket != null) + if (sslSocket != null) { + signOff(sslSocket, context); sslSocket.close(); + } } catch (Throwable ex) { Log.e(ex); } @@ -1157,6 +1159,30 @@ public class EmailProvider implements Parcelable { throw new SocketException("No STARTTLS"); } + private void signOff(Socket socket, Context context) { + try { + String command = (port == 465 || port == 587 ? "QUIT" : "A002 LOGOUT"); + + EntityLog.log(context, EntityLog.Type.Protocol, + socket.getRemoteSocketAddress() + " >" + command); + socket.getOutputStream().write((command + "\n").getBytes()); + + LineInputStream lis = + new LineInputStream( + new BufferedInputStream( + socket.getInputStream())); + String response; + do { + response = lis.readLine(); + if (response != null) + EntityLog.log(context, EntityLog.Type.Protocol, + socket.getRemoteSocketAddress() + " <" + response); + } while (response != null); + } catch (IOException ex) { + Log.w(ex); + } + } + @Override public boolean equals(Object obj) { if (obj instanceof Server) {