从TCP套接字开始——实现自己的JavaMail包(SMTP与POP3协议的手动实现)

我要讲啥?没什么好讲的,直接上代码!

Base64加密使用了Apache的开源包,使用时需导入commons-codec-1.11.jar包

另外,要说一下的就是国内的邮件服务器很多并没有用25端口和110端口接收和发送邮件,一般SMTP端口为465或587,而POP3端口为995,还有,现在的邮箱一般采用SSL加密,必须用SSL套接字建立连接,还有就是,第三方登陆邮箱用的是授权码而不是密码,其中SMTP是经过Base64编码后的授权码,POP3则直接是授权码......,借用代码记得删除package标记,另外还请保留署名,我可是有版权的!谢谢!好了,大概就这么多......

哦对了,先贴几个基础知识贴:

电子邮件收发原理和实现(POP3, SMTP) [整理]

邮件实现详解(一)------邮件发送的基本过程与概念

邮件实现详解(二)------手工体验smtp和pop3协议

邮件实现详解(三)------邮件的组织结构

用协议分析工具学习TCP/IP

图解SSL/TSL协议

package com.example;

import java.io.BufferedReader;
import java.io.OutputStream;
import java.net.Socket;

public class TransportModel {
	// 换行符
	protected final static String CRLF = "\r\n";
	// 用户名
	protected String Username = null;
	// 密码:授权码
	protected String Password = null;
	// iSocket套接字
	protected Socket iSocket = null;
	// 输入流
	protected BufferedReader bufferedReader = null;
	// 输出流
	protected OutputStream outputStream = null;
	// 是否已登陆
	protected boolean isConnected = false;

	public String getUsername() {
		return Username;
	}

	public void setUsername(String username) {
		Username = username;
	}

	public String getPassword() {
		return Password;
	}

	public void setPassword(String password) {
		Password = password;
	}
}

package com.example;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;

import javax.net.ssl.SSLSocketFactory;;

/**
 * 
 * @author KING-ERIC
 * 
 */
public class POP3Recv extends TransportModel {

	// 邮件服务器域名地址
	private String POP3Host = null;
	// 邮件服务器端口,正常是110,腾讯SSL加密是995
	private int POP3Port;

	// 私有构造函数
	private POP3Recv() {

	}

	// 静态内部类,在该内部类中创建单例对象,再将该单例对象通过getInstance()方法返回给外部使用
	private static class InternalClass {
		private final static POP3Recv POP3Recv = new POP3Recv();
	}

	// 公有静态成员方法,返回唯一实例
	public static synchronized POP3Recv getPOP3Recv() {
		return InternalClass.POP3Recv;
	}

	// 公有静态成员方法,返回唯一实例
	public static synchronized POP3Recv getPOP3Recv(String Host, int Port) {
		InternalClass.POP3Recv.POP3Host = Host;
		InternalClass.POP3Recv.POP3Port = Port;
		return InternalClass.POP3Recv;
	}

	public String getPOP3Host() {
		return POP3Host;
	}

	public void setPOP3Host(String pOP3Host) {
		POP3Host = pOP3Host;
	}

	public int getPOP3Port() {
		return POP3Port;
	}

	public void setPOP3Port(int pOP3Port) {
		POP3Port = pOP3Port;
	}

	public String getUsername() {
		return Username;
	}

	public void setUsername(String username) {
		Username = username;
	}

	public String getPassword() {
		return Password;
	}

	public void setPassword(String password) {
		Password = password;
	}

	public synchronized boolean Login() {
		if (POP3Host == null || POP3Port == 0 || Username == null || Password == null) {
			try {
				throw new Exception("数据未初始化...");
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				return isConnected;
			}
		}
		if (!isConnected) {
			try {
				if (POP3Port == 110)
					iSocket = new Socket(POP3Host, POP3Port);
				else
					iSocket = SSLSocketFactory.getDefault().createSocket(POP3Host, POP3Port);
				outputStream = iSocket.getOutputStream();
				bufferedReader = new BufferedReader(new InputStreamReader(iSocket.getInputStream()));

				GetResponse();

				System.out.println("<------- 登陆 ------->");
				Send("USER " + Username + CRLF);
				GetResponse();
				Send("PASS " + Password + CRL
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值