spring之邮件发送
java发送邮件,spring已经很好完成了集成,使用方便。
话不多说,引入jar包。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
我用的是springboot的,如果你的项目只是spring的,可以引入javax.mail的。我估计springboot里最终还是引用的是javax.mail;
<dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>${mail.version}</version> </dependency>
java发送邮件的核心类是:JavaMailSenderImpl。按照面向对象的思维,这个就是邮件发射器。先new 一个出来再说
JavaMailSenderImpl mailSender= new JavaMailSenderImpl();
发射器有了,给他设置属性。
mailSender.setHost("smtp.qq.com");//我用的是qq,你用的是哪个就用那个的host mailSender.setPort(587);//端口号 mailSender.setUsername("[email protected]");//发送方的用户名 mailSender.setPassword("akkadugksbgjbeee");//发送方密码,QQ是授权码。获取授权码的步骤,这里不说了,百度一下
OK,发射器对象弄好了,现在需要发送的内容了,即邮件的消息内容,这里用简单的正文消息为例,
SimpleMailMessage 这个类看名字就知道是 简单的邮件消息。
SimpleMailMessage message = new SimpleMailMessage(); message.setFrom("[email protected]");//这个一定要和上面的发送方一致,不然会报错 message.setTo("[email protected]");//收件人 message.setText("This is a test e-mail");消息内容 message.setSubject("主题");
发射器有了,发送的内容也有了,那就发吧
mailSender.send(message);
OK,完成了,是不是贼简单!
当然了,上面是为了快速测验,看看邮件能不能发送而这么做的。 真实场景一般不会自己new mailSender。肯定是在xml里配置的。发送消息的内容也可能不止只有正文,还会有附件。如果有附件就用另一个类:
MimeMessageHelper;
xml的配置我截图如下:
具体对应的值,在需要的properties里配置好就行。MimeMessageHelper 用法如下:
MimeMessage mimeMessage = mailSender.createMimeMessage();//创建对象MimeMessage MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);//MimeMessageHelper进一步对MimeMessage装饰 helper.setFrom("[email protected]");//发件方 helper.setTo("[email protected]");//收件方 helper.setSubject(mailSendReq.getSubject());//主题 helper.setText("这里是邮件正文内容", true);//正文内容
helper.addAttachment(fileName, url); 这个添加附件这个方法两个参数,第一个似乎附件名称,最好带有后缀名,发送过去没有后缀名的文件,也不好打开。 第二个参数,这个url比较关键了。通常应该在远程哪个服务器有个文件,比如是一张图片吧,一般是调用我们提供的接口发送这张照片。调用者不可能先去下载,下载好了传给我们一个文件流的,因为这个太大了,这种方式不太现实。应该是给我们url,我们去下载,然后我们再进行传输。JavaMailSenderImpl提供的方法,我们已经无需下载,只需要提供UrlResource就行了。调用者提供附件所在的路径。fileUrl.
UrlResource url = new UrlResource(fileUrl);我们把这个url和附件名称添加到附件就可以了
helper.addAttachment(fileName, url);//还有一个牛逼的地方就是如果发送的是多个附件的,就调用多次添加附件的方法就行如:
helper.addAttachment(fileName2, url2);//这样发送的时候,两个附件都会发出去
mailSender.send(mimeMessage);//调用发送方法
OK,基本就这样了,其他的群发邮件的什么的,有机会再写吧