JavaMail发送简单邮件

本文介绍使用JavaMail API发送邮件的基本步骤与注意事项,包括环境搭建、核心类使用及发送邮件的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、环境搭建 导包

1、下载JavaMail API包

http://www.oracle.com/technetwork/java/javamail/index-138643.html

解压后里面有个mail.jar包

下载JavaBeans Activation FrameworkJavaBeans激活框架)

解压后有个activation.jar(JDK6.0以后官方API自带)

注意:

 JDK6.0 以后开发 只需要导入 mail.jar  ----- rt.jar这个包里提供javax.activation 开发包
 JDK5.0(包括) 之前开发,需要导入mail.jar 和 activation.jar 

在开发中可能会报java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream 异常

这主要是因为MyEclipse 中javaee.jar 自带的javamai API 与 JavaMail 引入jar包发生冲突
解决 :删除javaee.jar里面的mail目录和activation目录

找到javaee.jar包后,用WinRAR打开,在里面找到mail目录和activation目录 点删除即可


二、核心类

1、javax.mail.Session类

这个类代表与邮件服务器的会话连接,要想获得这个类的实例,是不能直接new出来的,要通过这个类的静态方法

Session.getInstance(Propertiesprops);参数Properties props的作用主要是传入一些配置信息

2、javax.mail.Message类

这个类代表电子邮件,提供了一些读取和设置邮件内容的方法。如:地址信息、标题、发送和接收日期、邮件正文

这个类实际上是个抽象类,通常用的是其子类javax.mail.internet.MimeMessage  这个类代表正文符合MIME协议的电子邮件

3、javax.mail.Transport类  

这个类的主要作用就是发送邮件,这是一个抽象类,它有两种方式发送邮件

一种是,直接调用静态方法Transport.send(message);

另外一种是,由Session获取特定的Transport实例,然后传递用户名和密码(不是必要的,但如果Session的mail.smtp.auth设为true时则一定要),发送,最后关闭

通常都是用第二种方法发送

4、javax.mail.Store类

这个类的主要作用是收取邮件


三、发送邮件的步骤

1、创建邮件会话Session

2、创建MimeMessage对象,编写邮件内容

3、利用Transport发送邮件


四、发送一封简单的邮件

	//1、创建与邮件服务器的会话连接  session对象
		//创建Properties对象,设置配置信息,别错包,要引java.util.Properties
		Properties props = new Properties();
		props.put("mail.smtp.host", "smtp.163.com");//smtp服务器的主机名
		props.put("mail.transport.protocal", "smtp");//设置发送协议
		props.put("mail.smtp.auth", "true");//连接认证,设为true后,在transport发送之前一定要传用户名和密码
		props.put("mail.debug", "true");//在控制台显示生成的邮件内容
		//获得Session实例
		Session session = Session.getInstance(props);
		
		//2、生成邮件内容
		MimeMessage message = new MimeMessage(session);
		message.setFrom(new InternetAddress("JavaMailTest1615@163.com"));//发件人
		message.setRecipient(Message.RecipientType.TO, new InternetAddress("receiver1646@yeah.net"));//收件人
		message.setSubject("JavaMail 测试");//主题
		message.setText("这是一封装简单邮件");//正文
		
		//3、发送
		Transport transport = session.getTransport("smtp");
		transport.connect("JavaMailTest1615", "123456");
		transport.sendMessage(message,message.getAllRecipients());
		transport.close();//关闭
说明:

1、关于会话连接配置信息的设置,javamail提供了很多属性供设置,如在上面的小例子中设置了

mail.smtp.host,mail.transport.protocal,mail.smtp.auth等属性

一般情况下,只需设置mail.smtp.host属性即可   通常邮件smtp服务器主机名都是以smtp开头而不是www

2、在利用Properties对象设置属性值时,属性无论是什么类型的,都要加双引号,如:对于mail.debug属性来说,虽然其值是

boolean类型的,也要在true加双引号

3、我们在发送邮件时走的是smtp协议,它的过程是这样的,比如我有一个163的邮箱,我要发一封邮件给别人(对方可以是任意类型的邮箱账户),那么我是先连接我邮箱账号对应的smtp服务器smtp.163.com,然后再由服务器根据目的地转发给对应的邮箱,邮箱服务器之间的发送走的也是smtp协议,由此可以看到,我要发邮件给别人,不是我自己直接发过去的,是我账号对应的smtp服务器帮我转发的,所以我们在编写邮件发送程序的时候,mail.smtp.host属性要设置为我账号所在的smtp服务器的主机名或ip地址

4、Message的setRecipient()、addRecipient()方法中第一个参数是Message.RecipientType类型(消息接收类型)

RecipientType是Message的一个内部类,在这个内部类里定义了以下几个常量,分别是:TO ,CC ,BCC

5、在设置邮件正文时,如果正文只是简单的纯文本可以直接用setText()方法即可,但如果是复杂内容就要用setContent()方法



五、因为用JavaMail发送邮件时,创建Session对象和发送这两个步骤都是不变的,所以可以提取出来,写进一个工具类里面

/**
 * 这是一个发送邮件的工具类
 * @author charlie
 *
 */
public class MailUtil {
	/**
	 * 创建会话
	 * @param hostName  smtp服务器主机名
	 */
	public static Session createSession(String hostName){
		Properties props = new Properties();
		props.put("mail.transport.protocal", "smtp");
		props.put("mail.smtp.host", hostName);
		props.put("mail.smtp.auth", "true");
		Session session = Session.getInstance(props);
		return session;
	}
	
	/**
	 * 发送邮件
	 * @param user 发送方邮箱账号
	 * @param password 发送方邮箱密码
	 */
	public static void sendMail(Session session,Message message,String user,String password) 
	              throws Exception{
		Transport transport = session.getTransport("smtp");
		transport.connect(user, password);
		transport.sendMessage(message, message.getAllRecipients());
		transport.close();
	}
	
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值