54 session.sendCommand("354 Enter message now, end with .");
55 var message = session.readLinesUntil(messageEndPattern);
56 session.sendCommand("250 MESSAGE OK", quitPattern);
57
58 // Email headers are only 7-bit safe, ensure that we break any high ascii passing through
59 var inHeader = true;
60 var mailBody = new StringBuilder();
61 for (var line : message) {
62 if (inHeader) {
63 var headerMatcher = headerPattern.matcher(line);
64 if (headerMatcher.matches()) {
65 var quoteMatcher = encodeQuotedPrintablePattern.matcher(String.join("\n", message));
66 var ascii7line = quoteMatcher.replaceAll(mo -> "HIGH_ASCII");
67 mailBody.append(ascii7line);
68 mailBody.append("\n");
69 continue;
70 } else {
71 inHeader = false;
72 }
73 }
74 mailBody.append(line);
75 mailBody.append("\n");
76 }
77
78 var email = Email.parse(mailBody.toString());
79 emails.addLast(email);
80 }
81
82 @Override
83 public void run() {
84 while (!serverSocket.isClosed()) {
85 try {
86 try (var socket = serverSocket.accept();
87 var input = new InputStreamReader(socket.getInputStream());
88 var output = new OutputStreamWriter(socket.getOutputStream())) {
89 var session = new SMTPSession(input, output, Duration.ofMinutes(10));
90 handleSession(session);
91 }
92 } catch (SocketException e) {
93 // Socket closed
|
54 session.sendCommand("354 Enter message now, end with .");
55 var message = session.readLinesUntil(messageEndPattern);
56 session.sendCommand("250 MESSAGE OK", quitPattern);
57
58 // Email headers are only 7-bit safe, ensure that we break any high ascii passing through
59 var inHeader = true;
60 var mailBody = new StringBuilder();
61 for (var line : message) {
62 if (inHeader) {
63 var headerMatcher = headerPattern.matcher(line);
64 if (headerMatcher.matches()) {
65 var quoteMatcher = encodeQuotedPrintablePattern.matcher(String.join("\n", message));
66 var ascii7line = quoteMatcher.replaceAll(mo -> "HIGH_ASCII");
67 mailBody.append(ascii7line);
68 mailBody.append("\n");
69 continue;
70 } else {
71 inHeader = false;
72 }
73 }
74 if (line.startsWith(".")) {
75 line = line.substring(1);
76 }
77 mailBody.append(line);
78 mailBody.append("\n");
79 }
80
81 var email = Email.parse(mailBody.toString());
82 emails.addLast(email);
83 }
84
85 @Override
86 public void run() {
87 while (!serverSocket.isClosed()) {
88 try {
89 try (var socket = serverSocket.accept();
90 var input = new InputStreamReader(socket.getInputStream());
91 var output = new OutputStreamWriter(socket.getOutputStream())) {
92 var session = new SMTPSession(input, output, Duration.ofMinutes(10));
93 handleSession(session);
94 }
95 } catch (SocketException e) {
96 // Socket closed
|