home *** CD-ROM | disk | FTP | other *** search
/ CD Actual Thematic 7: Programming / CDAT7.iso / Share / Java / JDesignerPro / Jdp3_0.exe / data1.cab / Program_Files / JDPGetMail.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-04-09  |  8.8 KB  |  621 lines

  1. import java.io.BufferedInputStream;
  2. import java.io.File;
  3. import java.io.IOException;
  4. import java.io.PrintStream;
  5. import java.net.Socket;
  6. import java.util.Hashtable;
  7. import java.util.Properties;
  8. import java.util.Vector;
  9.  
  10. public class JDPGetMail {
  11.    JDPUser user;
  12.    String result = "";
  13.    String lastline;
  14.    short port = 110;
  15.    int maxCharLimit = 70;
  16.    // $FF: renamed from: s java.net.Socket
  17.    Socket field_0;
  18.    // $FF: renamed from: p java.io.PrintStream
  19.    PrintStream field_1;
  20.    // $FF: renamed from: in java.io.BufferedInputStream
  21.    BufferedInputStream field_2;
  22.    String mailhost;
  23.    byte[] fileContents;
  24.    Vector messages;
  25.    Properties messageProps;
  26.    Vector messageContents;
  27.    int currentPointer = -1;
  28.    Properties currentMessageProps;
  29.    int messageCount;
  30.    int totalMessages;
  31.    String attachmentDir = "temp";
  32.    int received;
  33.    int messageSize;
  34.    int lastPercent;
  35.    private char[] lineBuffer;
  36.  
  37.    public String getSubject() {
  38.       return this.currentPointer < 0 ? null : (String)this.currentMessageProps.get("Subject");
  39.    }
  40.  
  41.    public void setAttachmentDir(String var1) {
  42.       if (var1 != null) {
  43.          this.attachmentDir = var1;
  44.       }
  45.    }
  46.  
  47.    public String getToAddress() {
  48.       return this.currentPointer < 0 ? null : (String)this.currentMessageProps.get("To");
  49.    }
  50.  
  51.    String parseMessage(String var1, String var2) {
  52.       try {
  53.          if (var2 == null) {
  54.             String var3 = (String)this.messageProps.get("Content-Type");
  55.             if (var3 != null) {
  56.                int var4 = var3.toUpperCase().indexOf("BOUNDARY=");
  57.                if (var4 > 0) {
  58.                   var2 = var3.substring(var4 + 9);
  59.                   if (var2.startsWith("\"")) {
  60.                      var2 = var2.substring(1);
  61.                   }
  62.  
  63.                   if (var2.indexOf("\"") > 0) {
  64.                      var2 = var2.substring(0, var2.indexOf("\""));
  65.                   }
  66.                }
  67.             }
  68.          }
  69.  
  70.          while(var2 != null && var1 != null && !var1.equals("--" + var2)) {
  71.             var1 = this.readDataLine();
  72.             this.received += var1.length();
  73.          }
  74.  
  75.          while(var1 != null && !var1.equals(".") && !var1.equals("--" + var2 + "--")) {
  76.             if (var2 != null && var1 != null && var1.equals("--" + var2)) {
  77.                var1 = this.readDataLine();
  78.                this.received += var1.length();
  79.             }
  80.  
  81.             Properties var13 = new Properties();
  82.             String var14 = null;
  83.             if (var1.startsWith("Content-")) {
  84.                while(var1 != null && !var1.equals("") && !var1.equals(".") && !var1.equals("--" + var2 + "--")) {
  85.                   int var5 = var1.indexOf(": ");
  86.                   if (var5 > 0) {
  87.                      this.parseLine(var1);
  88.                      String var6 = var1.substring(0, var5);
  89.                      String var7 = var1.substring(var5 + 2);
  90.                      ((Hashtable)var13).put(var6, var7);
  91.                      if (var6.equals("Content-Type")) {
  92.                         int var8 = var7.toUpperCase().indexOf("BOUNDARY=");
  93.                         if (var8 > 0) {
  94.                            var14 = var7.substring(var8 + 9);
  95.                            if (var14.startsWith("\"")) {
  96.                               var14 = var14.substring(1);
  97.                            }
  98.  
  99.                            if (var14.indexOf("\"") > 0) {
  100.                               var14 = var14.substring(0, var14.indexOf("\""));
  101.                            }
  102.                         }
  103.                      }
  104.                   }
  105.  
  106.                   var1 = this.readLine();
  107.                   this.received += var1.length();
  108.                   this.displayProgress();
  109.                }
  110.             }
  111.  
  112.             if (var14 != null && !var14.equals(var2)) {
  113.                var1 = this.parseMessage(var1, var14);
  114.             } else {
  115.                var1 = this.readDataLine();
  116.                this.received += var1.length();
  117.                this.displayProgress();
  118.                String var15 = (String)((Hashtable)var13).get("Content-Transfer-Encoding");
  119.                String var16 = (String)((Hashtable)var13).get("Content-Disposition");
  120.                String var17 = null;
  121.                if (var16 != null) {
  122.                   int var18 = var16.indexOf("filename=");
  123.                   if (var18 > 0) {
  124.                      var17 = var16.substring(var18 + 9);
  125.                      if (var17.startsWith("\"")) {
  126.                         var17 = var17.substring(1);
  127.                      }
  128.  
  129.                      if (var17.indexOf("\"") > 0) {
  130.                         var17 = var17.substring(0, var17.indexOf("\""));
  131.                      }
  132.                   }
  133.                }
  134.  
  135.                new StringBuffer();
  136.  
  137.                StringBuffer var19;
  138.                try {
  139.                   if (var17 == null) {
  140.                      var19 = new StringBuffer();
  141.                   } else {
  142.                      var19 = new StringBuffer(this.messageSize);
  143.                   }
  144.                } catch (Exception var11) {
  145.                   System.out.println("Could not allocate memory: " + Integer.toString(this.messageSize));
  146.                   ((Throwable)var11).printStackTrace();
  147.                   var19 = new StringBuffer(100000);
  148.                }
  149.  
  150.                int var9 = 0;
  151.  
  152.                while(var1 != null && !var1.equals(".") && (var2 == null || !var1.startsWith("--" + var2))) {
  153.                   if (var15 != null && var15.equals("base64")) {
  154.                      var19.append(var1);
  155.                      var9 += var1.length();
  156.                   } else {
  157.                      var19.append(var1 + "\r\n");
  158.                      var9 += var1.length() + 2;
  159.                   }
  160.  
  161.                   var1 = this.readDataLine();
  162.                   this.received += var1.length() + 2;
  163.                   this.displayProgress();
  164.                }
  165.  
  166.                var19.setLength(var9);
  167.                if (var17 != null && var19.length() > 0) {
  168.                   if (var15 != null && var15.equals("base64")) {
  169.                      this.user.u.writeToFile(this.attachmentDir + File.separator + var17, JDPEncode.base64Decode(var19.toString()), "w+");
  170.                   } else {
  171.                      this.user.u.writeToFile(this.attachmentDir + File.separator + var17, var19.toString(), "w+");
  172.                   }
  173.  
  174.                   ((Hashtable)var13).put("Message", "\r\nAttachment converted: " + this.attachmentDir + File.separator + var17 + "\r\n");
  175.                   ((Hashtable)var13).put("Attachment", var17);
  176.                } else {
  177.                   ((Hashtable)var13).put("Message", var19.toString());
  178.                }
  179.  
  180.                this.messageContents.addElement(var13);
  181.             }
  182.          }
  183.       } catch (Exception var12) {
  184.          ((Throwable)var12).printStackTrace();
  185.       }
  186.  
  187.       return var1;
  188.    }
  189.  
  190.    String expect(String var1, String var2) throws Exception {
  191.       this.lastline = this.readDataLine();
  192.       if (var1 == null || this.lastline != null && this.lastline.startsWith(var1)) {
  193.          return this.lastline;
  194.       } else {
  195.          throw new Exception(var2 + ":" + this.lastline);
  196.       }
  197.    }
  198.  
  199.    public String getDate() {
  200.       return this.currentPointer < 0 ? null : (String)this.currentMessageProps.get("Date");
  201.    }
  202.  
  203.    void displayProgress() {
  204.       int var1 = 0;
  205.       if (this.messageSize > 0) {
  206.          var1 = this.received * 100 / this.messageSize;
  207.          if (var1 > 100) {
  208.             var1 = 100;
  209.          }
  210.  
  211.          if (var1 <= this.lastPercent + 2) {
  212.             return;
  213.          }
  214.  
  215.          this.lastPercent = var1;
  216.       }
  217.  
  218.       if (this.totalMessages > 0) {
  219.          if (this.messageSize > 0) {
  220.             this.user.mainmsg.setStatusMsg("Receiving message " + Integer.toString(this.messageCount + 1) + " of " + Integer.toString(this.totalMessages) + "...  " + Integer.toString(var1) + "%...", 0);
  221.          } else {
  222.             this.user.mainmsg.setStatusMsg("Receiving message " + Integer.toString(this.messageCount + 1) + " of " + Integer.toString(this.totalMessages) + "...  " + Integer.toString(this.received) + " bytes received...", 0);
  223.          }
  224.       } else if (this.messageSize > 0) {
  225.          this.user.mainmsg.setStatusMsg("Receiving message " + Integer.toString(this.messageCount + 1) + "...  " + Integer.toString(var1) + "%...", 0);
  226.       } else {
  227.          this.user.mainmsg.setStatusMsg("Receiving message " + Integer.toString(this.messageCount + 1) + "...  " + Integer.toString(this.received) + " bytes received...", 0);
  228.       }
  229.    }
  230.  
  231.    public int retrieveMessages(String var1, String var2) {
  232.       this.messages = new Vector();
  233.       this.messageCount = 0;
  234.       this.currentPointer = -1;
  235.       this.currentMessageProps = null;
  236.  
  237.       try {
  238.          this.field_1.print("USER " + var1 + "\r\n");
  239.          String var3 = this.expect("+OK", "user");
  240.          this.field_1.print("PASS " + var2 + "\r\n");
  241.          this.expect("+OK", "password");
  242.          this.field_1.print("STAT\r\n");
  243.          var3 = this.readDataLine();
  244.          if (var3.indexOf(" 0 messages") >= 0) {
  245.             this.user.mainmsg.setStatusMsg("No messages to retrieve.", 10);
  246.             return 0;
  247.          }
  248.  
  249.          this.totalMessages = 0;
  250.          int var5 = var3.indexOf(" message");
  251.          if (var5 > 0) {
  252.             int var6 = var3.lastIndexOf(" ", var5 - 1);
  253.  
  254.             try {
  255.                this.totalMessages = Integer.parseInt(var3.substring(var6 + 1, var5));
  256.             } catch (Exception var11) {
  257.             }
  258.          }
  259.  
  260.          while(this.totalMessages == 0 || this.messageCount < this.totalMessages) {
  261.             if (this.totalMessages > 0) {
  262.                this.user.mainmsg.setStatusMsg("Receiving message " + Integer.toString(this.messageCount + 1) + " of " + Integer.toString(this.totalMessages) + "...", 0);
  263.             } else {
  264.                this.user.mainmsg.setStatusMsg("Receiving message " + Integer.toString(this.messageCount + 1) + "...", 0);
  265.             }
  266.  
  267.             this.field_1.print("RETR " + Integer.toString(this.messageCount + 1) + "\r\n");
  268.             var3 = this.expect("+OK", "retr");
  269.             this.messageProps = new Properties();
  270.             String var16 = var3;
  271.             this.received += var3.length();
  272.             if (var3.indexOf("octets") < 0) {
  273.                var16 = this.readLine();
  274.                this.received += var16.length();
  275.             }
  276.  
  277.             this.displayProgress();
  278.             int var7 = var16.indexOf(" ");
  279.             int var8 = var16.indexOf(" ", var7 + 1);
  280.             this.messageSize = 0;
  281.  
  282.             try {
  283.                this.messageSize = Integer.parseInt(var16.substring(var7 + 1, var8));
  284.             } catch (Exception var10) {
  285.             }
  286.  
  287.             while(!var16.equals("")) {
  288.                this.parseLine(var16);
  289.                var16 = this.readLine();
  290.                this.received += var16.length();
  291.             }
  292.  
  293.             this.displayProgress();
  294.             this.messageContents = new Vector();
  295.  
  296.             for(String var17 = this.parseMessage(var16, (String)null); var17 != null && !var17.equals("."); var17 = this.readDataLine()) {
  297.             }
  298.  
  299.             this.messageProps.put("MessageContents", this.messageContents);
  300.             String var4 = (String)this.messageProps.get("Subject");
  301.             if (var4 != null) {
  302.                var4 = var4.toUpperCase();
  303.             }
  304.  
  305.             this.messages.addElement(this.messageProps);
  306.             ++this.messageCount;
  307.             this.received = 0;
  308.             this.lastPercent = 0;
  309.          }
  310.  
  311.          if (this.messageCount > 1) {
  312.             this.user.mainmsg.setStatusMsg(Integer.toString(this.messageCount) + " messages received.", 10);
  313.          } else {
  314.             this.user.mainmsg.setStatusMsg("1 message received.", 10);
  315.          }
  316.       } catch (Exception var12) {
  317.          this.user.mainmsg.setStatusMsg("Retrieval failed. See Java console.", 10);
  318.          ((Throwable)var12).printStackTrace();
  319.       }
  320.  
  321.       return this.messages.size();
  322.    }
  323.  
  324.    public int retrieveMessage(int var1) {
  325.       if (this.totalMessages < 0) {
  326.          return 0;
  327.       } else {
  328.          try {
  329.             this.user.mainmsg.setStatusMsg("Receiving message " + Integer.toString(var1 + 1) + " of " + Integer.toString(this.totalMessages) + "...", 0);
  330.             this.field_1.print("RETR " + Integer.toString(var1 + 1) + "\r\n");
  331.             String var2 = this.expect("+OK", "retr");
  332.             this.messageProps = new Properties();
  333.             String var4 = var2;
  334.             this.received += var2.length();
  335.             if (var2.indexOf("octets") < 0) {
  336.                var4 = this.readLine();
  337.                this.received += var4.length();
  338.             }
  339.  
  340.             this.displayProgress();
  341.             int var5 = var4.indexOf(" ");
  342.             int var6 = var4.indexOf(" ", var5 + 1);
  343.             this.messageSize = 0;
  344.  
  345.             try {
  346.                this.messageSize = Integer.parseInt(var4.substring(var5 + 1, var6));
  347.             } catch (Exception var8) {
  348.             }
  349.  
  350.             while(!var4.equals("")) {
  351.                this.parseLine(var4);
  352.                var4 = this.readLine();
  353.                this.received += var4.length();
  354.             }
  355.  
  356.             this.displayProgress();
  357.             this.messageContents = new Vector();
  358.  
  359.             for(String var11 = this.parseMessage(var4, (String)null); var11 != null && !var11.equals("."); var11 = this.readDataLine()) {
  360.             }
  361.  
  362.             this.messageProps.put("MessageContents", this.messageContents);
  363.             String var3 = (String)this.messageProps.get("Subject");
  364.             if (var3 != null) {
  365.                var3 = var3.toUpperCase();
  366.             }
  367.  
  368.             this.messages.addElement(this.messageProps);
  369.             ++this.messageCount;
  370.             this.received = 0;
  371.             this.lastPercent = 0;
  372.             return 1;
  373.          } catch (Exception var9) {
  374.             this.user.mainmsg.setStatusMsg("Retrieval failed. See Java console.", 10);
  375.             ((Throwable)var9).printStackTrace();
  376.             return 0;
  377.          }
  378.       }
  379.    }
  380.  
  381.    public String getMessage() {
  382.       if (this.currentPointer < 0) {
  383.          return null;
  384.       } else {
  385.          Vector var1 = (Vector)this.currentMessageProps.get("MessageContents");
  386.          StringBuffer var2 = new StringBuffer();
  387.  
  388.          for(int var3 = 0; var3 < var1.size(); ++var3) {
  389.             Properties var4 = (Properties)var1.elementAt(var3);
  390.             var2.append(((Hashtable)var4).get("Message"));
  391.          }
  392.  
  393.          return var2.toString();
  394.       }
  395.    }
  396.  
  397.    public String[] getAttachments() {
  398.       if (this.currentPointer < 0) {
  399.          return null;
  400.       } else {
  401.          Vector var1 = new Vector();
  402.          Vector var2 = (Vector)this.currentMessageProps.get("MessageContents");
  403.          new StringBuffer();
  404.  
  405.          for(int var3 = 0; var3 < var2.size(); ++var3) {
  406.             Properties var4 = (Properties)var2.elementAt(var3);
  407.             if (((Hashtable)var4).get("Attachment") != null) {
  408.                var1.addElement(((Hashtable)var4).get("Attachment"));
  409.             }
  410.          }
  411.  
  412.          String[] var5 = new String[var1.size()];
  413.  
  414.          for(int var6 = 0; var6 < var5.length; ++var6) {
  415.             var5[var6] = (String)var1.elementAt(var6);
  416.          }
  417.  
  418.          return var5;
  419.       }
  420.    }
  421.  
  422.    public boolean removeMessage(int var1) {
  423.       try {
  424.          this.field_1.print("DELE " + Integer.toString(var1) + "\r\n");
  425.          this.expect("+OK", "delete");
  426.          return true;
  427.       } catch (Exception var2) {
  428.          return false;
  429.       }
  430.    }
  431.  
  432.    String readLine() throws IOException {
  433.       String var1;
  434.       for(var1 = this.readDataLine(); var1.trim().endsWith(";"); var1 = var1 + this.readDataLine()) {
  435.       }
  436.  
  437.       return var1;
  438.    }
  439.  
  440.    public boolean closePort() {
  441.       if (this.field_1 == null) {
  442.          return false;
  443.       } else {
  444.          try {
  445.             this.field_1.print("QUIT\r\n");
  446.             this.expect("+OK", "quit");
  447.             return true;
  448.          } catch (Exception var6) {
  449.             this.result = ((Throwable)var6).getMessage();
  450.             ((Throwable)var6).printStackTrace();
  451.  
  452.             try {
  453.                if (this.field_0 != null) {
  454.                   this.field_0.close();
  455.                }
  456.             } catch (Exception var5) {
  457.                ((Throwable)var5).printStackTrace();
  458.                this.result = ((Throwable)var5).getMessage();
  459.             }
  460.  
  461.             return false;
  462.          }
  463.       }
  464.    }
  465.  
  466.    public boolean setMessagePointer(int var1) {
  467.       if (var1 >= this.messages.size()) {
  468.          return false;
  469.       } else {
  470.          this.currentPointer = var1;
  471.          this.currentMessageProps = (Properties)this.messages.elementAt(var1);
  472.          return true;
  473.       }
  474.    }
  475.  
  476.    void parseLine(String var1) {
  477.       try {
  478.          if (!var1.startsWith(" ")) {
  479.             int var2 = var1.indexOf(":");
  480.             if (var2 > 0) {
  481.                String var3 = var1.substring(0, var2);
  482.                String var4 = var1.substring(var2 + 1).trim();
  483.                this.messageProps.put(var3, var4);
  484.                return;
  485.             }
  486.          }
  487.       } catch (Exception var6) {
  488.          ((Throwable)var6).printStackTrace();
  489.       }
  490.  
  491.    }
  492.  
  493.    String readDataLine() throws IOException {
  494.       while(this.field_2.available() == 0) {
  495.          try {
  496.             Thread.sleep(500L);
  497.          } catch (Exception var5) {
  498.          }
  499.       }
  500.  
  501.       char[] var1 = this.lineBuffer;
  502.       if (var1 == null) {
  503.          var1 = this.lineBuffer = new char[2049];
  504.       }
  505.  
  506.       int var2 = var1.length;
  507.       int var3 = 0;
  508.       int var4 = -1;
  509.  
  510.       while(true) {
  511.          var4 = this.field_2.read();
  512.          switch (var4) {
  513.             case 13:
  514.                this.field_2.read();
  515.             case -1:
  516.             case 10:
  517.                if (var4 == -1 && var3 == 0) {
  518.                   return null;
  519.                }
  520.  
  521.                if (var3 == 0) {
  522.                   return "";
  523.                }
  524.  
  525.                return String.copyValueOf(var1, 0, var3);
  526.             case 180:
  527.             case 8217:
  528.                var4 = 39;
  529.          }
  530.  
  531.          --var2;
  532.          if (var2 < 0) {
  533.             var1 = new char[var3 + 2049];
  534.             var2 = var1.length - var3 - 1;
  535.             System.arraycopy(this.lineBuffer, 0, var1, 0, var3);
  536.             this.lineBuffer = var1;
  537.          }
  538.  
  539.          var1[var3++] = (char)var4;
  540.       }
  541.    }
  542.  
  543.    public int getMessageCount() {
  544.       return this.messageCount;
  545.    }
  546.  
  547.    public JDPGetMail(JDPUser var1, String var2) {
  548.       this.user = var1;
  549.       this.mailhost = var2;
  550.       if (!this.openPort()) {
  551.          System.out.println("Mail port open failed.");
  552.       }
  553.  
  554.    }
  555.  
  556.    public String getFromAddress() {
  557.       if (this.currentPointer < 0) {
  558.          return null;
  559.       } else if (this.currentMessageProps.get("From") != null) {
  560.          return (String)this.currentMessageProps.get("From");
  561.       } else if (this.currentMessageProps.get("X-Sender") != null) {
  562.          return (String)this.currentMessageProps.get("X-Sender");
  563.       } else {
  564.          return this.currentMessageProps.get("Return-Path") != null ? (String)this.currentMessageProps.get("Return-Path") : "";
  565.       }
  566.    }
  567.  
  568.    boolean openPort() {
  569.       this.field_0 = null;
  570.  
  571.       try {
  572.          this.field_0 = new Socket(this.mailhost, this.port);
  573.          this.field_1 = new PrintStream(this.field_0.getOutputStream());
  574.          this.field_2 = new BufferedInputStream(this.field_0.getInputStream());
  575.          return true;
  576.       } catch (Exception var3) {
  577.          this.result = ((Throwable)var3).getMessage();
  578.          ((Throwable)var3).printStackTrace();
  579.          return false;
  580.       }
  581.    }
  582.  
  583.    public int connect(String var1, String var2) {
  584.       this.messages = new Vector();
  585.       this.messageCount = 0;
  586.       this.currentPointer = -1;
  587.       this.currentMessageProps = null;
  588.       this.totalMessages = 0;
  589.  
  590.       try {
  591.          this.field_1.print("USER " + var1 + "\r\n");
  592.          String var3 = this.expect("+OK", "user");
  593.          this.field_1.print("PASS " + var2 + "\r\n");
  594.          this.expect("+OK", "password");
  595.          this.field_1.print("STAT\r\n");
  596.          var3 = this.readDataLine();
  597.          if (var3.indexOf(" 0 messages") >= 0) {
  598.             this.user.mainmsg.setStatusMsg("No messages to retrieve.", 10);
  599.             return 0;
  600.          }
  601.  
  602.          int var4 = var3.indexOf(" message");
  603.          if (var4 > 0) {
  604.             int var5 = var3.lastIndexOf(" ", var4 - 1);
  605.  
  606.             try {
  607.                this.totalMessages = Integer.parseInt(var3.substring(var5 + 1, var4));
  608.             } catch (Exception var7) {
  609.                return -1;
  610.             }
  611.          }
  612.       } catch (Exception var8) {
  613.          this.user.mainmsg.setStatusMsg("Retrieval failed. See Java console.", 10);
  614.          ((Throwable)var8).printStackTrace();
  615.          return -1;
  616.       }
  617.  
  618.       return this.totalMessages;
  619.    }
  620. }
  621.