KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > dotmarketing > servlets > PopBouncedMailServlet


1 package com.dotmarketing.servlets;
2
3 import java.io.BufferedReader JavaDoc;
4 import java.io.BufferedWriter JavaDoc;
5 import java.io.IOException JavaDoc;
6 import java.io.InputStreamReader JavaDoc;
7 import java.io.OutputStreamWriter JavaDoc;
8 import java.io.PrintWriter JavaDoc;
9 import java.net.Socket JavaDoc;
10
11 import javax.servlet.ServletException JavaDoc;
12 import javax.servlet.http.HttpServlet JavaDoc;
13 import javax.servlet.http.HttpServletRequest JavaDoc;
14 import javax.servlet.http.HttpServletResponse JavaDoc;
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 JavaDoc {
26
27     private static final long serialVersionUID = 1L;
28
29     public void doGet(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) throws ServletException JavaDoc, IOException JavaDoc {
30         response.setContentType("text/html");
31         PrintWriter JavaDoc 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 JavaDoc pullMail() {
46
47         StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
48         //
49
// displayMail [mailServer] [user] [password]
50
// (will not delete mail on the server)
51
try {
52             Socket JavaDoc s = new Socket JavaDoc(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 JavaDoc in = new BufferedReader JavaDoc(new InputStreamReader JavaDoc(s.getInputStream()));
57             BufferedWriter JavaDoc out = new BufferedWriter JavaDoc(new OutputStreamWriter JavaDoc(s.getOutputStream()));
58
59             String JavaDoc 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                 //
79
// If the mail was removed from the server
80
// (see getMail()) then we must COMMIT with
81
// the "QUIT" command :
82
send(out, "QUIT");
83                  send(out, "");
84
85             }
86         } catch (Exception JavaDoc e) {
87             Logger.warn(this, "e=" + e.getMessage(), e);
88         }
89         return sb.toString();
90     }
91
92     public String JavaDoc getMail(BufferedReader JavaDoc in, BufferedWriter JavaDoc out, int i) throws IOException JavaDoc {
93         String JavaDoc s = "";
94         //String t = "";
95
String JavaDoc 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             //t += s + "\n";
107
//get error message
108

109             if (s.startsWith("<<< ")) {
110                 errorMessage = s.substring(4).trim();
111
112             }
113
114             //get recipient id
115
if (s.startsWith("X-RecipientId:")) {
116                 java.util.StringTokenizer JavaDoc st = new java.util.StringTokenizer JavaDoc(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 we have a recipient
131
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("<","&lt;").replaceAll(">", "&gt;"));
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 JavaDoc out, String JavaDoc s) throws IOException JavaDoc {
182         out.write(s + "\n");
183         out.flush();
184     }
185
186     private String JavaDoc receive(BufferedReader JavaDoc in) throws IOException JavaDoc {
187         return in.readLine();
188     }
189
190     private void loginMail(BufferedReader JavaDoc in, BufferedWriter JavaDoc out, String JavaDoc user, String JavaDoc pass) throws IOException JavaDoc {
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 JavaDoc in, BufferedWriter JavaDoc out) throws IOException JavaDoc {
201         return GetNumberOfMessages(in, out);
202     }
203
204     public int GetNumberOfMessages(BufferedReader JavaDoc in, BufferedWriter JavaDoc out) throws IOException JavaDoc {
205         int i = 0;
206         String JavaDoc 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