ManagementDay06(javamail 发送html内容和附件 实现用户注册时发个邮件通知)

如果不需要做判断 可以不用手动拼接json串
可以用ctrl+shift+t 可以搜寻类名 就能找到具体的类名
回顾
1、用户--角色
    Span标签的样式:display:inline-block;width:200px

2、角色--模块
    zTree树展示权限列表
    使用步骤:
        1、导入js/css 
        2、jsp中引入js/css
        3、组织json数据,手动拼接json串[{"id":"","pId":"","name":"","checked":"true|false"}]   
        4、将这个json串向浏览器输出:response对象手动输出
        5、客户端可以发出ajax请求,来得到这个json串
            $.ajax({url:"",dataType:"text",type:"GET",success:function(){}})

对多对操作的时候,如果要操作中间表的关系,不需要加cascade

3、struts2异常处理框架
    struts.xml文件中配置
        <!--全局结果视图-->
        <global-results>
            <result name="error">/WEB-INF/pages/error.jsp</result>
        </global-results>
        <!--全局异常处理-->
        <global-exception-mappings>
            <exception-mapping exception="my.exception.SysException" result="error"></exception-mapping>
            <exception-mapping exception="java.lang.Exception" result="error"></exception-mapping>
        </global-exception-mappings>
    Action类中
        throw new SysException("");

一、什么是JavaMail
    JavaMail是提供给开发人员在应用程序中实现邮件发送和接受功能而提供的一套标准开发类库,支持常用的邮件协议,如SMTP、POP3、IMAP,
    开发人员使用JavaMail编写邮件程序时,无需考虑底层的通信细节(Socket),JavaMail也提供了能够创建出各种复杂MIME格式的邮件内容的API,
    使用JavaMail,可以使用类似OutLook、FoxMail的软件

二、JavaMail的基本概述
1、邮件开发的相关协议
    SMTP:Simple Message Transfer Protocal 发送协议 默认端口:25
    POP:Post Office Protocal 邮局协议,POP3版本用的多,接受协议 默认端口:110

三、邮件开发的准备工作
1、申请邮箱并开通POP3/SMTP服务
2、引入JavaMail
    在xxx_parent的pom.xml中添加
        <!-- Javamail -->
        <dependency>
          <groupId>javax.mail</groupId>
          <artifactId>mail</artifactId>
          <version>1.4.4</version>
        </dependency>       

    Spring和JavaMail集成还需要在xxx_parent的pom.xml引入
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context-support</artifactId>
          <version>${spring.version}</version>
        </dependency>

    如果是web项目,引入
        spring-context-support-4.2.4.RELEASE.jar
        mail-1.4.4.jar

四、传统的邮件
    Properties props = new Properties();
    props.put("mail.smtp.host", "smtp.163.com");//指定邮件的发送服务器地址
    props.put("mail.smtp.auth", "true");//服务器是否要验证用户的身份信息

    Session session  = Session.getInstance(props);//得到Session
    session.setDebug(true);//代表启用debug模式,可以在控制台输出smtp协议应答的过程

    //创建一个MimeMessage格式的邮件
    MimeMessage message = new MimeMessage(session);

    //设置发送者
    Address fromAddress = new InternetAddress("xxx@163.com");//邮件地址
    message.setFrom(fromAddress);//设置发送的邮件地址

    //设置接受者
    Address toAddress = new InternetAddress("xxx@qq.com");//邮件地址
    message.setRecipient(RecipientType.TO, toAddress);//设置接受者的地址

    //设置邮件的主题
    message.setSubject("我来了");
    //设置邮件的内容
    message.setText("啦啦啦");

    //保存邮件
    message.saveChanges();

    //得到发送邮件的火箭[transport]
    Transport transport = session.getTransport("smtp");

    //火箭连接到服务器上
    transport.connect("smtp.163.com", "xxx", "xxx");

    //火箭点火,发送
    transport.sendMessage(message, message.getAllRecipients());

    //关闭通道
    transport.close();

五、邮件发送的工具类的提取
    public class MailUtil {

    public static void sendMessage(String toAddr,String subject,String content) throws Exception {
        Properties props = new Properties();
        props.put("mail.smtp.host", "smtp.163.com");//指定邮件的发送服务器地址
        props.put("mail.smtp.auth", "true");//服务器是否要验证用户的身份信息

        Session session  = Session.getInstance(props);//得到Session
        session.setDebug(true);//代表启用debug模式,可以在控制台输出smtp协议应答的过程

        //创建一个MimeMessage格式的邮件
        MimeMessage message = new MimeMessage(session);

        //设置发送者
        Address fromAddress = new InternetAddress("xxx@163.com");//邮件地址
        message.setFrom(fromAddress);//设置发送的邮件地址

        //设置接受者
        Address toAddress = new InternetAddress(toAddr);//邮件地址
        message.setRecipient(RecipientType.TO, toAddress);//设置接受者的地址

        //设置邮件的主题
        message.setSubject(subject);
        //设置邮件的内容
        message.setText(content);

        //保存邮件
        message.saveChanges();

        //得到发送邮件的火箭[transport]
        Transport transport = session.getTransport("smtp");

        //火箭连接到服务器上
        transport.connect("smtp.163.com", "xxx", "xxx");

        //火箭点火,发送
        transport.sendMessage(message, message.getAllRecipients());

        //关闭通道
        transport.close();
    }
}

六、使用JavaMail实现员工登录信息的发送
在员工信息添加时,同时向员工发送一封通知的邮件
数据库字段的修改:USER_INFO_P表
添加EMAIL字段 varchar2(30)
1、修改PO类与映射文件
domain.userinfo
    private String email;//邮箱地址 
映射文件Userinfo.hbm.xml
    <property name="email" column="EMAIL"></property>

2、修改jUserCreate.jsp页面
    <td class="columnTitle">邮箱:</td>
    <td class="tableContent"><input type="text" name="userinfo.email" value=""/></td>
3、业务逻辑层UserServiceImpl
    //再开启一个新的线程完成邮件发送功能
    Thread th = new Thread(new Runnable() {
        public void run() {
            try {
                MailUtil.sendMessage(entity.getUserinfo().getEmail()
                        , "新人"
                        , "欢迎加入 用户名为"+entity.getUserName()+"初始密码"+SysConstant.DEFAULT_PASS);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
    th.start();//启动发送邮件的线程

七、JavaMail与Spring集成开发
    CC 英文全称是 Carbon Copy(抄送)

    BCC英文全称是 Blind Carbon Copy(暗抄送)。

    两者的区别在于在BCC栏中的收件人可以看到所有的收件人名(TO,CC,BCC),而在TO和CC栏中的收件人看不到BBC的收件人名

    Spring邮件抽象层的主要包为org.springframework.mail.包括了发送电子邮件的主要接口MailSender,和其实现类SimpleMailMessage,封装了简单邮件的属性如from,to,cc,subject,text。包里还有一颗以MailException为根的checkedException继承树,提供了对底层邮件系统异常的高级别抽象。要获得关于邮件异常层次的更丰富的信息。

    为了使用JavaMail中的一些特色,比如MIME类型的邮件,spring提供了MailSender的一个子接口,即org.springframework.mail.javamail.JavaMailSender。
    Spring还提供了一个回调接口
    org.springframework.mail.javamail.MimeMessagePreparator用于准备JavaMail的MIME信件

1、在src目录下建立mail.properties文件里面包含
    mail.smtp.host=smtp.163.com
    mail.smtp.auth=true
    mail.username=xxx
    mail.password=xxx
    mail.from=xxx@163.com   

2、使用spring配置
    <description>JavaMail配置文件</description> 
    <!-- 加载mail.properties -->
    <context:property-placeholder location="classpath:mail.properties"/>

    <!-- 配置一个简单邮件对象 -->
    <bean id="mailMessage" class="org.springframework.mail.SimpleMailMessage">
        <property name="from" value="${mail.from}"></property>
    </bean>

    <!-- 邮件的发送对象 -->
    <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
        <property name="host" value="${mail.smtp.host}"></property>
        <property name="username" value="${mail.username}"></property>
        <property name="password" value="${mail.password}"></property>
        <property name="defaultEncoding" value="UTF-8"></property>
        <!-- 邮件发送相关的配置信息 -->
        <property name="javaMailProperties" >
            <props>
                <!-- 设置认证开关 -->
                <prop key="mail.smtp.auth">${mail.smtp.auth}</prop>
                <!-- 启动调试开关 -->
                <prop key="mail.debug">true</prop>
                <!-- 设置发送延迟 -->
                <prop key="mail.smtp.timeout">0</prop>
            </props>
        </property>


    </bean>

1、发送邮件
    @Test
    public void Test() throws Exception{
        ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:applicationContext-mail.xml");
        SimpleMailMessage message = (SimpleMailMessage) ac.getBean("mailMessage");//加载简单邮件对象
        JavaMailSender sender = (JavaMailSender) ac.getBean("mailSender");//得到邮件的发送对象,专门用于邮件发送
        //设置简单邮件对象的属性
        message.setSubject("spring测试");//主体
        message.setText("hello");//内容
        message.setTo("xxx@qq.com");//收件箱

        //发送邮件
        sender.send(message);
    }

2、发送带有图片的邮件,以嵌入HTML的方式 和发附件
    @Test
    public void Test() throws Exception{
        ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:applicationContext-mail.xml");

        JavaMailSender sender = (JavaMailSender) ac.getBean("mailSender");
        //发送一个允许带图片,同时带邮件的邮件
        MimeMessage message = sender.createMimeMessage();//创建一封允许带图片,同时带邮件的邮件

        //为了更好的操作MimeMessage对象,借用一个工具类来操作
        MimeMessageHelper helper = new MimeMessageHelper(message,true);

        //通过工具类设置主题,内容,图片,附件
        helper.setFrom("xxx@163.com");
        helper.setTo("xxx@qq.com");
        helper.setSubject("来自xxx");
        helper.setText("<html><head></head><body><h1>hello!!spring image html mail</h1>" + 
            "<a href=http://www.baidu.com>baidu</a>" + "<img src=cid:image/></body></html>", true);//第二个参数说明内容要解析为html代码

        //添加图片 可以用路径 也可以用new File 弄个对象进去 554HL:IHU 是重复多次发邮件 IP被暂时挂起 可以换IP或者网
        FileSystemResource resource = new FileSystemResource(new File("C:\\Users\\Administrator\\Desktop\\imgs\\5.11\\TIM截图2.png"));
        helper.addInline("image",resource);//和cid一致

        //发送时带附件 
        FileSystemResource zipResource = new FileSystemResource(new File("C:\\Users\\Administrator\\Desktop\\imgs\\5.11\\TIM截图2.png"));
        helper.addAttachment("zip文件", zipResource);
        //发送邮件
        sender.send(message);

    }

在UserServiceImpl中注入相关的对象
    //注入邮件发送相关的对象
    private SimpleMailMessage mailMessage;
    private JavaMailSender mailSender;
    public void setMailMessage(SimpleMailMessage mailMessage) {
        this.mailMessage = mailMessage;
    }
    public void setMailSender(JavaMailSender mailSender) {
        this.mailSender = mailSender;
    }

修改相关的配置
    <bean id="userService" class="my.service.UserServiceImpl">
        <property name="baseDao" ref="baseDao"></property>
        <property name="mailMessage" ref="mailMessage"></property>
        <property name="mailSender" ref="mailSender"></property>
    </bean> 

添加spring和javamail集成的配置文件
    applicationContext-mail.xml
        <!-- 加载mail.properties -->
        <context:property-placeholder location="classpath:mail.properties"/>

        <!-- 配置一个简单邮件对象 -->
        <bean id="mailMessage" class="org.springframework.mail.SimpleMailMessage">
            <property name="from" value="${mail.from}"></property>
        </bean>

        <!-- 邮件的发送对象 -->
        <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
            <property name="host" value="${mail.smtp.host}"></property>
            <property name="username" value="${mail.username}"></property>
            <property name="password" value="${mail.password}"></property>
            <property name="defaultEncoding" value="UTF-8"></property>
            <!-- 邮件发送相关的配置信息 -->
            <property name="javaMailProperties" >
                <props>
                    <!-- 设置认证开关 -->
                    <prop key="mail.smtp.auth">${mail.smtp.auth}</prop>
                    <!-- 启动调试开关 -->
                    <prop key="mail.debug">true</prop>
                    <!-- 设置发送延迟 -->
                    <prop key="mail.smtp.timeout">0</prop>
                </props>
            </property>
        </bean>

将邮件相关信息抽取到mail.properties文件中
    mail.smtp.host
    mail.smtp.auth
    mail.username
    mail.password
    mail.from

使用线程实现邮件发送
    // spring集成javaMail
    Thread th = new Thread(new Runnable() {
        public void run() {
            try {
                mailMessage.setTo(entity.getUserinfo().getEmail());
                mailMessage.setSubject("欢迎");
                mailMessage.setText("欢迎加入 用户名为" + entity.getUserName() + "初始密码" + SysConstant.DEFAULT_PASS);

                mailSender.send(mailMessage);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
    th.start();// 启动发送邮件的线程

这里写图片描述
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值