ssm实现发送邮箱功能

参考:ssm整合JavaMail发送邮件_ssm整合mimemessage_ds_surk的博客-CSDN博客

我在这位前辈写的博客的基础上进行讲解完善,避免踩坑。

我的jdk版本:1.8.0_333

 1、引入依赖

相信很多朋友都卡在这里:
1、没有JavaMailSenderImpl类
2、实例化MimeMessage类爆红
缺少必要的依赖等等,用下面我实践出来的就OK了

  <!-- JavaMail API -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>5.3.3</version>
    </dependency>
    <dependency>
      <groupId>com.sun.mail</groupId>
      <artifactId>javax.mail</artifactId>
      <version>1.6.2</version>
    </dependency>

2、编写配置文件

配置文件不要写注释,这里是让你好看它们的作用

mail.properties:

mail.smtp.host=smtp.163.com                 #服务器主机名
mail.smtp.username=***********@163.com      #用于发件的邮箱
mail.smtp.password=******************       #客户端授权码
mail.smtp.defaultEncoding=utf-8             #编码字符
mail.smtp.auth=true                         #是否进行用户名密码校验
mail.smtp.timeout=20000                     #设置超时时间

获取客户端授权码教程在下面

applicationContext.xml: 

<context:property-placeholder location="classpath:mail.properties"/>
<!--邮件配置-->
    <bean class="org.springframework.mail.javamail.JavaMailSenderImpl">
        <property name="host" value="${mail.smtp.host}"/>
        <property name="username" value="${mail.smtp.username}"/>
        <property name="password" value="${mail.smtp.password}"/>
        <property name="defaultEncoding" value="${mail.smtp.defaultEncoding}"/>
        <property name="javaMailProperties">
            <props>
                <prop key="mail.smtp.auth">${mail.smtp.auth}</prop>
                <prop key="mail.smtp.timeout">${mail.smtp.timeout}</prop>
            </props>
        </property>
    </bean>

 3、测试

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
@PropertySource("classpath:mail.properties")
public class MailTest {
    @Autowired
    private JavaMailSender javaMailSender;	//在spring中配置的邮件发送的bean

    @Value("${mail.smtp.username}")	//通过注解获取配置文件属性值
    String from;	//发件人邮箱
    String to = "***********@qq.com";	//收件人邮箱,这里可以是QQ邮箱等其他邮箱
    String subject = "由JavaMail发送";	//邮件主题
    String text = "你好,这是一封来自SSM框架整合JavaMail的邮件";	//邮件正文
//    File file = new File("C:/Users/gong'chao/Desktop/3.jpeg");	//发送一个文件

    @Test
    public void testSend() {
        MimeMessage message = javaMailSender.createMimeMessage();   //创建一个使用对象方法的新实例。MIME格式的电子邮件
        MimeMessageHelper messageHelper;	//处理MimeMessage的辅助类
        try {
            messageHelper = new MimeMessageHelper(message, true);   //第二个参数表示文本内容支持HTML格式
            messageHelper.setFrom(from);    //设置电子邮件的发件人地址
            messageHelper.setTo(to);    //设置电子邮件的收件人地址,可以逗号隔开发送多个
            messageHelper.setSubject(subject);//设置电子邮件的主题
            messageHelper.setText(text,true);	//true代表支持html格式

//            messageHelper.addAttachment(file.getName(), file);	//以附件形式发送一个文件

            javaMailSender.send(message);//使用对象的方法发送电子邮件
            System.out.println("success!");

        }catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 获取客户端授权码

报错 javax.mail.AuthenticationFailedException: 535 Error: authentication failed 等
就是邮箱的客户端授权码错误或授权码没有开启

 这里以网易邮箱为例

其他邮箱都差不多的操作。另外,换其他邮箱记得更改服务器主机名,比如:QQ邮箱是smtp.465.com

这里在开启后会让你发送短信,发送短信后就会出现授权码,复制粘贴到mail.properties中。

补充

如果想要将图片传输过去,很多朋友可能尝试各种方法都没有成功。我这里也是踩坑,尝遍了网上各种方式也不行。下面看看我是如何解决的: 

@Controller
public class VerificationCodeController {
    @Autowired
    private JavaMailSender javaMailSender;

    @RequestMapping("verCon")
    @ResponseBody
    public String verCon(String email,HttpServletRequest request){
        //指定图片路径
        //不要使用request.getContextPath()+""拼接方式,找不到图片资源
        ServletContext servletContext = request.getServletContext();//获取整个web应用上下文
        //获取图片路径,一定要确保文件存在
        String imagePath = servletContext.getRealPath("/status/images/Title.png");
        //设置Cid标识
        String imageCid = "image";
        //通过cid引用嵌入的图片
        String text ="<img src=\"cid:image\" alt=\"**\">";
        try {
            messageHelper = new MimeMessageHelper(message, true);
            messageHelper.setFrom("******@163.com");
            messageHelper.setTo(email);
            messageHelper.setSubject("**");
            messageHelper.setText(text,true);
            //将图片资源嵌入到邮件中,并设置cid
            messageHelper.addInline(imageCid, new File(imagePath));
            javaMailSender.send(message);
            return "success";
        }catch (Exception e) {
            e.printStackTrace();
            return "false";
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值