registry.java
上传用户:dinglihq
上传日期:2013-02-04
资源大小:99958k
文件大小:7k
源码类别:

Java编程

开发平台:

Java

  1. /*
  2.  * @(#)registry.java 1.9 01/05/23
  3.  *
  4.  * Copyright 1997-2000 Sun Microsystems, Inc. All Rights Reserved.
  5.  *
  6.  * Redistribution and use in source and binary forms, with or without
  7.  * modification, are permitted provided that the following conditions
  8.  * are met:
  9.  * 
  10.  * - Redistributions of source code must retain the above copyright
  11.  *   notice, this list of conditions and the following disclaimer.
  12.  * 
  13.  * - Redistribution in binary form must reproduce the above copyright
  14.  *   notice, this list of conditions and the following disclaimer in the
  15.  *   documentation and/or other materials provided with the distribution.
  16.  * 
  17.  * Neither the name of Sun Microsystems, Inc. or the names of contributors
  18.  * may be used to endorse or promote products derived from this software
  19.  * without specific prior written permission.
  20.  * 
  21.  * This software is provided "AS IS," without a warranty of any kind. ALL
  22.  * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
  23.  * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
  24.  * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND
  25.  * ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES OR LIABILITIES
  26.  * SUFFERED BY LICENSEE AS A RESULT OF  OR RELATING TO USE, MODIFICATION
  27.  * OR DISTRIBUTION OF THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
  28.  * SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR
  29.  * FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
  30.  * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
  31.  * ARISING OUT OF THE USE OF OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS
  32.  * BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
  33.  * 
  34.  * You acknowledge that Software is not designed, licensed or intended
  35.  * for use in the design, construction, operation or maintenance of any
  36.  * nuclear facility.
  37.  */
  38. import java.util.*;
  39. import javax.mail.*;
  40. import javax.mail.internet.*;
  41. /**
  42.  * This class demonstrates how to query the registry for available
  43.  * Providers, set default providers, etc. See section 5.2 in the
  44.  * JavaMail 1.0 Spec for details on how to use the registry.
  45.  * 
  46.  * See the comments inline for what's happening.
  47.  *
  48.  * @author Max Spivak
  49.  */
  50. public class registry {
  51.     // let's remember a few providers
  52.     static Provider _aProvider, _bProvider, _sunSMTP, _sunIMAP; 
  53.     public static void main(String[] args) {
  54. Properties props = new Properties();
  55. // set smtp and imap to be our default 
  56. // transport and store protocols, respectively
  57. props.put("mail.transport.protocol", "smtp");
  58. props.put("mail.store.protocol", "imap");
  59. // 
  60. props.put("mail.smtp.class", "com.sun.mail.smtp.SMTPTransport");
  61. props.put("mail.imap.class", "com.sun.mail.imap.IMAPStore");
  62. Session session = Session.getInstance(props, null);
  63. //session.setDebug(true);
  64. // Retrieve all configured providers from the Session
  65. System.out.println("n------ getProviders()----------");
  66. Provider[] providers = session.getProviders();
  67. for (int i = 0; i < providers.length; i++) {
  68.     System.out.println("** " + providers[i]);
  69.     // let's remember some providers so that we can use them later
  70.     // (I'm explicitly showing multiple ways of testing Providers)
  71.     // BTW, no Provider "ACME Corp" will be found in the default
  72.     // setup b/c its not in any javamail.providers resource files
  73.     String s = null;
  74.     if (((s = providers[i].getVendor()) != null) &&
  75. s.startsWith("ACME Corp")) {
  76. _aProvider = providers[i];
  77.     }
  78.     // this Provider won't be found by default either
  79.     if (providers[i].getClassName().endsWith("application.smtp"))
  80. _bProvider = providers[i];
  81.     // this Provider will be found since com.sun.mail.imap.IMAPStore
  82.     // is configured in javamail.default.providers
  83.     if (providers[i].getClassName().equals("com.sun.mail.imap.IMAPStore")){
  84. _sunIMAP = providers[i];
  85.     }
  86.     // this Provider will be found as well since there is a
  87.     // Sun Microsystems SMTP transport configured by 
  88.     // default in javamail.default.providers
  89.     if (((s = providers[i].getVendor()) != null) &&
  90. s.startsWith("Sun Microsystems") && 
  91. providers[i].getType() == Provider.Type.TRANSPORT &&
  92. providers[i].getProtocol().equalsIgnoreCase("smtp")) {
  93. _sunSMTP = providers[i];
  94.     }
  95. }
  96. System.out.println("n------ initial protocol defaults -------");
  97. try {
  98.     System.out.println("imap: " + session.getProvider("imap"));
  99.     System.out.println("smtp: " + session.getProvider("smtp"));
  100.     // the NNTP provider will fail since we don't have one configured
  101.     System.out.println("nntp: " + session.getProvider("nntp"));
  102. } catch (NoSuchProviderException mex) { 
  103.     System.out.println(">> This exception is OK since there is no NNTP Provider configured by default");
  104.     mex.printStackTrace();
  105. }
  106. System.out.println("n------ set new protocol defaults ------");
  107. // set some new defaults
  108. try {
  109.     // since _aProvider isn't configured, this will fail
  110.     session.setProvider(_aProvider);  // will fail
  111. } catch (NoSuchProviderException mex) { 
  112.     System.out.println(">> Exception expected: _aProvider is null");
  113.     mex.printStackTrace(); 
  114. }
  115. try {
  116.     // _sunIMAP provider should've configured correctly; should work
  117.     session.setProvider(_sunIMAP);
  118. } catch (NoSuchProviderException mex) { mex.printStackTrace(); }
  119. try {
  120.     System.out.println("imap: " + session.getProvider("imap"));
  121.     System.out.println("smtp: " + session.getProvider("smtp"));
  122. } catch (NoSuchProviderException mex) { mex.printStackTrace(); }
  123. System.out.println("nn----- get some stores ---------");
  124. // multiple ways to retrieve stores. these will print out the
  125. // string "imap:" since its the URLName for the store
  126. try {
  127.     System.out.println("getStore(): " + session.getStore());
  128.     System.out.println("getStore(Provider): " + 
  129.        session.getStore(_sunIMAP));
  130. } catch (NoSuchProviderException mex) {
  131.     mex.printStackTrace();
  132. }
  133. try {
  134.     System.out.println("getStore(imap): " + session.getStore("imap"));
  135.     // pop3 will fail since it doesn't exist
  136.     System.out.println("getStore(pop3): " + session.getStore("pop3"));
  137. } catch (NoSuchProviderException mex) { 
  138.     System.out.println(">> Exception expected: no pop3 provider");
  139.     mex.printStackTrace(); 
  140. }
  141. System.out.println("nn----- now for transports/addresses ---------");
  142. // retrieve transports; these will print out "smtp:" (like stores did)
  143. try {
  144.     System.out.println("getTransport(): " + session.getTransport());
  145.     System.out.println("getTransport(Provider): " + 
  146.        session.getTransport(_sunSMTP));
  147.     System.out.println("getTransport(smtp): " + 
  148.        session.getTransport("smtp"));
  149.     System.out.println("getTransport(Address): " + 
  150.        session.getTransport(new InternetAddress("mspivak@apilon")));
  151.     // News will fail since there's no news provider configured
  152.     System.out.println("getTransport(News): " + 
  153.        session.getTransport(new NewsAddress("rec.humor")));
  154. } catch (MessagingException mex) { 
  155.     System.out.println(">> Exception expected: no news provider configured");
  156.     mex.printStackTrace(); 
  157. }
  158.     }
  159. }