Java发邮件(详解+源代码)

Java发送邮件

一、邮件概述

(1)收发邮件

发邮件大家都会吧!发邮件是从客户端把邮件发送到邮件服务器,收邮件是把邮件服务器的邮件下载到客户端。
在这里插入图片描述
我们在163、126、QQ等网站注册的Email账户,其实就是在邮件服务器中注册的。这些网站都有自己的邮件服务器。

(2)邮件协议

与HTTP协议相同,收发邮件也是需要有传输协议的。

  • SMTP:(Simple Mail Transfer Protocol,简单邮件传输协议)发邮件协议;
  • POP3:(Post Office Protocol Version 3,邮局协议第3版)收邮件协议;
(3)理解邮件收发过程

其实你可以把邮件服务器理解为邮局!如果你需要给朋友寄一封信,那么你需要把信放到邮筒中,这样你的信会“自动”到达邮局,邮局会把信邮到另一个省市的邮局中。然后这封信会被送到收信人的邮箱中。最终收信人需要自己经常查看邮箱是否有新的信件。
其实每个邮件服务器都由SMTP服务器和POP3服务器构成,其中SMTP服务器负责发邮件的请求,而POP3负责收邮件的请求。
例如163向162发送邮件:
在这里插入图片描述

(4)邮件服务器名称

smtp服务器的端口号为25,服务器名称为smtp.xxx.xxx。
pop3服务器的端口号为110,服务器名称为pop3.xxx.xxx。
例如:

  • 163:smtp.163.com和pop3.163.com
  • 126:smtp.126.com和pop3.126.com
  • qq:smtp.qq.com和pop3.qq.com
  • sina:smtp.sina.com和pop3.sina.com

JavaMail

  1. Java Mail是由SUN公司提供的专门针对邮件的API,导包:mail.jar、activation.jar
  2. JavaMail中主要类:javax.mail.Session、javax.mail.internet.MimeMessage、javax.mail.Transport
    (1)Session:表示会话,即客户端与邮件服务器之间的会话!想获得会话需要给出账户和密码,当然还要给出服务器名称。在邮件服务中的Session对象,就相当于连接数据库时的Connection对象。
    (2)MimeMessage:表示邮件类,它是Message的子类。它包含邮件的主题(标题)、内容,收件人地址、发件人地址,还可以设置抄送和暗送,甚至还可以设置附件。
    (3)Transport:用来发送邮件。

JavaMail实现发邮件

第一步:获得Session

Properties prop = new Properties();
prop.setProperty(“mail.host”, “smtp.163.com”);//设置服务器主机名
prop.setProperty(“mail.smtp.auth”,true);//设置需要认证

//Authenticator是一个接口表示认证器,即校验客户端的身份。我们需要自己来实现这个接口,实现这个接口需要使用账户和密码。
Authenticator auth = new Authenticator() {
    public PasswordAuthentication getPasswordAuthentication () {
        new PasswordAuthentication(“xxx”, “xxxx”);//用户名和密码
	}
};

//最后得到session
Session session = Session.getInstance(prop, auth);

第二步:创建MimeMessage对象
创建MimeMessage需要使用Session对象来创建

MimeMessage msg = new MimeMessage(session);
//然后需要设置发信人地址、收信人地址、主题,以及邮件正文。
msg.setFrom(new InternetAddress(“xxxxx@163.com”));//设置发信人
msg.addRecipients(RecipientType.TO, “xxxx@qq.com”);//设置收信人
msg.setSubject(“这是一封测试邮件”);//设置主题(标题)
msg.setContent(“测试邮件啊啊啊啊!, “text/plain;charset=utf-8);//设置正文

第三步:发送邮件

Transport.send(msg);//发送邮件
源代码

比如我的163邮箱向qq邮箱发送邮件

/*
原创:C位出道丶
*/
@Test
public void fun(){
	Properties prop = new Properties();
	prop.setProperty("mail.host", "smtp.163.com");//设置服务器主机名
	prop.setProperty("mail.smtp.auth", "true");//设置需要认证

	//Authenticator是一个接口表示认证器,即校验客户端的身份。我们需要自己来实现这个接口,实现这个接口需要使用账户和密码。
	Authenticator auth = new Authenticator() {
	    public PasswordAuthentication getPasswordAuthentication () {
	        return new PasswordAuthentication("用户名","授权码");
		}
	};

	//最后得到session
	Session session = Session.getInstance(prop, auth);
	
	MimeMessage msg = new MimeMessage(session);
	//然后需要设置发信人地址、收信人地址、主题,以及邮件正文。
	try {
		msg.setFrom(new InternetAddress("xxxx@163.com"));//设置发信人
		msg.addRecipients(RecipientType.TO, "xxxxx@qq.com");//设置收信人
		msg.setSubject("这是一封测试邮件");//设置主题(标题)
		msg.setContent("今天是五四青年节!!", "text/plain;charset=utf-8");//设置正文
		
		//发送邮件
		Transport.send(msg);//发送邮件
	} catch (MessagingException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	
}

注意:PasswordAuthentication(“用户名”,“授权码”); 这里的参数第一个填写自己的邮箱用户名 例如邮箱为123456@163.com就填123456,第二个参数应该填写授权码(授权码是用于登录第三方邮件客户端的专用密码),自己可以去邮箱生成授权码。代码中我自己的用户名和授权码由于隐私问题去掉了,同时我的QQ邮箱和163邮箱也去掉了

效果

163邮箱发邮件:
在这里插入图片描述
QQ邮箱收邮件:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值