JavaMail 邮件开发

简介:

(api  + 配置)

开发中,邮件的应用?

             -à 注册,填写生日;  后期系统会自动发送生日祝贺

         -à 发货,发货提醒!邮件提醒!

邮件:

         1. 发邮件;【程序中如何发邮件!】

         2. 收邮件;【很多客户端工具, foxmail 】

邮件开发准备:

准备工作, 环境搭建:

1. 本地搭建一个邮件服务器

  -à 易邮服务器,eyoumailserversetup.exe

2. 新建邮箱账号

  张三给李四发邮件。

  步骤1:

         新建域名: 工具, 服务器设置, 单域名框中输入 itcast.com

  步骤2:

         新建邮箱账号:  zhangsan@itcast.com

                  lisi@itcast.com

3. 安装foxmail

         配置邮件发送服务器(smtp):  localhost      25

        邮件接收服务器(pop3):  localhost     110

         再新建账号,就可以接收邮件了!

邮件开发之普通邮件:

JavaMail开发,先引入jar文件:

         activation.jar   【如果使用jdk1.6或以上版本,可以不用这个jar文件】

         mail.jar       【邮件发送核心包】

复制代码
/**
 * 1. 发送一封普通邮件
 * @author Jie.Yuan
 *
 */
public class App_SendMail {

    @Test
    public void testSend() throws Exception {
        
        //0. 邮件参数
        Properties prop = new Properties();
        prop.put("mail.transport.protocol", "smtp");    // 指定协议
        prop.put("mail.smtp.host", "localhost");        // 主机   stmp.qq.com
        prop.put("mail.smtp.port", 25);                    // 端口
        prop.put("mail.smtp.auth", "true");                // 用户密码认证
        prop.put("mail.debug", "true");                    // 调试模式
        
        //1. 创建一个邮件的会话
        Session session = Session.getDefaultInstance(prop);
        //2. 创建邮件体对象 (整封邮件对象)
        MimeMessage message = new MimeMessage(session);
        //3. 设置邮件体参数: 
        //3.1 标题
        message.setSubject("我的第一封邮件    ");
        //3.2 邮件发送时间
        message.setSentDate(new Date());
        //3.3 发件人
        message.setSender(new InternetAddress("zhangsan@itcast.com"));
        //3.4 接收人
        message.setRecipient(RecipientType.TO, new InternetAddress("lisi@itcast.com"));
        //3.5内容
        message.setText("你好,已经发送成功!  正文....");  // 简单纯文本邮件
        message.saveChanges();   // 保存邮件(可选)
        
        //4. 发送
        Transport trans = session.getTransport();
        trans.connect("zhangsan", "888");
        // 发送邮件
        trans.sendMessage(message, message.getAllRecipients());
        trans.close();
    }
}
复制代码

邮件开发之带图片

复制代码
/**
 * 带图片资源的邮件
 * @author Jie.Yuan
 *
 */
public class App_2SendWithImg {
    
    // 初始化参数
    private static Properties prop;
    // 发件人
    private static InternetAddress sendMan = null;
    static {
        prop = new Properties();
        prop.put("mail.transport.protocol", "smtp");    // 指定协议
        prop.put("mail.smtp.host", "localhost");        // 主机   stmp.qq.com
        prop.put("mail.smtp.port", 25);                    // 端口
        prop.put("mail.smtp.auth", "true");                // 用户密码认证
        prop.put("mail.debug", "true");                    // 调试模式
        try {
            sendMan = new InternetAddress("zhangsan@itcast.com");
        } catch (AddressException e) {
            throw new RuntimeException(e);
        }
    }

    @Test
    public void testSend() throws Exception {
        // 1. 创建邮件会话
        Session session = Session.getDefaultInstance(prop);
        // 2. 创建邮件对象
        MimeMessage message = new MimeMessage(session);
        // 3. 设置参数:标题、发件人、收件人、发送时间、内容
        message.setSubject("带图片邮件");
        message.setSender(sendMan);
        message.setRecipient(RecipientType.TO, new InternetAddress("lisi@itcast.com"));
        message.setSentDate(new Date());
        
        /***************设置邮件内容: 多功能用户邮件 (related)*******************/
        // 4.1 构建一个多功能邮件块
        MimeMultipart related = new MimeMultipart("related");
        // 4.2 构建多功能邮件块内容 = 左侧文本 + 右侧图片资源
        MimeBodyPart content = new MimeBodyPart();
        MimeBodyPart resource = new MimeBodyPart();
        
        // 设置具体内容: a.资源(图片)
        String filePath = App_2SendWithImg.class.getResource("8.jpg").getPath();
        DataSource ds = new FileDataSource(new File(filePath));
        DataHandler handler = new DataHandler(ds);
        resource.setDataHandler(handler);
        resource.setContentID("8.jpg");   // 设置资源名称,给外键引用
        
        // 设置具体内容: b.文本
        content.setContent("<img src='cid:8.jpg'/>  好哈哈!", "text/html;charset=UTF-8");
        
        related.addBodyPart(content);
        related.addBodyPart(resource);
        
        /*******4.3 把构建的复杂邮件快,添加到邮件中********/
        message.setContent(related);
        
        
        // 5. 发送
        Transport trans = session.getTransport();
        trans.connect("zhangsan", "888");
        trans.sendMessage(message, message.getAllRecipients());
        trans.close();
    }
}
复制代码

邮件开发之带图片 + 附件

复制代码
/**
 * 3. 带图片资源以及附件的邮件
 * @author Jie.Yuan
 *
 */
public class App_3ImgAndAtta {
    
    // 初始化参数
    private static Properties prop;
    // 发件人
    private static InternetAddress sendMan = null;
    static {
        prop = new Properties();
        prop.put("mail.transport.protocol", "smtp");    // 指定协议
        prop.put("mail.smtp.host", "localhost");        // 主机   stmp.qq.com
        prop.put("mail.smtp.port", 25);                    // 端口
        prop.put("mail.smtp.auth", "true");                // 用户密码认证
        prop.put("mail.debug", "true");                    // 调试模式
        try {
            sendMan = new InternetAddress("zhangsan@itcast.com");
        } catch (AddressException e) {
            throw new RuntimeException(e);
        }
    }

    @Test
    public void testSend() throws Exception {
        // 1. 创建邮件会话
        Session session = Session.getDefaultInstance(prop);
        // 2. 创建邮件对象
        MimeMessage message = new MimeMessage(session);
        // 3. 设置参数:标题、发件人、收件人、发送时间、内容
        message.setSubject("带图片邮件");
        message.setSender(sendMan);
        message.setRecipient(RecipientType.TO, new InternetAddress("lisi@itcast.com"));
        message.setSentDate(new Date());
        
        /*
         * 带附件(图片)邮件开发
         */
        // 构建一个总的邮件块
        MimeMultipart mixed = new MimeMultipart("mixed");
        // ---> 总邮件快,设置到邮件对象中
        message.setContent(mixed);
        // 左侧: (文本+图片资源)
        MimeBodyPart left = new MimeBodyPart();
        // 右侧: 附件
        MimeBodyPart right = new MimeBodyPart();
        // 设置到总邮件块
        mixed.addBodyPart(left);
        mixed.addBodyPart(right);
        
        /******附件********/
        String attr_path = this.getClass().getResource("a.docx").getPath();
        DataSource attr_ds = new FileDataSource(new File(attr_path));
        DataHandler attr_handler = new DataHandler(attr_ds);
        right.setDataHandler(attr_handler);
        right.setFileName("a.docx");
        
        
        /***************设置邮件内容: 多功能用户邮件 (related)*******************/
        // 4.1 构建一个多功能邮件块
        MimeMultipart related = new MimeMultipart("related");
        // ----> 设置到总邮件快的左侧中
        left.setContent(related);
        
        // 4.2 构建多功能邮件块内容 = 左侧文本 + 右侧图片资源
        MimeBodyPart content = new MimeBodyPart();
        MimeBodyPart resource = new MimeBodyPart();
        
        // 设置具体内容: a.资源(图片)
        String filePath = App_3ImgAndAtta.class.getResource("8.jpg").getPath();
        DataSource ds = new FileDataSource(new File(filePath));
        DataHandler handler = new DataHandler(ds);
        resource.setDataHandler(handler);
        resource.setContentID("8.jpg");   // 设置资源名称,给外键引用
        
        // 设置具体内容: b.文本
        content.setContent("<img src='cid:8.jpg'/>  好哈哈!", "text/html;charset=UTF-8");
        
        related.addBodyPart(content);
        related.addBodyPart(resource);
        
        
        
        // 5. 发送
        Transport trans = session.getTransport();
        trans.connect("zhangsan", "888");
        trans.sendMessage(message, message.getAllRecipients());
        trans.close();
    }
}
复制代码

 

 注意

Java project。

如果是web项目,因为javaee自带的有邮件功能,可能存在问题!

我们要用自己的mail.jar文件功能!  需要删除javaee中mail包!

目录
相关文章
|
设计模式 监控 Java
解析Spring Cloud中的断路器模式原理
解析Spring Cloud中的断路器模式原理
|
消息中间件 Cloud Native Dubbo
贡献 18 个议题,和我们来畅聊 CommunityOverCode Asia 2024
CommunityOverCode 是 Apache 软件基金会(ASF)的官方全球系列大会,其前身为 ApacheCon。今年,CommunityOverCode Asia 将于 7 月 26-28 日在杭州举办。届时,大会将展示 Apache 项目的最新突破,共同探讨 Apache 的运作生态、Apache 软件的商业模式、开源的法律问题以及其他许多主题的内容。
342 102
|
存储 算法 计算机视觉
10 OpenCV图像识别之人脸追踪
级联分类器的核心思想是使用多个分类器级联,每个分类器负责检测不同的特征,逐步排除不可能是目标的区域,从而减少计算量和误检率,提高检测效率。级联分类器通常由多个弱分类器组成,这些弱分类器的输出被级联在一起形成强分类器,因此级联分类器也被称为“弱分类器的级联”。
|
存储 SQL 关系型数据库
GIS系统中WKT、SRID、EPSG概念解析
之前一直对WKT、EPSG、SRID不是很理解,总是混淆,今天看了一下,清晰了很多,顺便总结一下。
882 0
|
移动开发 API
阿里云com域名续费优惠口令「com批量注册更享优惠」
阿里云com域名续费优惠口令「com批量注册更享优惠」,2023年阿里云域名优惠口令,com域名续费优惠口令“com批量注册更享优惠”,cn域名续费优惠口令“cn注册多个价格更优”,com域名注册优惠口令“梦想从域名开始”,cn域名注册优惠口令“互联网上的中国标识”
191 0
|
SEO
谷歌搜索留痕的技术公式【2023年新版】
一般情况下我们是不建议个人搭建的,因为成本很高,而且技术成本和维护成本也对谷歌的SEO机制要有一定的熟悉。
595 0
谷歌搜索留痕的技术公式【2023年新版】
|
Kubernetes Shell 定位技术
Arcgis打包到docker,重启容器后发布的服务丢失解决方案。
Arcgis打包到docker,重启容器后发布的服务丢失解决方案。
486 0
|
存储 弹性计算 运维
应用实时监控 ARMS 赋能培训| 学习笔记
快速学习应用实时监控 ARMS 赋能培训
应用实时监控 ARMS 赋能培训| 学习笔记
|
存储 算法 搜索推荐
【排序算法】冒泡排序、简单选择排序、直接插入排序比较和分析
本文简单介绍了冒泡排序、简单选择排序、直接插入排序,并对这三种排序进行比较,入参都是80000个随机数,比较算法耗时。进一步,我们通过代码分析三种排序算法的性能。
【排序算法】冒泡排序、简单选择排序、直接插入排序比较和分析

热门文章

最新文章