KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > compiere > request > EMailServer


1 /******************************************************************************
2  * The contents of this file are subject to the Compiere License Version 1.1
3  * ("License"); You may not use this file except in compliance with the License
4  * You may obtain a copy of the License at http://www.compiere.org/license.html
5  * Software distributed under the License is distributed on an "AS IS" basis,
6  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
7  * the specific language governing rights and limitations under the License.
8  * The Original Code is Compiere ERP & CRM Business Solution
9  * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc.
10  * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, parts
11  * created by ComPiere are Copyright (C) ComPiere, Inc.; All Rights Reserved.
12  * Contributor(s): ______________________________________.
13  *****************************************************************************/

14 package org.compiere.request;
15
16 import java.sql.*;
17 import java.util.*;
18 import java.io.*;
19
20 import javax.mail.*;
21 import javax.mail.internet.*;
22 import com.sun.mail.smtp.*;
23
24 import org.compiere.util.*;
25
26 /**
27  * Mail Server
28  *
29  * @author Jorg Janke
30  * @version $Id: EMailServer.java,v 1.2 2003/10/10 01:03:42 jjanke Exp $
31  */

32 public class EMailServer
33 {
34     /**
35      * Mail server
36      */

37     public EMailServer (String JavaDoc host, String JavaDoc user, String JavaDoc password)
38     {
39         // Session
40
System.out.println("Session ... ");
41         Properties props = new Properties();
42         props.put("mail.store.protocol", "smtp");
43         props.put("mail.transport.protocol", "smtp");
44         props.put("mail.host", host);
45         props.put("mail.user", user);
46         Session session = Session.getDefaultInstance(props, null);
47         session.setDebug(true);
48
49         // Connect to Store
50
System.out.println("Store ... ");
51         Store store;
52         try
53         {
54             store = session.getStore("imap");
55         }
56         catch (NoSuchProviderException nsp)
57         {
58             System.out.println(nsp.getMessage());
59             return;
60         }
61         System.out.println("Connect ... ");
62         try
63         {
64             store.connect(host, user, password);
65         }
66         catch (MessagingException mex1)
67         {
68             System.out.println(mex1.getMessage());
69             return;
70         }
71
72         // Folder
73
System.out.println("Folder ... ");
74         Folder folder;
75         try
76         {
77             folder = store.getDefaultFolder();
78         }
79         catch (MessagingException mex2)
80         {
81             System.out.println(mex2.getMessage());
82             return;
83         }
84         if (folder == null)
85         {
86             System.out.println("No default folder");
87             return;
88         }
89         try
90         {
91             Folder[] ff = folder.list("*");
92         // for (int i = 0; i < ff.length; i++)
93
// System.out.println(ff[i].getFullName());
94

95             System.out.println("Opening Folder ...");
96             folder = folder.getFolder("INBOX");
97             folder.open(Folder.READ_WRITE);
98
99             System.out.println("Folder: " + folder.getName() + "; Messages Total=" + folder.getMessageCount()
100                 + " New=" + folder.getNewMessageCount());
101
102             System.out.println("Get messages ...");
103             Message[] msg = folder.getMessages();
104
105             FetchProfile fp = new FetchProfile();
106             fp.add(FetchProfile.Item.ENVELOPE);
107             fp.add(FetchProfile.Item.FLAGS);
108             fp.add("X-Mailer");
109             folder.fetch(msg, fp);
110             //
111
for (int i = 0; i < msg.length; i++)
112             {
113                 printEnvelope(msg[i]);
114                 printBody(msg[i]);
115             }
116
117             folder.close(false);
118             store.close();
119         }
120         catch (MessagingException mex3)
121         {
122             System.out.println(mex3.getMessage());
123             return;
124         }
125         catch (Exception JavaDoc e)
126         {
127             System.out.println(e.getMessage());
128         }
129
130     } // EMail
131

132     private void printEnvelope(Message m) throws Exception JavaDoc
133     {
134         pr("-----------------------------------------------------------------");
135         Address[] a;
136         // FROM
137
if ((a = m.getFrom()) != null)
138         {
139             for (int j = 0; j < a.length; j++)
140                 pr("FROM: " + a[j].toString());
141         }
142
143         // TO
144
if ((a = m.getRecipients(Message.RecipientType.TO)) != null)
145         {
146             for (int j = 0; j < a.length; j++)
147                 pr("TO: " + a[j].toString());
148         }
149
150         // SUBJECT
151
pr("SUBJECT: " + m.getSubject());
152
153         // DATE
154
java.util.Date JavaDoc d = m.getSentDate();
155         pr("SendDate: " + (d != null ? d.toString() : "UNKNOWN"));
156
157         // FLAGS
158
Flags flags = m.getFlags();
159         StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
160         Flags.Flag[] sf = flags.getSystemFlags(); // get the system flags
161

162         boolean first = true;
163         for (int i = 0; i < sf.length; i++)
164         {
165             String JavaDoc s;
166             Flags.Flag f = sf[i];
167             if (f == Flags.Flag.ANSWERED)
168                 s = "\\Answered";
169             else if (f == Flags.Flag.DELETED)
170                 s = "\\Deleted";
171             else if (f == Flags.Flag.DRAFT)
172                 s = "\\Draft";
173             else if (f == Flags.Flag.FLAGGED)
174                 s = "\\Flagged";
175             else if (f == Flags.Flag.RECENT)
176                 s = "\\Recent";
177             else if (f == Flags.Flag.SEEN)
178                 s = "\\Seen";
179             else
180                 continue; // skip it
181
if (first)
182                 first = false;
183             else
184                 sb.append(' ');
185             sb.append(s);
186         }
187
188         String JavaDoc[] uf = flags.getUserFlags(); // get the user flag strings
189
for (int i = 0; i < uf.length; i++)
190         {
191             if (first)
192                 first = false;
193             else
194                 sb.append(' ');
195             sb.append(uf[i]);
196         }
197         pr("FLAGS: " + sb.toString());
198
199         // X-MAILER
200
String JavaDoc[] hdrs = m.getHeader("X-Mailer");
201         if (hdrs != null)
202             pr("X-Mailer: " + hdrs[0]);
203         else
204             pr("X-Mailer NOT available");
205
206     } // printEnvelope
207

208     private void printBody(Part p) throws Exception JavaDoc
209     {
210         pr("CONTENT-TYPE: " + p.getContentType());
211
212         /*
213          * Using isMimeType to determine the content type avoids
214          * fetching the actual content data until we need it.
215          */

216         if (p.isMimeType("text/plain"))
217         {
218             pr("Plain text ---------------------------");
219             System.out.println((String JavaDoc)p.getContent());
220         }
221         else if (p.isMimeType("multipart/*"))
222         {
223             pr("Multipart ---------------------------");
224             Multipart mp = (Multipart)p.getContent();
225             int count = mp.getCount();
226             for (int i = 0; i < count; i++)
227                 printBody(mp.getBodyPart(i));
228         }
229         else if (p.isMimeType("message/rfc822"))
230         {
231             pr("Nested ---------------------------");
232             printBody((Part)p.getContent());
233         }
234         else
235         {
236             /*
237              * If we actually want to see the data, and it's not a
238              * MIME type we know, fetch it and check its Java type.
239              */

240             Object JavaDoc o = p.getContent();
241             if (o instanceof String JavaDoc)
242             {
243                 pr("This is a string ---------------------------");
244                 System.out.println((String JavaDoc)o);
245             }
246             else if (o instanceof InputStream)
247             {
248                 pr("This is just an input stream ---------------------------");
249                 InputStream is = (InputStream)o;
250                 int c;
251                 while ((c = is.read()) != -1)
252                     System.out.write(c);
253             }
254             else
255             {
256                 pr("This is an unknown type ---------------------------");
257                 pr(o.toString());
258             }
259         }
260     } // printBody
261

262     private static void pr(String JavaDoc s)
263     {
264     // System.out.print(indentStr.substring(0, level * 2));
265
System.out.println(s);
266     }
267
268
269     /**************************************************************************
270      * Main Test
271      */

272     public static void main (String JavaDoc[] arg)
273     {
274     // EMailServer m = new EMailServer("sbs", "jjanke", "xxx");
275
// System.out.println(EMailServer.send("main", "jjanke@compiere.org", "jjanke@yahoo.com", "test1", "test1 message"));
276
// System.out.println(EMailServer.send("main", "administrator@compiere.org", "jjanke@yahoo.com", "test2", "test2 message"));
277
// System.out.println(EMailServer.send("main", "jjanke@compiere.org", "jjanke@yahoo.com", "test3", "test3 message"));
278

279     } // main
280

281
282 } // EMail
283
Popular Tags