home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1999 November / PCONLINE_11_99.ISO / filesbbs / OS2 / APCHSSL2.ZIP / OS2HTTPD / jserv / com / bitmechanic / smtp / Mailer.class (.txt) next >
Encoding:
Java Class File  |  1999-02-02  |  4.9 KB  |  205 lines

  1. package com.bitmechanic.smtp;
  2.  
  3. import com.bitmechanic.util.Queue;
  4. import java.io.BufferedReader;
  5. import java.io.IOException;
  6. import java.io.InputStreamReader;
  7. import java.io.PrintWriter;
  8. import java.net.InetAddress;
  9. import java.net.Socket;
  10. import java.net.UnknownHostException;
  11. import java.util.Enumeration;
  12. import java.util.Hashtable;
  13. import java.util.Vector;
  14.  
  15. public class Mailer implements Runnable {
  16.    protected String smtphost;
  17.    protected String localhost;
  18.    protected long messagesDelivered;
  19.    // $FF: renamed from: t java.lang.Thread
  20.    private Thread field_0;
  21.    private Queue mailQueue;
  22.    private boolean suspended;
  23.    private final char SMTP_ERROR_CODE1 = '4';
  24.    private final char SMTP_ERROR_CODE2 = '5';
  25.    private final boolean debug = false;
  26.  
  27.    public Mailer(String var1) {
  28.       this.smtphost = var1;
  29.       this.messagesDelivered = 0L;
  30.       this.mailQueue = new Queue();
  31.       this.suspended = false;
  32.       this.field_0 = new Thread(this);
  33.       this.field_0.setDaemon(true);
  34.       this.field_0.start();
  35.  
  36.       try {
  37.          InetAddress var2 = InetAddress.getLocalHost();
  38.          this.localhost = var2.getHostName();
  39.       } catch (UnknownHostException var3) {
  40.          this.log(var3);
  41.       }
  42.    }
  43.  
  44.    public long getMessagesDelivered() {
  45.       return this.messagesDelivered;
  46.    }
  47.  
  48.    public long getMessagesQueued() {
  49.       return (long)this.mailQueue.size();
  50.    }
  51.  
  52.    public synchronized void send(MailMessage var1) {
  53.       this.mailQueue.enqueue(var1);
  54.       this.notifyAll();
  55.    }
  56.  
  57.    public void log(Exception var1) {
  58.       ((Throwable)var1).printStackTrace();
  59.    }
  60.  
  61.    public void run() {
  62.       Socket var1 = null;
  63.       PrintWriter var2 = null;
  64.       BufferedReader var3 = null;
  65.  
  66.       while(true) {
  67.          Vector var4 = new Vector(20);
  68.  
  69.          try {
  70.             while(!this.mailQueue.empty()) {
  71.                if (var1 == null) {
  72.                   var1 = new Socket(this.smtphost, 25);
  73.                   var2 = new PrintWriter(var1.getOutputStream());
  74.                   var3 = new BufferedReader(new InputStreamReader(var1.getInputStream()));
  75.                   this.readReply(var3, var4);
  76.                   this.sendCommand(var2, "HELO " + this.localhost, var4);
  77.                   this.readReply(var3, var4);
  78.                }
  79.  
  80.                MailMessage var7 = (MailMessage)this.mailQueue.dequeue();
  81.                this.sendCommand(var2, "MAIL FROM: " + var7.getFrom(), var4);
  82.                this.readReply(var3, var4);
  83.                String[] var8 = var7.getToList();
  84.                String[] var9 = var7.getCCList();
  85.                String[] var10 = var7.getBCCList();
  86.                Hashtable var11 = new Hashtable();
  87.                this.sendList(var8, var11, var4, var2, var3);
  88.                this.sendList(var9, var11, var4, var2, var3);
  89.                this.sendList(var10, var11, var4, var2, var3);
  90.                this.sendCommand(var2, "DATA", var4);
  91.                this.readReply(var3, var4);
  92.                var2.print("To: ");
  93.  
  94.                for(int var12 = 0; var12 < var8.length; ++var12) {
  95.                   if (var12 != 0) {
  96.                      var2.print(", ");
  97.                   }
  98.  
  99.                   var2.print(var8[var12]);
  100.                }
  101.  
  102.                if (var9.length > 0) {
  103.                   var2.print("\r\nCC: ");
  104.  
  105.                   for(int var13 = 0; var13 < var9.length; ++var13) {
  106.                      if (var13 != 0) {
  107.                         var2.print(", ");
  108.                      }
  109.  
  110.                      var2.print(var9[var13]);
  111.                   }
  112.                }
  113.  
  114.                if (var10.length > 0) {
  115.                   var2.print("\r\nBCC: ");
  116.  
  117.                   for(int var34 = 0; var34 < var10.length; ++var34) {
  118.                      if (var34 != 0) {
  119.                         var2.print(", ");
  120.                      }
  121.  
  122.                      var2.print(var10[var34]);
  123.                   }
  124.                }
  125.  
  126.                var2.print("\r\nFrom: ");
  127.                var2.print(var7.getFrom());
  128.                var2.print("\r\nSubject: ");
  129.                var2.print(var7.getSubject());
  130.                Hashtable var35 = var7.getHeaders();
  131.                Enumeration var14 = var35.keys();
  132.  
  133.                while(var14.hasMoreElements()) {
  134.                   String var15 = (String)var14.nextElement();
  135.                   String var16 = (String)var35.get(var15);
  136.                   var2.print("\r\n" + var15 + ": " + var16);
  137.                }
  138.  
  139.                var2.print("\r\n\r\n");
  140.                var2.println(var7.getBody());
  141.                var2.println(".");
  142.                var2.flush();
  143.                this.readReply(var3, var4);
  144.                ++this.messagesDelivered;
  145.             }
  146.          } catch (Exception var31) {
  147.             this.log(var31);
  148.          } finally {
  149.             if (var1 != null) {
  150.                try {
  151.                   var2.flush();
  152.                   var1.close();
  153.                } catch (Exception var29) {
  154.                   System.err.println("Mailer: Unable to close socket to SMTP server");
  155.                   this.log(var29);
  156.                }
  157.  
  158.                var1 = null;
  159.                var2 = null;
  160.                var3 = null;
  161.             }
  162.  
  163.          }
  164.  
  165.          synchronized(this){}
  166.  
  167.          try {
  168.             if (this.mailQueue.empty()) {
  169.                try {
  170.                   this.wait();
  171.                } catch (InterruptedException var30) {
  172.                }
  173.             }
  174.          } catch (Throwable var33) {
  175.             throw var33;
  176.          }
  177.       }
  178.    }
  179.  
  180.    private void sendList(String[] var1, Hashtable var2, Vector var3, PrintWriter var4, BufferedReader var5) throws IOException {
  181.       for(int var6 = 0; var6 < var1.length; ++var6) {
  182.          if (var2.get(var1[var6]) == null) {
  183.             this.sendCommand(var4, "RCPT TO: " + var1[var6], var3);
  184.             this.readReply(var5, var3);
  185.             var2.put(var1[var6], var1[var6]);
  186.          }
  187.       }
  188.  
  189.    }
  190.  
  191.    private void sendCommand(PrintWriter var1, String var2, Vector var3) throws IOException {
  192.       var1.write(var2);
  193.       var1.write("\r\n");
  194.       var1.flush();
  195.    }
  196.  
  197.    private void readReply(BufferedReader var1, Vector var2) throws IOException {
  198.       String var3 = var1.readLine();
  199.       char var4 = var3.charAt(0);
  200.       if (var4 == '4' | var4 == '5') {
  201.          throw new IOException("SMTP: " + var3);
  202.       }
  203.    }
  204. }
  205.