您的位置:首页 > 编程语言 > Java开发

javaEE之----------java代码发送邮件

2016-01-04 16:03 681 查看

E-Mail邮件简介:

利用java代码发邮件可以实现用户注册的严格性,用户不会随意的进行注册了,邮箱注册才可以注册成功,还有可以向用户推销自己的产品通过发邮件,当然也可以找回密码等

邮件服务器,按照提供的服务类型,可以分为发送邮件的服务器我接收邮件的服务器。

发送邮件的服务器使用发送协议,现在常用的是SMTP协议。

所以,通常发邮件的服务器也称为SMTP服务器。

接收邮件的服务器使用接收协议,现在常用的是POP3协议或IMAP协议,

所以通常也被称为POP3或IMAP服务器。

目前经常见到的服务器为SMTP和POP3服务器。如大家在注册了126的邮箱之后,

它的发邮件服务器为smtp.126.com:25,而收邮件服务器则为pop3.126.com:110.(冒号后面的为端口号)。

当然,发邮件服务器和收邮件服务器也可能是同一台主机,但端口号一定不相同。

默认发邮件服务器的端口为25,收邮件的端口为110.



SMTP协议-发邮件协议

全称为Simple Mail Transfer Protocol(简单邮件传输协议),它定义了邮件客户端软件与SMTP服务器之间

、以及两台SMTP服务器之间的通讯规则。端口一般为25.

POP3协议-收邮件协议

全称为Post Office Protocol(邮局协议),它定义了邮件客户端软件与POP3服务器的通讯规则

。端口一般为110.

IMAP协议-对POP3的扩展

全称为Internet Message Access Protocal(Internet消息访问协议),它是对POP3协议的一种扩展,

定义了邮件客户端软件与IMAP服务器的通讯规则。

手动发邮件:(必须打开smtp协议,必须要有相应的账户在服务器中)

手动发:

<span style="font-size:18px;">cmd 界面

telnet 必须手动启动 程序---》打开windows功能---》选中telnet
	还有一个服务打开。。。。。手动启动  应用,启动
SMTP 简单的邮件传输协议 发送的
p0p3 接受邮件的
	采用base64加密,账号和密码都是加密的。
	BASE64Encoder encoder = new BASE64Encoder();
	name =encoder.encode(name.getbytes());
	这就是加密后后的name 了

telent smtp.sina.com 25   采用谁的服务器
ehlo hncu  		打招呼
auth login    权威登录
name
pwd		用户名和密码base64jiaguomi de 
mail from:<hncujava@sina.com>   给服务器看的,必须正确
rcpt to:<hncujava@126.com>    发到哪里去
data 
from:<adjkhdjkshjd@sina.com>
to:<dsadsad@126.com>
subject:sadkjsakl    邮件的主题
【空行】
邮件正文

.   英文的句号结束
quit   退出	</span>


PS:在用户手动或者采用java 代码发送邮件的时候,用户名和密码都是经过加密的BASE64加密的

@Test
	public void base64Use() throws Exception{
		String name ="hncujava";
		String pwd ="1234567";
		BASE64Encoder encoder = new BASE64Encoder();
		name = encoder.encode(name.getBytes());
		pwd = encoder.encode(pwd.getBytes());
		System.out.println(name);
		System.out.println(pwd);
	}


现在采用java代码实现

一般格式

我们采用Java代码发邮件需要导入外面的两个javaMail包

用到的主要类:Properties(负责设置通道),Session(负责建立连接),

MimeMessage(负责邮件信息),Transport(发送邮件)

<span style="font-size:18px;">@Test
	public void  Test1(){
		
//第一步,首先是设置配置文件属性
		Properties p =new Properties();//首先要有一个属性对象
			//指定主机
		p.setProperty("mail.host", "smtp.sina.com");
			//采用smtp协议
//		p.setProperty("mail.transport.protocol", "smtp");//添加这个之后腾讯的里面垃圾箱
			//是否采用用户名和密码登录
		p.setProperty("mail.smtp.auth", "true");
		//相关协议配置完成之后,开始发送邮件
		
		//java发邮件的步骤
 //第一步:		session填写用户名和密码
		Session session =Session.getDefaultInstance(p, new Authenticator() {
			@Override
			protected PasswordAuthentication getPasswordAuthentication() {
				PasswordAuthentication pass=new PasswordAuthentication
						("hncujava", "1234567");
				//第一个账户名,第二个密码
				return pass;
			}
		});
		session.setDebug(true);//以调试的方式运行
		
  //第二步: 邮件正文  MimeMessage
		MimeMessage message = new MimeMessage(session);
		try {
			//邮件发件人
			message.setFrom(new InternetAddress("hncujava@sina.com"));
			//邮件接收人
			message.setRecipient(RecipientType.TO,new InternetAddress("985256523@qq.com"));
//			message.setRecipient(RecipientType.TO,new InternetAddress("2159305766@qq.com"));
				//邮件主题
			message.setSubject("hello");
			message.setContent("采用java发的邮件。。还不粗哦", "text/html;charset=utf-8");
			
//	发出邮件
			Transport.send(message);
		} catch (MessagingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	</span>


带附件

上面的不能实现带附件,我们采用另外的类 MimeBodyPart和MimeMultipart

<span style="font-size:18px;">public void test3() throws AddressException, Exception{
		
		for(int i=0;i<100;i++){
		Properties p =new Properties();
		p.setProperty("mail.host", "smtp.sina.com");
		p.setProperty("mail.smtp.auth", "true");
		
		//创建session进行登录
		Session sess=Session.getDefaultInstance(p, new Authenticator() {

			@Override
			protected PasswordAuthentication getPasswordAuthentication() {
				PasswordAuthentication ps = new PasswordAuthentication("hncujava", "1234567");
				return ps;
			}
		});
		sess.setDebug(true);
		//成功登录之后,开始写邮件了
			///设置发送方,就接收方,邮件主题,邮件内容
		MimeMessage message =new MimeMessage(sess);
		message.setFrom(new InternetAddress("hncujava@sina.com"));
		message.setRecipient(RecipientType.TO, new InternetAddress("1196457248@qq.com"));
		message.setSubject("我是乔爷,ko一切");
		
		MimeBodyPart body1=new MimeBodyPart();
		body1.setContent("<font size='40' color='green'>乔爷</font><font size='20' color='red'>ko</font>.......","text/html;charset=utf-8");
		
		//附件一
		MimeBodyPart body2= new MimeBodyPart();
		body2.setDataHandler(new DataHandler(new FileDataSource("./img/1.jpg")));
		body2.setFileName("1.jpg");
		
		MimeBodyPart body3 = new MimeBodyPart();
		body3.setDataHandler(new DataHandler(new FileDataSource("./img/2.jpg")));
//		body3.setFileName("图片2.jpg");//中文服务器自己取名
		body3.setFileName(MimeUtility.encodeText("傻逼乔2.jpg"));//中文需要编码。。。 需要编码,邮件显示的时候需要
		
		//上面都是简单的信息,没有汇总
		MimeMultipart mm =new MimeMultipart();
		mm.addBodyPart(body1);
		mm.addBodyPart(body2);
		mm.addBodyPart(body3);
		
		message.setContent(mm);
		Transport.send(message);
	}}</span>


另外:采用javaMail做了一个简单的邮件验证登录,主要的知识点是 当用户注册时候,我们数据库插入数据,里面的数据有两个列 ,一个是active(是否激活)全部设置为0,另一个是acode(给用户发邮件的时候传过去,当用户通过这个链接(带acode))访问我们写的另一个serlvet的时候,再次访问数据库,将active设置为1。

当用户登录的时候,我们需要采用去数据库验证最主要的是active必须为1,采用进行验证通过。

简单的注册和登录模块,带验证码。。能实现基本的注册和登录。有兴趣的可以去我的下载资源里下载去看看。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: