JavaMail javaMail是提供给开发人员在应用程序中实现邮件发送和接收功能而提供的一套表中开发类库,支持常用的邮件协议,如SMTP,POO3,IMAP,开发人员使用javaMail编写邮件程序时,无需考虑底层的通信细节(Socket) 邮件开发的相关协议 SMTP:simple message transfer protocol 发送协议,默认端口:25 POP:post office protocol 邮局协议。POP3 这个版本用的最多,接受协议,默认端口:110 JavaMail 的使用: 导包: mail包 spring关联javaMail的包 传统邮件开发:
public void TestMail() throws Exception{
Properties props = new Properties();
props.put("mail.smtp.host[协议名称 也可以写成: mail.host]", "localhost[服务器地址,发送邮箱的smtp 如136:smtp.136.com]");
props.put("mail.smtp.auth", "true");
//props.put("mail.debug", "true");//显示应答信息
Session session = Session.getInstance(props)[创建一个session(应答)];
//session.setDebug(true)[显示应答应答信息]; //显示应答信息
//构造信息体
MimeMessage message = new MimeMessage(session);
//发送邮件地址
Address address = new InternetAddress("Admin@yan.com");
message.setFrom(address);
//收件人地址
Address toAddress = new InternetAddress("tom@yan.com");
message.setRecipient(MimeMessage.RecipientType.TO, toAddress);
//主题
message.setSubject("Hello word");
message.setText("hei hei hei");
message.saveChanges();
Transport transport = session.getTransport("smtp");[创建运输机,用来发送信息]
transport.connect("localhost","Admin@yan.com", "123");
transport.sendMessage(message, message.getAllRecipients());//发送
transport.close();[释放资源]
}
核心类: Session 设置服务器的参数 MimeMessage 构造信息体设置发件人收件人邮箱,以及要发送的内容 Transport 发送信息的类
可以把该类抽取成一个工具类 Spring整合javaMail
配置mail.properties mail.username=Admin@yan.com mail.password=123
内容视情况配置
配置applicationContext-mail.xml <context:property-placeholder location="classpath:mail.properties"/> ${mail.smtp.auth} ${mail.debug} ${mail.smtp.timeout}
Spring整合了javaMail所以有些方法不一样
普通邮件的发送:
SimpleMailMessage message = (SimpleMailMessage) context.getBean("simpleMailMessage");//加载邮件对象 JavaMailSenderImpl sender = (JavaMailSenderImpl) context.getBean("javaMailSenderImpl");//创建发送对象 //设置发送信息 message.setSubject("主题"); message.setText("内容"); message.setTo("收件人邮箱"); //发送邮件 sender.send(message);
复杂邮件的发送:
//获取发送对象
JavaMailSenderImpl sender = (JavaMailSenderImpl) context.getBean("javaMailSenderImpl");
//获取mimeMessage
MimeMessage message = sender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message,true);
//通过工具类设置主题,内容,图片,附件
helper.setFrom("Admin@yan.");[发件人邮件邮箱]
helper.setTo("tom@yan.com");[收件人邮箱]
helper.setSubject("主题");
helper.setText("<html><head></head><body><h1>显示图片</h1><img src=cid:image[cid的固定的,Image是自定义的,] [要加空格,因为html中地址后就有空格,不加空格html标签不对]/></body></html>",true);
//发送图片
FileSystemResource img = new FileSystemResource(new File("C:/Users/admin/Pictures/Saved Pictures/b.jpg"));
helper.addInline("image[给自定义名称image赋值]", img);
//发送附件
FileSystemResource zipResource = new FileSystemResource(new File("C:/Users/admin/Pictures/Saved Pictures/b.jpg"));
helper.addAttachment("b.zip", zipResource);
sender.send(message);
注意:配置文件要灵活应用,很多属性可配可不配或者在java类中设置 Userservice层实现向新用户发送邮件: 新创建一个线程用来发送邮件,这样访问数据库的程序和发送邮件的程序互不影响(发送邮件的业务执行的较慢)