⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smtpsender.java

📁 SMTP邮件客户端的java源码实现
💻 JAVA
字号:
/*any question contact me:
 * Email:linlichao@163.com;
 * Homepage:http://www.ehawa.com。*/
import java.net.*;
import java.io.*;
import java.util.*;
import java.text.*;
import org.apache.commons.codec.net.BCodec;

// import org.apache.commons.codec.binary.Base64;
// import org.apache.commons.codec.*;
// import org.apache.commons.codec.language.*;

public class SMTPSender {

	Socket socket = null;

	PrintWriter outData = null;

	BufferedReader inData = null;

	String smtpServer = "";

	String user = "";

	String pass = "";

	String from = "";

	String LINEFEED = "\r\n";

	boolean isNeedAuthLogin = false;

	Vector to = new Vector();

	public static void main(String[] args) {
		SMTPSender smtp = new SMTPSender();
		smtp.setMailServer("mails.gucas.ac.cn");
		smtp.setMailFrom("Client", "laishenlu05", "7012203");
		smtp.addMailTo("mails.gucas.ac.cn");
		if (smtp.send("hello", "这是一个测试!")) {
			System.out.println("邮件发送成功!");
		} else
			System.out.println("邮件发送失败!");
	}

	public void setMailServer(String s) {
		smtpServer = s;
	}

	public void setMailFrom(String s, String uid, String pwd) {
		this.from = s;
		this.user = uid;
		this.pass = pwd;
		this.isNeedAuthLogin = (this.user != null && this.pass != null
				&& !this.user.equals("") && !this.pass.equals(""));
	}

	public boolean addMailTo(String mailAddr) {
		to.addElement(mailAddr);
		return true;
	}

	public boolean send(String subject, String content) {
		try {
			if (smtpServer == null || smtpServer.equals(""))
				return false;
			if (from == null || from.equals(""))
				return false;
			if (to.size() < 1)
				return false;
			// socket = new Socket(smtpServer, 25);
			socket = new Socket("210.77.16.3", 25);
			// String errstr = "";
			// socket = fsockopen("mails.gucas.ac.cn",25, -1, errstr,3000);
			outData = new PrintWriter(socket.getOutputStream());
			inData = new BufferedReader(new InputStreamReader(socket
					.getInputStream()));
			// 与邮件服务器连接成功
			readResponse("220");
			// HELO host
			sendRequest("HELO " + smtpServer + LINEFEED);
			readResponse("250");
			if (isNeedAuthLogin) {
				// AUTH LOGIN
				sendRequest("AUTH LOGIN" + LINEFEED);
				readResponse("334");
				// USERNAME:
				sendRequest(new String(new BCodec().encode(user))
						+ LINEFEED);
				readResponse("334");
				// PASSWORD:
				sendRequest(new String(new BCodec().encode(pass))
						+ LINEFEED);
				readResponse("235");
			}
			// MAIL FROM:<..>
			sendRequest("MAIL FROM:<" + from + ">" + LINEFEED);
			readResponse("250");
			// RCPT TO:<..>
			for (Enumeration enu = to.elements(); enu.hasMoreElements();) {
				String to1 = (String) enu.nextElement();
				sendRequest("RCPT To:<" + to1 + ">" + LINEFEED);
				readResponse("250");
			}
			// DATA
			sendRequest("DATA" + LINEFEED);
			readResponse("354");
			// 邮件内容
			StringBuffer s1 = new StringBuffer("From: <" + from + ">"
					+ LINEFEED);
			s1.append("To: <" + to + ">" + LINEFEED);
			s1.append("Subject: " + subject + LINEFEED);
			// Date date = new Date(Calendar.getInstance().toString());
			Date date = new Date();
			s1.append("Date: " + DateFormat.getInstance().format(date)
					+ LINEFEED);
			s1.append("Content-Type: text/plain;charset=\"GB2312\"" + LINEFEED);
			s1.append(LINEFEED);
			s1.append(content);
			s1.append(LINEFEED + "." + LINEFEED);// 发送
			sendRequest(s1.toString());
			readResponse("250");
			// QUIT退出
			sendRequest("QUIT" + LINEFEED);
			readResponse("221");
			try {
				inData.close();
				inData = null;
			} catch (Exception ex) {
			}
			try {
				outData.close();
				outData = null;
			} catch (Exception ex) {
			}
			try {
				socket.close();
				socket = null;
			} catch (Exception ex) {
			}
		} catch (Exception e) {
			return false;
			// e.printStackTrace();
		}
		return true;
	}

	private void readResponse(String cmd) throws Exception {
		String tmp = inData.readLine();
		if (tmp.startsWith(cmd))
			;// System.out.println(" [S:]"+tmp);
		else
			throw new Exception("##########邮件发送失败!##########" + tmp);
		while (tmp.startsWith(cmd + "-"))
			tmp = inData.readLine();
	}

	private void sendRequest(String msg) {
		// System.out.print("***[C:]"+msg);
		outData.write(msg);
		outData.flush();
	}

	public void close() {
		try {
			inData.close();
			inData = null;
		} catch (Exception ex) {
		}
		try {
			outData.close();
			outData = null;
		} catch (Exception ex) {
		}
		try {
			socket.close();
			socket = null;
		} catch (Exception ex) {
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -