FileDocCategorySizeDatePackage
SMTPOutputStream.javaAPI DocJavaMail 1.4.33928Tue Nov 17 10:38:12 GMT 2009com.sun.mail.smtp

SMTPOutputStream

public class SMTPOutputStream extends CRLFOutputStream
In addition to converting lines into the canonical format, i.e., terminating lines with the CRLF sequence, escapes the "." by adding another "." to any "." that appears in the beginning of a line. See RFC821 section 4.5.2.
author
Max Spivak
see
CRLFOutputStream

Fields Summary
Constructors Summary
public SMTPOutputStream(OutputStream os)

	super(os);
    
Methods Summary
public voidensureAtBOL()
Ensure we're at the beginning of a line. Write CRLF if not.

	if (!atBOL)
	    super.writeln();
    
public voidflush()
Override flush method in FilterOutputStream. The MimeMessage writeTo method flushes its buffer at the end, but we don't want to flush data out to the socket until we've also written the terminating "\r\n.\r\n". We buffer nothing so there's nothing to flush. We depend on the fact that CRLFOutputStream also buffers nothing. SMTPTransport will manually flush the socket before reading the response.

	// do nothing
    
public voidwrite(int b)

	// if that last character was a newline, and the current
	// character is ".", we always write out an extra ".".
	if ((lastb == '\n" || lastb == '\r" || lastb == -1) && b == '.") {
	    out.write('.");
	}
	
	super.write(b);
    
public voidwrite(byte[] b, int off, int len)

	int lastc = (lastb == -1) ? '\n" : lastb;
	int start = off;
	
	len += off;
	for (int i = off; i < len; i++) {
	    if ((lastc == '\n" || lastc == '\r") && b[i] == '.") {
		super.write(b, start, i - start);
		out.write('.");
		start = i;
	    }
	    lastc = b[i];
	}
	if ((len - start) > 0)
	    super.write(b, start, len - start);