网络编程-Java Email

电子邮件

    电子邮件是一种用电子手段提供信息交换的通信方式,是互联网应用最广的服务。电子邮件可以是文字、图像、声音等多种形式。同时,用户可以得到大量免费的新闻、专题邮件,并轻松实现轻松的信息搜索。电子邮件的存在极大地方便了人与人之间的沟通与交流,促进了社会的发展。

  要想在网络上实现邮件功能,必须要有专门的邮件服务器。这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中。

  SMTP服务器地址:一般是smtp.xxx.com,比如126邮箱是smtp.126.com,qq邮箱是smtp.qq.com

邮件协议

传输协议

发送邮件:

我们通常把处理用户smtp请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器)。

SMTP协议

SMTP协议是基于TCP/IP的一个应用层协议,类似于HTTP,全称为 Simple Mail Transfer Protocol,译作简单邮件传输协议,它定义了邮件客户端软件与SMTP 服务器之间,以及 SMTP 服务器与 SMTP 服务器之间的通信规则。我们通过邮件客户端或程序发送邮件时就用到了该协议

接收协议

接收邮件:

我们通常把处理用户pop3请求(邮件接收请求)的服务器称之为POP3服务器(邮件接收服务器)。

POP3协议

POP3 协议全称为 Post Office Protocol ,译作邮局协议,它定义了邮件客户端与 POP3服务器之间的通信规则。我们通过邮件客户端查看邮件时就用到了该协议。

IMAP协议

IMAP(Internet Message Access Protocol)协议是对POP3协议的一种扩展,功能更强,作用类似。

接收协议POP3和IMAP有什么区别?

POP3协议允许电子邮件客户端下载服务器上的邮件,但是在客户端的操作(如移动邮件,标记已读等),不会反馈到服务器上,比如通过客户端收取到了邮件中的3封邮件并移动到其他文件夹,邮箱服务器上的这些邮件是没有同时被移动的。

IMAP协议提供webmail与电子邮件客户端之间的双向通信,客户端的操作都会反馈到服务器上,对邮件进行的操作,服务器上的邮件也会做相应的动作
 

Java-Email技术所需的Jar包

 邮件发送代码实现

在发送邮件之前,我们需要创建一个Session连接,下面是我们定义的一个工具类JavaMailUtills,当我们需要创建Session时,只需直接调用其中的createSession()方法即可,本次的发送邮件服务器我们用的是网易邮箱,所以我们用的服务器地址为smpt.126.com。另外我们还需使用properties文件将主机名,主机端口号,是否需要用户验证等相关信息存入。这样我们的Session连接就已经做好了。

public class JavaMailUtils {
	public static Session createSession() throws FileNotFoundException, IOException {
		//SMTP服务器地址
				String smtp = "smtp.126.com";
				
				//邮箱账号和密码(授权密码)
				String userName = "*********@126.com";
				String password = "*****************";
				
				//SMTP服务器的连接信息
				Properties props = new Properties();
				props.put("mail.smtp.host", smtp);//SMTP主机名
				props.put("mail.smtp.port", 25);//SMTP主机端口号
				props.put("mail.smtp.auth", "true");//是否需要用户验证
				props.put("mail.smtp.starttls.enable", "true");//启用TLS加密
				
				
				//创建Session
				//参数1:SMTP服务器的连接信息
				//参数2:用户认证对象(Authenticator接口的匿名实现类)
				Session session = Session.getInstance(props, new Authenticator() {
					@Override
					protected PasswordAuthentication getPasswordAuthentication() {
						return new PasswordAuthentication(userName, password);
					}
				});
				//开启调试模式
				session.setDebug(true);
				return session;
	}
}	

发送邮件

发送邮件的时候首先需要创建一个Message对象,使用setFrom()方法指定发件人,也就是填写自己的邮箱地址。SetRecipent()方法,指定收件人。setSubject()方法设置标题。setText()方法设置正文内容。最后我们使用Tranport下的send()方法发送即可。

/**
 * 发送邮件
 *
 */
public class Demo {
	public static void main(String[] args) throws FileNotFoundException, IOException {
		try {
			//1.创建Session对话
			Session session = JavaMailUtils.createSession();
			
			//创建邮件对象(Message抽象类的子类对象)
			MimeMessage msg = new MimeMessage(session);//传入session
			msg.setFrom(new InternetAddress("yuangogogoo@126.com"));
			msg.setRecipient(RecipientType.TO, new InternetAddress("1224496299@qq.com"));
			msg.setSubject("这是一份测试邮件!","utf-8");
			//邮件正文中包含有"html"标签(控制文本的格式)
			msg.setText("天气炎热,注意<b>保暖</b>哟",utf-8","html");
			
			
			//发送邮件
			Transport.send(msg);
			
		} catch (MessagingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

发送带有附件的邮件

        当我们需要发送带有附件的邮件时,这里的附件可以是图片、文档等等。我们只需再构造一个Multipart对象,若干个BodyPart对象,BodyPart对象中既可以存放文本,可以存放图片、文档等数据。随后我们将BodyPart添加到Multipart中,一个Multipart对象中可以有若干个BodyPart对象。最后将Multipart对象添加至Message对象中,最后发送即可。

public class Demo {
	public static void main(String[] args) throws FileNotFoundException, IOException {
		try {
			//1.创建Session对话
			Session session = JavaMailUtils.createSession();
			
			//创建邮件对象(Message抽象类的子类对象)
			MimeMessage msg = new MimeMessage(session);//传入session
			msg.setFrom(new InternetAddress("yuangogogoo@126.com"));
			msg.setRecipient(RecipientType.TO, new InternetAddress("1224496299@qq.com"));
			msg.setSubject("这是一份测试邮件!","utf-8");
			
            //邮件内容"复合"对象
			Multipart multipart = new MimeMultipart();
			
			//正文 
			BodyPart textPart =  new MimeBodyPart();
			//参数1:正文内容
			//参数2: 内容类型;字符编码集
			textPart.setContent("天气<b>变冷</b>,注意保暖!","text/html;charset=utf-8");
			
			//附件
			BodyPart imagePart = new MimeBodyPart();
			imagePart.setFileName("lucky.jpg");//设置附件文件的显示名称
			//数据处理对象(读取附件文件从本地磁盘进行读取)
			imagePart.setDataHandler(new DataHandler(
					new ByteArrayDataSource(Files.readAllBytes(Paths.get("E:\\IO流\\image\\tj.jpg")),
							"application/octet-stream")
					));
			
			//添加至邮件内容
			multipart.addBodyPart(textPart);
			multipart.addBodyPart(imagePart);
			
			//设置邮件内容
			msg.setContent(multipart);
			
			//发送邮件
			Transport.send(msg);
			
		} catch (MessagingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

发送内嵌图片的HTML文件

如果需要在HTML邮件中内嵌图片,可以通过在邮件中加入别名的方法,<img src = "" cid=附件别名>。附件别名通过setHeader("Content-ID",(别名))设置。

            //设置邮件内容
			BodyPart textBodyPart = new MimeBodyPart();
			StringBuilder body = new StringBuilder();
			body.append("<h1>蓝色妖姬</h1>");
			body.append("<img src= \"cid:lucky\"/>");//通过内容id引用附件图片
			textBodyPart.setContent(body.toString(),"text/html;charset=utf-8");
			
			//邮件附件部分
			BodyPart imageBodyPart = new MimeBodyPart();
			imageBodyPart.setFileName("blue.jpg");//附件名称
			imageBodyPart.setDataHandler(new DataHandler(
					new ByteArrayDataSource("E\\IO流\\image\\3.jpg", 
							"application/octet-stream")));
			imageBodyPart.addHeader("Content-ID", "<lucky>");//设置内容ID

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值