diff options
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/mail')
3 files changed, 0 insertions, 675 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/mail/ErrorInQuitException.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/mail/ErrorInQuitException.java deleted file mode 100644 index 6f78a142..00000000 --- a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/mail/ErrorInQuitException.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package org.apache.tools.mail; - -import java.io.IOException; - -/** - * Specialized IOException that get thrown if SMTP's QUIT command fails. - * - * <p>This seems to happen with some version of MS Exchange that - * doesn't respond with a 221 code immediately. See <a - * href="http://nagoya.apache.org/bugzilla/show_bug.cgi?id=5273">Bug - * report 5273</a>.</p> - * - */ -public class ErrorInQuitException extends IOException { - - /** - * Initialise from an IOException - * - * @param e the IO Exception. - */ - public ErrorInQuitException(IOException e) { - super(e.getMessage()); - } - -} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/mail/MailMessage.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/mail/MailMessage.java deleted file mode 100644 index b4173a96..00000000 --- a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/mail/MailMessage.java +++ /dev/null @@ -1,526 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -/* - * The original version of this class was donated by Jason Hunter, - * who wrote the class as part of the com.oreilly.servlet - * package for his book "Java Servlet Programming" (O'Reilly). - * See http://www.servlets.com. - * - */ - -package org.apache.tools.mail; - -import java.io.BufferedOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.io.PrintStream; -import java.net.InetAddress; -import java.net.Socket; -import java.util.Enumeration; -import java.util.Vector; - -/** - * A class to help send SMTP email. - * This class is an improvement on the sun.net.smtp.SmtpClient class - * found in the JDK. This version has extra functionality, and can be used - * with JVMs that did not extend from the JDK. It's not as robust as - * the JavaMail Standard Extension classes, but it's easier to use and - * easier to install, and has an Open Source license. - * <p> - * It can be used like this: - * <blockquote><pre> - * String mailhost = "localhost"; // or another mail host - * String from = "Mail Message Servlet <MailMessage@server.com>"; - * String to = "to@you.com"; - * String cc1 = "cc1@you.com"; - * String cc2 = "cc2@you.com"; - * String bcc = "bcc@you.com"; - * - * MailMessage msg = new MailMessage(mailhost); - * msg.setPort(25); - * msg.from(from); - * msg.to(to); - * msg.cc(cc1); - * msg.cc(cc2); - * msg.bcc(bcc); - * msg.setSubject("Test subject"); - * PrintStream out = msg.getPrintStream(); - * - * Enumeration enum = req.getParameterNames(); - * while (enum.hasMoreElements()) { - * String name = (String)enum.nextElement(); - * String value = req.getParameter(name); - * out.println(name + " = " + value); - * } - * - * msg.sendAndClose(); - * </pre></blockquote> - * <p> - * Be sure to set the from address, then set the recipient - * addresses, then set the subject and other headers, then get the - * PrintStream, then write the message, and finally send and close. - * The class does minimal error checking internally; it counts on the mail - * host to complain if there's any malformatted input or out of order - * execution. - * <p> - * An attachment mechanism based on RFC 1521 could be implemented on top of - * this class. In the meanwhile, JavaMail is the best solution for sending - * email with attachments. - * <p> - * Still to do: - * <ul> - * <li>Figure out how to close the connection in case of error - * </ul> - * - * @version 1.1, 2000/03/19, added angle brackets to address, helps some servers - * version 1.0, 1999/12/29 - */ -public class MailMessage { - - /** default mailhost */ - public static final String DEFAULT_HOST = "localhost"; - - /** default port for SMTP: 25 */ - public static final int DEFAULT_PORT = 25; - - /** host name for the mail server */ - private String host; - - /** host port for the mail server */ - private int port = DEFAULT_PORT; - - /** sender email address */ - private String from; - - /** list of email addresses to reply to */ - private Vector replyto; - - /** list of email addresses to send to */ - private Vector to; - - /** list of email addresses to cc to */ - private Vector cc; - - /** headers to send in the mail */ - private Vector headersKeys; - private Vector headersValues; - - private MailPrintStream out; - - private SmtpResponseReader in; - - private Socket socket; - private static final int OK_READY = 220; - private static final int OK_HELO = 250; - private static final int OK_FROM = 250; - private static final int OK_RCPT_1 = 250; - private static final int OK_RCPT_2 = 251; - private static final int OK_DATA = 354; - private static final int OK_DOT = 250; - private static final int OK_QUIT = 221; - - /** - * Constructs a new MailMessage to send an email. - * Use localhost as the mail server with port 25. - * - * @exception IOException if there's any problem contacting the mail server - */ - public MailMessage() throws IOException { - this(DEFAULT_HOST, DEFAULT_PORT); - } - - /** - * Constructs a new MailMessage to send an email. - * Use the given host as the mail server with port 25. - * - * @param host the mail server to use - * @exception IOException if there's any problem contacting the mail server - */ - public MailMessage(String host) throws IOException { - this(host, DEFAULT_PORT); - } - - /** - * Constructs a new MailMessage to send an email. - * Use the given host and port as the mail server. - * - * @param host the mail server to use - * @param port the port to connect to - * @exception IOException if there's any problem contacting the mail server - */ - public MailMessage(String host, int port) throws IOException { - this.port = port; - this.host = host; - replyto = new Vector(); - to = new Vector(); - cc = new Vector(); - headersKeys = new Vector(); - headersValues = new Vector(); - connect(); - sendHelo(); - } - - /** - * Set the port to connect to the SMTP host. - * @param port the port to use for connection. - * @see #DEFAULT_PORT - */ - public void setPort(int port) { - this.port = port; - } - - /** - * Sets the from address. Also sets the "From" header. This method should - * be called only once. - * @param from the from address - * @exception IOException if there's any problem reported by the mail server - */ - public void from(String from) throws IOException { - sendFrom(from); - this.from = from; - } - - /** - * Sets the replyto address - * This method may be - * called multiple times. - * @param rto the replyto address - * - */ - public void replyto(String rto) { - this.replyto.addElement(rto); - } - - /** - * Sets the to address. Also sets the "To" header. This method may be - * called multiple times. - * - * @param to the to address - * @exception IOException if there's any problem reported by the mail server - */ - public void to(String to) throws IOException { - sendRcpt(to); - this.to.addElement(to); - } - - /** - * Sets the cc address. Also sets the "Cc" header. This method may be - * called multiple times. - * - * @param cc the cc address - * @exception IOException if there's any problem reported by the mail server - */ - public void cc(String cc) throws IOException { - sendRcpt(cc); - this.cc.addElement(cc); - } - - /** - * Sets the bcc address. Does NOT set any header since it's a *blind* copy. - * This method may be called multiple times. - * - * @param bcc the bcc address - * @exception IOException if there's any problem reported by the mail server - */ - public void bcc(String bcc) throws IOException { - sendRcpt(bcc); - // No need to keep track of Bcc'd addresses - } - - /** - * Sets the subject of the mail message. Actually sets the "Subject" - * header. - * @param subj the subject of the mail message - */ - public void setSubject(String subj) { - setHeader("Subject", subj); - } - - /** - * Sets the named header to the given value. RFC 822 provides the rules for - * what text may constitute a header name and value. - * @param name name of the header - * @param value contents of the header - */ - public void setHeader(String name, String value) { - // Blindly trust the user doesn't set any invalid headers - headersKeys.add(name); - headersValues.add(value); - } - - /** - * Returns a PrintStream that can be used to write the body of the message. - * A stream is used since email bodies are byte-oriented. A writer can - * be wrapped on top if necessary for internationalization. - * This is actually done in Message.java - * - * @return a printstream containing the data and the headers of the email - * @exception IOException if there's any problem reported by the mail server - * @see org.apache.tools.ant.taskdefs.email.Message - */ - public PrintStream getPrintStream() throws IOException { - setFromHeader(); - setReplyToHeader(); - setToHeader(); - setCcHeader(); - setHeader("X-Mailer", "org.apache.tools.mail.MailMessage (ant.apache.org)"); - sendData(); - flushHeaders(); - return out; - } - - - // RFC 822 s4.1: "From:" header must be sent - // We rely on error checking by the MTA - void setFromHeader() { - setHeader("From", from); - } - - // RFC 822 s4.1: "Reply-To:" header is optional - void setReplyToHeader() { - if (!replyto.isEmpty()) { - setHeader("Reply-To", vectorToList(replyto)); - } - } - - void setToHeader() { - if (!to.isEmpty()) { - setHeader("To", vectorToList(to)); - } - } - - void setCcHeader() { - if (!cc.isEmpty()) { - setHeader("Cc", vectorToList(cc)); - } - } - - String vectorToList(Vector v) { - StringBuffer buf = new StringBuffer(); - Enumeration e = v.elements(); - while (e.hasMoreElements()) { - buf.append(e.nextElement()); - if (e.hasMoreElements()) { - buf.append(", "); - } - } - return buf.toString(); - } - - void flushHeaders() throws IOException { - // RFC 822 s4.1: - // "Header fields are NOT required to occur in any particular order, - // except that the message body MUST occur AFTER the headers" - // (the same section specifies a recommended order, which we ignore) - final int size = headersKeys.size(); - for (int i = 0; i < size; i++) { - String name = (String) headersKeys.elementAt(i); - String value = (String) headersValues.elementAt(i); - out.println(name + ": " + value); - } - out.println(); - out.flush(); - } - - /** - * Sends the message and closes the connection to the server. - * The MailMessage object cannot be reused. - * - * @exception IOException if there's any problem reported by the mail server - */ - public void sendAndClose() throws IOException { - try { - sendDot(); - sendQuit(); - } finally { - disconnect(); - } - } - - // Make a limited attempt to extract a sanitized email address - // Prefer text in <brackets>, ignore anything in (parentheses) - static String sanitizeAddress(String s) { - int paramDepth = 0; - int start = 0; - int end = 0; - int len = s.length(); - - for (int i = 0; i < len; i++) { - char c = s.charAt(i); - if (c == '(') { - paramDepth++; - if (start == 0) { - end = i; // support "address (name)" - } - } else if (c == ')') { - paramDepth--; - if (end == 0) { - start = i + 1; // support "(name) address" - } - } else if (paramDepth == 0 && c == '<') { - start = i + 1; - } else if (paramDepth == 0 && c == '>') { - end = i; - } - } - - if (end == 0) { - end = len; - } - - return s.substring(start, end); - } - - // * * * * * Raw protocol methods below here * * * * * - - void connect() throws IOException { - socket = new Socket(host, port); - out = new MailPrintStream( - new BufferedOutputStream( - socket.getOutputStream())); - in = new SmtpResponseReader(socket.getInputStream()); - getReady(); - } - - void getReady() throws IOException { - String response = in.getResponse(); - int[] ok = {OK_READY}; - if (!isResponseOK(response, ok)) { - throw new IOException( - "Didn't get introduction from server: " + response); - } - } - void sendHelo() throws IOException { - String local = InetAddress.getLocalHost().getHostName(); - int[] ok = {OK_HELO}; - send("HELO " + local, ok); - } - void sendFrom(String from) throws IOException { - int[] ok = {OK_FROM}; - send("MAIL FROM: " + "<" + sanitizeAddress(from) + ">", ok); - } - void sendRcpt(String rcpt) throws IOException { - int[] ok = {OK_RCPT_1, OK_RCPT_2}; - send("RCPT TO: " + "<" + sanitizeAddress(rcpt) + ">", ok); - } - - void sendData() throws IOException { - int[] ok = {OK_DATA}; - send("DATA", ok); - } - - void sendDot() throws IOException { - int[] ok = {OK_DOT}; - send("\r\n.", ok); // make sure dot is on new line - } - - void sendQuit() throws IOException { - int[] ok = {OK_QUIT}; - try { - send("QUIT", ok); - } catch (IOException e) { - throw new ErrorInQuitException(e); - } - } - - void send(String msg, int[] ok) throws IOException { - out.rawPrint(msg + "\r\n"); // raw supports <CRLF>.<CRLF> - String response = in.getResponse(); - if (!isResponseOK(response, ok)) { - throw new IOException("Unexpected reply to command: " - + msg + ": " + response); - } - } - - boolean isResponseOK(String response, int[] ok) { - // Check that the response is one of the valid codes - for (int i = 0; i < ok.length; i++) { - if (response.startsWith("" + ok[i])) { - return true; - } - } - return false; - } - - void disconnect() throws IOException { - if (out != null) { - out.close(); - } - if (in != null) { - try { - in.close(); - } catch (IOException e) { - // ignore - } - } - if (socket != null) { - try { - socket.close(); - } catch (IOException e) { - // ignore - } - } - } -} - -/** - * This PrintStream subclass makes sure that <CRLF>. becomes <CRLF>.. - * per RFC 821. It also ensures that new lines are always \r\n. -*/ -class MailPrintStream extends PrintStream { - - private int lastChar; - - public MailPrintStream(OutputStream out) { - super(out, true); // deprecated, but email is byte-oriented - } - - // Mac does \n\r, but that's tough to distinguish from Windows \r\n\r\n. - // Don't tackle that problem right now. - public void write(int b) { - if (b == '\n' && lastChar != '\r') { - rawWrite('\r'); // ensure always \r\n - rawWrite(b); - } else if (b == '.' && lastChar == '\n') { - rawWrite('.'); // add extra dot - rawWrite(b); - } else { - rawWrite(b); - } - lastChar = b; - } - - public void write(byte[] buf, int off, int len) { - for (int i = 0; i < len; i++) { - write(buf[off + i]); - } - } - - void rawWrite(int b) { - super.write(b); - } - - void rawPrint(String s) { - int len = s.length(); - for (int i = 0; i < len; i++) { - rawWrite(s.charAt(i)); - } - } -} - diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/mail/SmtpResponseReader.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/mail/SmtpResponseReader.java deleted file mode 100644 index c1693f49..00000000 --- a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/mail/SmtpResponseReader.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package org.apache.tools.mail; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; - -/** - * A wrapper around the raw input from the SMTP server that assembles - * multi line responses into a single String. - * - * <p>The same rules used here would apply to FTP and other Telnet - * based protocols as well.</p> - * - */ -public class SmtpResponseReader { - // CheckStyle:VisibilityModifier OFF - bc - protected BufferedReader reader = null; - // CheckStyle:VisibilityModifier ON - private StringBuffer result = new StringBuffer(); - - /** - * Wrap this input stream. - * @param in the stream to wrap. - */ - public SmtpResponseReader(InputStream in) { - reader = new BufferedReader(new InputStreamReader(in)); - } - - /** - * Read until the server indicates that the response is complete. - * - * @return Responsecode (3 digits) + Blank + Text from all - * response line concatenated (with blanks replacing the \r\n - * sequences). - * @throws IOException on error. - */ - public String getResponse() throws IOException { - result.setLength(0); - String line = reader.readLine(); - // CheckStyle:MagicNumber OFF - if (line != null && line.length() >= 3) { - result.append(line.substring(0, 3)); - result.append(" "); - } - // CheckStyle:MagicNumber ON - - while (line != null) { - append(line); - if (!hasMoreLines(line)) { - break; - } - line = reader.readLine(); - } - return result.toString().trim(); - } - - /** - * Closes the underlying stream. - * @throws IOException on error. - */ - public void close() throws IOException { - reader.close(); - } - - /** - * Should we expect more input? - * @param line the line to check. - * @return true if there are more lines to check. - */ - protected boolean hasMoreLines(String line) { - // CheckStyle:MagicNumber OFF - return line.length() > 3 && line.charAt(3) == '-'; - // CheckStyle:MagicNumber ON - } - - /** - * Append the text from this line of the resonse. - */ - private void append(String line) { - // CheckStyle:MagicNumber OFF - if (line.length() > 4) { - result.append(line.substring(4)); - result.append(" "); - } - // CheckStyle:MagicNumber ON - } -} |