Java Programming Home Page: Archive: Message #101

Date: Oct 25 2000 20:31:01 EDT
From: "Java Programming" <javaProgramming-owner@listbot.com>
Subject: email, in sw409

Here is how you send e-mail in java:
From: "Dr. Douglas Lyon" <lyon@snet.net> 

Subject: How do I send e-mail in Java? 

Date: Thu, 12 Nov 1998 09:27:58 -0400 







package net; 



import java.applet.*; 

import java.awt.*; 

import java.net.*; 

import java.io.*; 

import java.util.Date; 

import gui.ClosableFrame; 







public class SendMail extends Applet 

{

// The e-mail address all messages are to be sent to; specified in HTML 

String webmasterEmail = null; 



String serverHostName = null; 

boolean standalone = false; 

int smtpPort = 25; 

Socket socket; 

PrintStream ps; 

DataInputStream dis; 

InetAddress rina; 

InetAddress lina; 



Form form; 



/** 

* Initialize the applet. 

*/ 



public void init() 

{ 

setBackground(Color.white); 

form = new Form(this); 

add(form); 

resize(600, 450); 

if (serverHostName == null) serverHostName = 

getCodeBase().getHost();

if (webmasterEmail == null) webmasterEmail = 

getParameter("RECIPIENT");

} 



/** 

* Show status to the user. 

*/ 



public void showStatus(String s) 

{ 

System.out.println(s); 

if (standalone) return; 

super.showStatus(s); 

} 



/** 

* Send an e-mail message. 

*/ 



public void send() 

throws IOException, Exception 

{ 

// Open connection to SMTP server 

socket = new Socket(serverHostName, smtpPort); 



// Send the form contents as a message 

try 

{ 

rina = socket.getInetAddress(); 

lina = rina.getLocalHost(); 

ps = new PrintStream(socket.getOutputStream()); 

dis = new DataInputStream(socket.getInputStream()); 



// Send message 

sendline("HELO " + lina.toString()); 

sendline("MAIL FROM:" + form.email()); 

sendline("RCPT TO:" + webmasterEmail); 

sendline("DATA"); 

sendline(form.message()); 

sendline("."); 

} 

catch (Exception ex) 

{ 

socket.close(); 

throw ex; 

} 



// Close connection 

socket.close(); 

} 



/** 

* Send a line of data to the server, and retrieve the handshake 

*/ 



void sendline(String data) 

throws IOException 

{ 

System.out.println("sendline out:" + data); 

ps.println(data); 

ps.flush(); 

String s = dis.readLine(); 

System.out.println("sendline in:" + s); 

} 



/** 

* Main routine, for standalone program execution 

*/ 



public static void main(String args[]) 

{ 

SendMail ap = new SendMail(); 

// The server host will be the place running POP 

// webmaster e-mail will be recipient 

ap.serverHostName = "yourmailserver"; 

ap.webmasterEmail = "your email address"; 

ap.standalone = true; 



ClosableFrame fr = new ClosableFrame("SendMail"); 

ap.init(); 

fr.add("Center", ap); 

fr.resize(600, 450); 



fr.show(); 

ap.start(); 

} 



}



/**

* A form for obtaining user input. Customize this for your application,
just 

* as you would customize an HTML form for a Web-based e-mail application. 

*/ 



class Form extends Panel 

{

SendMail applet; 



// The form's elements... 

Label nameLabel; 

TextField nameField; 

Label emailLabel; 

TextField emailField; 

Label orgLabel; 

TextField orgField; 

Label msgBodyLabel; 

TextArea msgBodyArea; 

Button sendButton; 



/** 

* The constructor 

*/ 



public Form(SendMail ap) 

{ 

applet = ap; 

setBackground(Color.white); 

setLayout(new GridLayout(2, 1)); 



// Create a panel to put the text fields and button on 

Panel p = new Panel(); 

p.setLayout(new GridLayout(8, 1)); 



// Instantiate all the elements, and add them to their 

containers...

p.add(sendButton = new Button("Send")); 

p.add(nameLabel = new Label("Your Name:")); 

p.add(nameField = new TextField(60)); 

p.add(emailLabel = new Label("Your e-mail address:")); 

p.add(emailField = new TextField(60)); 

p.add(orgLabel = new Label("Your orgainization:")); 

p.add(orgField = new TextField(60)); 

p.add(msgBodyLabel = new Label("Your Message:")); 

add(p); 

add(msgBodyArea = new TextArea(3, 60)); 



// Set the size of the form 

resize(550, 400); 

} 



/** 

* Return the value in the e-mail address field in the form 

*/ 



public String email() 

{ 

return emailField.getText(); 

} 



/** 

* Return the contents of the body of the form, including any 

"hidden" fields. 

*/ 



public String message() 

{ 

String m = ""; 



m += nameLabel.getText(); 

m += nameField.getText(); 

m += "\n"; 



m += orgLabel.getText(); 

m += orgField.getText(); 

m += "\n"; 



m += "Web Origin:"; 

if (!applet.standalone) m += applet.getDocumentBase(); 

m += "\n"; 



m += "Date Sent:"; 

m += (new Date()).toString(); 

m += "\n"; 



m += msgBodyLabel.getText(); 

m += msgBodyArea.getText(); 

m += "\n"; 



return m; 

} 



/** 

* Respond to the button click event: send the message. 

*/ 



public boolean handleEvent(Event e) 

{ 

if ((e.target == sendButton) && (e.id == Event.ACTION_EVENT)) 

{ 

// User clicked the Send button; send the message 

try {applet.send();} 

catch (Exception ex) 

{ 

applet.showStatus("Error; message send 

failed:\n " + ex.toString()); 

return true; 

} 

applet.showStatus("Message sent"); 



return true; 

} 



// Not an event to handle; let the super class try 

return super.handleEvent(e); 

} 

}