]> WPIA git - gigi.git/blobdiff - src/org/cacert/gigi/email/Sendmail.java
Fix: various coverity charset issues.
[gigi.git] / src / org / cacert / gigi / email / Sendmail.java
index 812de6bd5b4cecd92758f9f19356b31ac478e3cd..2c8958cb443cc48fdfbe92dfdf2ea8b8777b90aa 100644 (file)
@@ -28,23 +28,23 @@ public class Sendmail extends EmailProvider {
 
         Socket smtp = new Socket("localhost", 25);
         PrintWriter out = new PrintWriter(smtp.getOutputStream());
-        BufferedReader in = new BufferedReader(new InputStreamReader(smtp.getInputStream()));
-        readResponse(in);
+        BufferedReader in = new BufferedReader(new InputStreamReader(smtp.getInputStream(), "UTF-8"));
+        readSMTPResponse(in, 220);
         out.print("HELO www.cacert.org\r\n");
         out.flush();
-        readResponse(in);
+        readSMTPResponse(in, 250);
         out.print("MAIL FROM:<returns@cacert.org>\r\n");
         out.flush();
-        readResponse(in);
+        readSMTPResponse(in, 250);
         bits = to.split(",");
         for (String user : bits) {
             out.print("RCPT TO:<" + user.trim() + ">\r\n");
             out.flush();
-            readResponse(in);
+            readSMTPResponse(in, 250);
         }
         out.print("DATA\r\n");
         out.flush();
-        readResponse(in);
+        readSMTPResponse(in, 250);
         out.print("X-Mailer: CAcert.org Website\r\n");
         // if (array_key_exists("REMOTE_ADDR", $_SERVER)) {
         // out.print("X-OriginatingIP: ".$_SERVER["REMOTE_ADDR"]."\r\n");
@@ -52,8 +52,10 @@ public class Sendmail extends EmailProvider {
         // TODO
         SimpleDateFormat emailDate = new SimpleDateFormat("E, d MMM yyyy HH:mm:ss ZZZZ (z)", Locale.ENGLISH);
         out.print("Date: " + emailDate.format(new Date(System.currentTimeMillis())) + "\r\n");
-        out.print("Sender: " + errorsto + "\r\n");
-        out.print("Errors-To: " + errorsto + "\r\n");
+        if (errorsto != null) {
+            out.print("Sender: " + errorsto + "\r\n");
+            out.print("Errors-To: " + errorsto + "\r\n");
+        }
         if (replyto != null) {
             out.print("Reply-To: " + replyto + "\r\n");
         } else {
@@ -63,7 +65,7 @@ public class Sendmail extends EmailProvider {
         out.print("To: " + to + "\r\n");
         if (NON_ASCII.matcher(subject).matches()) {
 
-            out.print("Subject: =?utf-8?B?" + Base64.getEncoder().encodeToString(subject.getBytes()) + "?=\r\n");
+            out.print("Subject: =?utf-8?B?" + Base64.getEncoder().encodeToString(subject.getBytes("UTF-8")) + "?=\r\n");
         } else {
             out.print("Subject: " + subject + "\r\n");
         }
@@ -85,17 +87,23 @@ public class Sendmail extends EmailProvider {
             smtp.close();
             return;
         }
-        readResponse(in);
+        readSMTPResponse(in, 250);
         out.print("QUIT\n");
         out.flush();
-        readResponse(in);
+        readSMTPResponse(in, 221);
         smtp.close();
     }
 
-    private static void readResponse(BufferedReader in) throws IOException {
+    public static boolean readSMTPResponse(BufferedReader in, int code) throws IOException {
         String line;
-        while ((line = in.readLine()) != null && line.matches("\\d+-")) {
+        while ((line = in.readLine()) != null) {
+            if (line.startsWith(code + " ")) {
+                return true;
+            } else if ( !line.startsWith(code + "-")) {
+                return false;
+            }
         }
+        return false;
 
     }