|
What this is
Other links
The source code
/*
** Tim Endres' net package.
** Copyright (c) 1997 by Tim Endres
**
** This program is free software.
**
** You may redistribute it and/or modify it under the terms of the GNU
** General Public License as published by the Free Software Foundation.
** Version 2 of the license should be included with this distribution in
** the file LICENSE, as well as License.html. If the license is not
** included with this distribution, you may find a copy at the FSF web
** site at 'www.gnu.org' or 'www.fsf.org', or you may write to the
** Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139 USA.
**
** THIS SOFTWARE IS PROVIDED AS-IS WITHOUT WARRANTY OF ANY KIND,
** NOT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY. THE AUTHOR
** OF THIS SOFTWARE, ASSUMES _NO_ RESPONSIBILITY FOR ANY
** CONSEQUENCE RESULTING FROM THE USE, MODIFICATION, OR
** REDISTRIBUTION OF THIS SOFTWARE.
**
*/
package com.ice.net;
import java.net.*;
import java.io.*;
import java.util.*;
import java.lang.*;
import java.text.*;
public class SimpleSMTP
{
private static final String RCS_ID = "$Id: SimpleSMTP.java,v 1.1.1.1 1997/11/03 18:03:12 time Exp $";
private static final String RCS_REV = "$Revision: 1.1.1.1 $";
public static final int SMTP_PORT = 25;
public static final String EOL = "\r\n";
protected Socket sock = null;
protected BufferedReader recv = null;
protected PrintWriter send = null;
/**
* Create an smtp object connected to the specified host
*
* @param hostid The host to connect to.
* @exception UnknownHostException
* @exception IOException
*/
public
SimpleSMTP( String hostname )
throws UnknownHostException, IOException
{
this( hostname, SimpleSMTP.SMTP_PORT );
}
public
SimpleSMTP( String hostid, int port )
throws UnknownHostException, IOException
{
this.sock = new Socket( hostid, port );
this.send =
new PrintWriter( sock.getOutputStream() );
this.recv = new BufferedReader(
new InputStreamReader( sock.getInputStream() ) );
String replyStr = this.readLine();
if ( ! replyStr.startsWith( "220" ) )
{
throw new ProtocolException( replyStr );
}
for ( ; replyStr.indexOf( '-' ) == 3 ; )
{
replyStr = this.readLine();
if ( ! replyStr.startsWith("220") )
{
throw new ProtocolException( replyStr );
}
}
}
public
SimpleSMTP( InetAddress address )
throws IOException
{
this( address, SimpleSMTP.SMTP_PORT );
}
public
SimpleSMTP( InetAddress address, int port )
throws IOException
{
this.sock = new Socket( address, port );
this.send =
new PrintWriter( sock.getOutputStream() );
this.recv = new BufferedReader(
new InputStreamReader( sock.getInputStream() ) );
String replyStr = this.readLine();
if ( ! replyStr.startsWith("220") )
{
throw new ProtocolException( replyStr );
}
for ( ; replyStr.indexOf('-') == 3 ; )
{
replyStr = this.readLine();
if ( ! replyStr.startsWith("220") )
{
throw new ProtocolException( replyStr );
}
}
}
private String
readLine()
{
String line = null;
try { line = this.recv.readLine(); }
catch ( IOException ex )
{
line = null;
System.err.println
( "ERROR reading smtp reply:\n " + ex.getMessage() );
}
return line;
}
private boolean
sendLine( String line )
{
boolean result = true;
this.send.print( line );
this.send.print( EOL );
// checkError() does a flush also...
if ( this.send.checkError() )
{
result = false;
// UNDONE - what do you want to do when there's an error.
// It can be a "format" error, but I think the only thing
// we'll ever see here is an io error.
}
return result;
}
public void
sendMailMsg(
String fromAddress, String toAddress,
String subject, String body )
throws IOException, ProtocolException
{
String response;
InetAddress localAddr;
try { localAddr = InetAddress.getLocalHost(); }
catch ( UnknownHostException ex )
{
System.err.println
("ERROR Can not determine local address.");
throw ex;
}
String host = localAddr.getHostName();
int index = fromAddress.indexOf( '@' );
if ( index < 0 || index == (fromAddress.length() - 1) )
{
fromAddress = fromAddress + "@" + host;
}
this.sendLine( "HELO " + host );
response = this.readLine();
if ( ! response.startsWith("250") )
{
throw new ProtocolException( response );
}
this.sendLine( "MAIL FROM: " + fromAddress );
response = this.readLine();
if ( ! response.startsWith("250") )
{
throw new ProtocolException( response );
}
this.sendLine( "RCPT TO: " + toAddress );
response = this.readLine();
if ( ! response.startsWith("250") )
{
throw new ProtocolException( response );
}
this.sendLine( "DATA" );
response = this.readLine();
if ( ! response.startsWith("354") )
{
throw new ProtocolException( response );
}
this.sendLine( "From: " + fromAddress );
this.sendLine( "To: " + toAddress );
this.sendLine( "Subject: " + subject );
// UNDONE - Handling of the timezone here and in the
// formatSMTPDate() method!
TimeZone tz = TimeZone.getTimeZone( "GMT" );
Date now = new Date();
this.sendLine( "Date: " + this.formatSMTPDate( now, tz ) );
this.sendLine( "X-Mailer: com.careersite.jobsearch.SimpleSMTP" );
// Send a blank line to terminate the header
this.sendLine( "" );
// Now send the message proper
this.sendLine( body );
this.sendLine( "." );
response = this.readLine();
if ( ! response.startsWith( "250" ) )
{
throw new ProtocolException( response );
}
}
public void
close()
{
try {
this.sendLine( "QUIT" );
sock.close();
}
catch (IOException ioe)
{
}
}
protected void
finalize()
throws Throwable
{
this.close();
super.finalize();
}
/* Tue, 16 Sep 1997 15:39:01 -0400 (EDT) */
public String
formatSMTPDate( Date date, TimeZone tz )
throws IllegalArgumentException
{
SimpleDateFormat dateFormat;
Locale loc = Locale.US;
dateFormat = new SimpleDateFormat( "EEE", loc );
dateFormat.setTimeZone( tz );
String day = dateFormat.format( date );
day = day.substring( 0, 3 );
dateFormat = new SimpleDateFormat( "MMM", loc );
dateFormat.setTimeZone( tz );
String month = dateFormat.format( date );
month = month.substring( 0, 3 );
dateFormat = new SimpleDateFormat( "dd", loc );
dateFormat.setTimeZone( tz );
String dayNum = dateFormat.format( date );
dateFormat = new SimpleDateFormat( "yyyy HH:mm:ss", loc );
dateFormat.setTimeZone( tz );
String rest = dateFormat.format( date );
String result = new String
( day + ", " + dayNum + " " + month + " " + rest + " +0000" );
return result;
}
}
|
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.