home *** CD-ROM | disk | FTP | other *** search
- package com.bitmechanic.smtp;
-
- import com.bitmechanic.util.Queue;
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.io.PrintWriter;
- import java.net.InetAddress;
- import java.net.Socket;
- import java.net.UnknownHostException;
- import java.util.Enumeration;
- import java.util.Hashtable;
- import java.util.Vector;
-
- public class Mailer implements Runnable {
- protected String smtphost;
- protected String localhost;
- protected long messagesDelivered;
- // $FF: renamed from: t java.lang.Thread
- private Thread field_0;
- private Queue mailQueue;
- private boolean suspended;
- private final char SMTP_ERROR_CODE1 = '4';
- private final char SMTP_ERROR_CODE2 = '5';
- private final boolean debug = false;
-
- public Mailer(String var1) {
- this.smtphost = var1;
- this.messagesDelivered = 0L;
- this.mailQueue = new Queue();
- this.suspended = false;
- this.field_0 = new Thread(this);
- this.field_0.setDaemon(true);
- this.field_0.start();
-
- try {
- InetAddress var2 = InetAddress.getLocalHost();
- this.localhost = var2.getHostName();
- } catch (UnknownHostException var3) {
- this.log(var3);
- }
- }
-
- public long getMessagesDelivered() {
- return this.messagesDelivered;
- }
-
- public long getMessagesQueued() {
- return (long)this.mailQueue.size();
- }
-
- public synchronized void send(MailMessage var1) {
- this.mailQueue.enqueue(var1);
- this.notifyAll();
- }
-
- public void log(Exception var1) {
- ((Throwable)var1).printStackTrace();
- }
-
- public void run() {
- Socket var1 = null;
- PrintWriter var2 = null;
- BufferedReader var3 = null;
-
- while(true) {
- Vector var4 = new Vector(20);
-
- try {
- while(!this.mailQueue.empty()) {
- if (var1 == null) {
- var1 = new Socket(this.smtphost, 25);
- var2 = new PrintWriter(var1.getOutputStream());
- var3 = new BufferedReader(new InputStreamReader(var1.getInputStream()));
- this.readReply(var3, var4);
- this.sendCommand(var2, "HELO " + this.localhost, var4);
- this.readReply(var3, var4);
- }
-
- MailMessage var7 = (MailMessage)this.mailQueue.dequeue();
- this.sendCommand(var2, "MAIL FROM: " + var7.getFrom(), var4);
- this.readReply(var3, var4);
- String[] var8 = var7.getToList();
- String[] var9 = var7.getCCList();
- String[] var10 = var7.getBCCList();
- Hashtable var11 = new Hashtable();
- this.sendList(var8, var11, var4, var2, var3);
- this.sendList(var9, var11, var4, var2, var3);
- this.sendList(var10, var11, var4, var2, var3);
- this.sendCommand(var2, "DATA", var4);
- this.readReply(var3, var4);
- var2.print("To: ");
-
- for(int var12 = 0; var12 < var8.length; ++var12) {
- if (var12 != 0) {
- var2.print(", ");
- }
-
- var2.print(var8[var12]);
- }
-
- if (var9.length > 0) {
- var2.print("\r\nCC: ");
-
- for(int var13 = 0; var13 < var9.length; ++var13) {
- if (var13 != 0) {
- var2.print(", ");
- }
-
- var2.print(var9[var13]);
- }
- }
-
- if (var10.length > 0) {
- var2.print("\r\nBCC: ");
-
- for(int var34 = 0; var34 < var10.length; ++var34) {
- if (var34 != 0) {
- var2.print(", ");
- }
-
- var2.print(var10[var34]);
- }
- }
-
- var2.print("\r\nFrom: ");
- var2.print(var7.getFrom());
- var2.print("\r\nSubject: ");
- var2.print(var7.getSubject());
- Hashtable var35 = var7.getHeaders();
- Enumeration var14 = var35.keys();
-
- while(var14.hasMoreElements()) {
- String var15 = (String)var14.nextElement();
- String var16 = (String)var35.get(var15);
- var2.print("\r\n" + var15 + ": " + var16);
- }
-
- var2.print("\r\n\r\n");
- var2.println(var7.getBody());
- var2.println(".");
- var2.flush();
- this.readReply(var3, var4);
- ++this.messagesDelivered;
- }
- } catch (Exception var31) {
- this.log(var31);
- } finally {
- if (var1 != null) {
- try {
- var2.flush();
- var1.close();
- } catch (Exception var29) {
- System.err.println("Mailer: Unable to close socket to SMTP server");
- this.log(var29);
- }
-
- var1 = null;
- var2 = null;
- var3 = null;
- }
-
- }
-
- synchronized(this){}
-
- try {
- if (this.mailQueue.empty()) {
- try {
- this.wait();
- } catch (InterruptedException var30) {
- }
- }
- } catch (Throwable var33) {
- throw var33;
- }
- }
- }
-
- private void sendList(String[] var1, Hashtable var2, Vector var3, PrintWriter var4, BufferedReader var5) throws IOException {
- for(int var6 = 0; var6 < var1.length; ++var6) {
- if (var2.get(var1[var6]) == null) {
- this.sendCommand(var4, "RCPT TO: " + var1[var6], var3);
- this.readReply(var5, var3);
- var2.put(var1[var6], var1[var6]);
- }
- }
-
- }
-
- private void sendCommand(PrintWriter var1, String var2, Vector var3) throws IOException {
- var1.write(var2);
- var1.write("\r\n");
- var1.flush();
- }
-
- private void readReply(BufferedReader var1, Vector var2) throws IOException {
- String var3 = var1.readLine();
- char var4 = var3.charAt(0);
- if (var4 == '4' | var4 == '5') {
- throw new IOException("SMTP: " + var3);
- }
- }
- }
-