前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ssm实现发送邮箱功能

ssm实现发送邮箱功能

作者头像
chao超的搬运文章
发布2023-10-15 19:21:03
2100
发布2023-10-15 19:21:03
举报
文章被收录于专栏:java,hbasejava,hbase

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

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

我的jdk版本:1.8.0_333

 1、引入依赖

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

代码语言:javascript
复制
  <!-- 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:

代码语言:javascript
复制
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:

代码语言:javascript
复制
<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、测试
代码语言:javascript
复制
@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中。

补充

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

代码语言:javascript
复制
@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";
        }
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-05-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  •  1、引入依赖
  • 2、编写配置文件
  •  3、测试
  •  获取客户端授权码
    •  这里以网易邮箱为例
    • 补充
    相关产品与服务
    短信
    腾讯云短信(Short Message Service,SMS)可为广大企业级用户提供稳定可靠,安全合规的短信触达服务。用户可快速接入,调用 API / SDK 或者通过控制台即可发送,支持发送验证码、通知类短信和营销短信。国内验证短信秒级触达,99%到达率;国际/港澳台短信覆盖全球200+国家/地区,全球多服务站点,稳定可靠。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档