java socket 实现邮件发送


java 已经有jar包封装好了对于邮件的处理,从底层socket进行通信,会对整个流程更加熟悉。

第一步:连接邮箱服务器地址;

第二步:和服务器打招呼;

第三步:验证登陆;

第四步:输入用户名;

第五步:输入密码;

第六步:输入邮件发送的邮箱;

第七步:输入收件人邮箱;

第八步:输入“data”;

第九步:编写邮件内容;

第十步:输入“.\r\n”;


这里只描述了关于发送邮件的一些步骤,对于邮箱的邮件的列表的获取、邮件的接受等等功能就不一一赘述了。

java 刚刚起步,正好要做一个作业,顺便写一下,和大家一起交流一下。


代码:

package  mail.entity

class: mail

public class mail {

	private String data = "";
	
	private String from = "";
	
	private String subject = "";
	
	private String content = "";

	public mail(String data, String from, String subject) {
		super();
		this.data = data;
		this.from = from;
		this.subject = subject;
		myInit();
	}

	private void myInit() {
		content = "from: <" + this.from + ">\r\n";
		content += "subject: " + this.subject + "\r\n\r\n";
		content += this.data + "\r\n";
		content += ".\r\n";
	}
	
	public String getContent() {
		return content;
	}
	
	public String getData() {
		return data;
	}

	public String getFrom() {
		return from;
	}

	public String getSubject() {
		return subject;
	}
	
	
	
}

class: user

public class user {


private String sendTo = "";

private String userName = "";

private String userPassword = "";

public user (String sendTo, String userName, String userPassword) {
super();
this.sendTo = sendTo;
this.userName = userName;
this.userPassword = utility.transformToBASE64(userPassword);
}


public String getSendTo() {
return sendTo;
}


public String getUserName() {
return userName;
}


public String getUserPassword() {
return userPassword;
}
}


package  mail.utility


class: utility


public class utility {


	public static final String hello = "helo 163";
	
	public static final String login = "auth login";
	
	public static final String server = "smtp.163.com";
	
	public static final int port = 25;
	
	/**
	 * transform a string to BASE64
	 * @param str
	 * @return
	 */
	public static String transformToBASE64(String str) {
		String result = "";
		BASE64Encoder encoder = new BASE64Encoder();
		result = encoder.encode(str.getBytes());
		return result;
	}
	
}

package  mail.send


class : sendMial


public class sendMail {


private user u;

private mail m;

private PrintWriter output = null;

private Socket socket = null;


public sendMail(user u, mail m) {
super();
this.u = u;
this.m = m;
try {
myInit();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

private void myInit() throws Exception {
socket = new Socket(utility.server, utility.port);
output = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
}

public boolean send() {
boolean yes = false;
try {
// hello 163
send(utility.hello);
// 验证登陆
send(utility.login);
// 用户名
send(utility.transformToBASE64(u.getUserName()));
// 密码
send(u.getUserPassword());
// 发件人
send("mail from: <" + u.getUserName() + "@163.com>");
// 收件人
send("rcpt to: <" + u.getSendTo() + ">");
// 内容
send("data");

send(m.getContent());
// 释放资源
socket.close();
output.close();
yes = true;
System.out.println("Done!");
} catch (Exception e) {
// TODO Auto-generated catch block
return false;
}
return yes;
}

private void send(String str) {
output.println(str);
output.flush();
}


}



差不多了,就写这几个类吧,对于类的抽取,包的划分,类中成员变量的设置等等问题我还不是很明白,总感觉自己写的程序结构不是很好,如果大家有什么好的建议,欢迎交流。




------一个小程序员wym



  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值