1 package com.dotmarketing.servlets; 2 3 import java.io.BufferedReader ; 4 import java.io.BufferedWriter ; 5 import java.io.IOException ; 6 import java.io.InputStreamReader ; 7 import java.io.OutputStreamWriter ; 8 import java.io.PrintWriter ; 9 import java.net.Socket ; 10 11 import javax.servlet.ServletException ; 12 import javax.servlet.http.HttpServlet ; 13 import javax.servlet.http.HttpServletRequest ; 14 import javax.servlet.http.HttpServletResponse ; 15 16 import com.dotmarketing.beans.UserProxy; 17 import com.dotmarketing.cms.factories.PublicUserFactory; 18 import com.dotmarketing.factories.InodeFactory; 19 import com.dotmarketing.factories.UserProxyFactory; 20 import com.dotmarketing.portlets.campaigns.model.Recipient; 21 import com.dotmarketing.util.Logger; 22 import com.liferay.portal.model.User; 23 24 25 public class PopBouncedMailServlet extends HttpServlet { 26 27 private static final long serialVersionUID = 1L; 28 29 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException , IOException { 30 response.setContentType("text/html"); 31 PrintWriter out = response.getWriter(); 32 out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); 33 out.println("<HTML>"); 34 out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>"); 35 out.println(" <BODY>"); 36 out.print("<PRE>"); 37 out.print(pullMail()); 38 out.print("</PRE>"); 39 out.println(" </BODY>"); 40 out.println("</HTML>"); 41 out.flush(); 42 out.close(); 43 } 44 45 public String pullMail() { 46 47 StringBuffer sb = new StringBuffer (); 48 try { 52 Socket s = new Socket (com.dotmarketing.util.Config.getStringProperty("POP3_SERVER"), 110); 53 54 Logger.debug(this, "Pop Server:" + com.dotmarketing.util.Config.getStringProperty("POP3_SERVER")); 55 56 BufferedReader in = new BufferedReader (new InputStreamReader (s.getInputStream())); 57 BufferedWriter out = new BufferedWriter (new OutputStreamWriter (s.getOutputStream())); 58 59 String msg; 60 loginMail(in, out, com.dotmarketing.util.Config.getStringProperty("POP3_USER"), com.dotmarketing.util.Config.getStringProperty("POP3_PASSWORD")); 61 int i = checkMyMail(in, out); 62 63 Logger.debug(this, "Found " + i + " number of messages!"); 64 65 if (i == 0) { 66 sb.append("No mail waiting."); 67 } else { 68 for (int j = 1; j <= i; j++) { 69 70 msg = getMail(in, out, j); 71 72 Logger.debug(this, "msg=" + msg); 73 74 sb.append("*****" +"\n"); 75 sb.append(msg +"\n"); 76 sb.append("*****" +"\n"); 77 } 78 send(out, "QUIT"); 83 send(out, ""); 84 85 } 86 } catch (Exception e) { 87 Logger.warn(this, "e=" + e.getMessage(), e); 88 } 89 return sb.toString(); 90 } 91 92 public String getMail(BufferedReader in, BufferedWriter out, int i) throws IOException { 93 String s = ""; 94 String errorMessage = null; 96 97 Logger.debug(this, "RETR: before:" +i); 98 99 send(out, "RETR " + i); 100 101 Logger.debug(this, "RETR: after:" +i); 102 103 Recipient r = new Recipient(); 104 105 while (((s = in.readLine()) != null) && (!(s.equals(".")))) { 106 109 if (s.startsWith("<<< ")) { 110 errorMessage = s.substring(4).trim(); 111 112 } 113 114 if (s.startsWith("X-RecipientId:")) { 116 java.util.StringTokenizer st = new java.util.StringTokenizer (s, ": "); 117 st.nextToken(); 118 119 Logger.debug(this, "Found a X-Recipient ID=" + s); 120 121 r = (Recipient) InodeFactory.getInode(st.nextToken(), Recipient.class); 122 123 Logger.debug(this, "Found recipient=" + r.getInode()); 124 } 125 126 } 127 128 Logger.debug(this, "while loop ended"); 129 130 if (r.getInode() > 0) { 132 r.setLastResult(500); 133 134 if(errorMessage == null){ 135 r.setLastMessage("Email Bounced"); 136 } 137 else { 138 r.setLastMessage(errorMessage); 139 } 140 141 InodeFactory.saveInode(r); 142 143 Logger.debug(this, "Saved recipient with 500 last result" + r.getEmail()); 144 145 User user = PublicUserFactory.getUserByEmail(r.getEmail()); 146 UserProxy sub = UserProxyFactory.getUserProxy(user); 147 148 Logger.debug(this, "Subscriber =" + sub.getInode()); 149 150 if(sub.getInode() >0){ 151 152 Logger.debug(this, "errorMessage: " +errorMessage); 153 154 if(errorMessage == null){ 155 sub.setLastMessage("Email Bounced"); 156 } 157 else{ 158 sub.setLastMessage(errorMessage.replaceAll("<","<").replaceAll(">", ">")); 159 160 } 161 sub.setLastResult(500); 162 163 Logger.debug(this, "Before saving"); 164 165 InodeFactory.saveInode(sub); 166 167 Logger.debug(this, "After saving"); 168 } 169 Logger.debug(this, "Before deleting message"); 170 171 send(out, "DELE " + i); 172 receive(in); 173 174 Logger.debug(this, "After deleting message"); 175 } 176 177 Logger.debug(this, "Returning from getMail"); 178 return "found:" + r.getInode(); 179 } 180 181 private void send(BufferedWriter out, String s) throws IOException { 182 out.write(s + "\n"); 183 out.flush(); 184 } 185 186 private String receive(BufferedReader in) throws IOException { 187 return in.readLine(); 188 } 189 190 private void loginMail(BufferedReader in, BufferedWriter out, String user, String pass) throws IOException { 191 Logger.debug(this, "Logging in with user=" + user + " pwd=" + pass); 192 receive(in); 193 send(out, "USER " + user); 194 receive(in); 195 send(out, "PASS " + pass); 196 receive(in); 197 Logger.debug(this, "Logged in!"); 198 } 199 200 private int checkMyMail(BufferedReader in, BufferedWriter out) throws IOException { 201 return GetNumberOfMessages(in, out); 202 } 203 204 public int GetNumberOfMessages(BufferedReader in, BufferedWriter out) throws IOException { 205 int i = 0; 206 String s; 207 208 send(out, "LIST"); 209 receive(in); 210 while ((s = receive(in)) != null) { 211 Logger.debug(this, "Getting number of messages=" + s); 212 if (!(s.equals("."))) { 213 i++; 214 } else 215 return i; 216 } 217 return 0; 218 } 219 220 } 221 | Popular Tags |