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的配置我截图如下:

spring之邮件发送

具体对应的值,在需要的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,基本就这样了,其他的群发邮件的什么的,有机会再写吧