当前位置: 首页 > news >正文

java中javamail发送带附件的邮件实现方法

java中javamail发送带附件的邮件实现方法

 本文实例讲述了java中javamail发送带附件的邮件实现方法。分享给大家供大家参考。具体分析如下:

JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口。它是Sun发布的用来处理email的API。它可以方便地执行一些常用的邮件传输,JavaMail是可选包,因此如果需要使用的话你需要首先从java官网上下载。目前最新版本是JavaMail1.5.0,下面我们来看看javamail发送带附件的邮件实例

mail.java 代码:

复制代码 代码如下:

package mail; 

import java.util.* ; 

import java.io.* ; 

import javax.mail.* ; 

import javax.mail.internet.* ; 

import javax.activation.* ; 

public class Mail { 

    //定义发件人、收件人、SMTP服务器、用户名、密码、主题、内容等 

    private String displayName; 

    private String to; 

    private String from; 

    private String smtpServer; 

    private String username; 

    private String 

    private String subject; 

    private String content; 

    private boolean ifAuth; //服务器是否要身份认证 

    private String filename=""; 

    private Vector file = new Vector(); //用于保存发送附件的文件名的集合

    

    /**

     * 设置SMTP服务器地址

     */ 

    public void setSmtpServer(String smtpServer){ 

        this.smtpServer=smtpServer; 

    } 

    

    /**

     * 设置发件人的地址

     */ 

    public void setFrom(String from){ 

        this.from=from; 

    } 

    /**

     * 设置显示的名称

     */ 

    public void setDisplayName(String displayName){ 

        this.displayName=displayName; 

    } 

    

    /**

     * 设置服务器是否需要身份认证

     */ 

    public void setIfAuth(boolean ifAuth){ 

        this.ifAuth=ifAuth; 

    } 

    

    /**

     * 设置E-mail用户名

     */ 

    public void setUserName(String username){ 

        this.username=username; 

    } 

    

    /**

     * 设置E-mail密码

     */ 

    public void setPassword(String password){ 

        this.password=password; 

    } 

    

    /**

     * 设置接收者

     */ 

    public void setTo(String to){ 

        this.to=to; 

    } 

    

    /**

     * 设置主题

     */ 

    public void setSubject(String subject){ 

        this.subject=subject; 

    } 

    

    /**

     * 设置主体内容

     */ 

    public void setContent(String content){ 

        this.content=content; 

    } 

    

    /**

     * 该方法用于收集附件名

     */ 

    public void addAttachfile(String fname){ 

        file.addElement(fname); 

    } 

    

    public Mail(){ 

        

    } 

    

    /**

     * 初始化SMTP服务器地址、发送者E-mail地址、用户名、密码、接收者、主题、内容

     */ 

    public Mail(String smtpServer,String from,String displayName,String username,String password,String to,String subject,String content){ 

        this.smtpServer=smtpServer; 

        this.from=from; 

        this.displayName=displayName; 

        this.ifAuth=true; 

        this.username=username; 

        this.password=password; 

        this.to=to; 

        this.subject=subject; 

        this.content=content; 

    } 

    

    /**

     * 初始化SMTP服务器地址、发送者E-mail地址、接收者、主题、内容

     */ 

    public Mail(String smtpServer,String from,String displayName,String to,String subject,String content){ 

        this.smtpServer=smtpServer; 

        this.from=from; 

        this.displayName=displayName; 

        this.ifAuhttp://th=false; 

        this.to=to; 

        this.subject=subject; 

        this.content=content; 

    } 

    /**

     * 发送邮件

     */ 

    public HashMap send(){ 

        HashMap map=new HashMap(); 

        map.put("state", "success"); 

        String message="邮件发送成功!"; 

        Session session=null; 

        Properties props = System.getProperties(); 

        props.put("mail.smtp.host", smtpServer); 

        if(ifAuth){ //服务器需要身份认证 

            props.put("mail.smtp.auth","true");    

            SmtpAuth smtpAuth=new SmtpAuth(username,password); 

            session=Session.getDefaultInstance(props, smtpAuth);  

        }else{ 

            props.put("mail.smtp.auth","false"); 

            session=Session.getDefaultInstance(props, null); 

        } 

        session.setDebug(true); 

        Transport trans = null;   

        try { 

            Message msg = new MimeMessage(session);  

            try{ 

                Address from_address = new InternetAddress(from, displayName); 

                msg.setFrom(from_address); 

            }catch(java.io.UnsupportedEncodingException e){ 

                e.printStackTrace(); 

            } 

            InternetAddress[] address={new InternetAddress(to)}; 

            msg.setRecipients(Message.RecipientType.TO,address); 

            msg.setSubject(subject); 

            Multipart mp = new MimeMultipart(); 

            MimeBodyPart mbp = new MimeBodyPart(); 

            mbp.setContent(content.toString(), "text/html;charset=gb2312"); 

            mp.addBodyPart(mbp);   

            if(!file.isEmpty()){//有附件 

                Enumeration efile=file.elements(); 

                while(efile.hasMoreElements()){  

                    mbp=new MimeBodyPart(); 

                    filename=efile.nextElement().toString(); //选择出每一个附件名 

                    FileDataSource fds=new FileDataSource(filename); //得到数据源 

                    mbp.setDataHandler(new DataHandler(fds)); //得到附件本身并至入BodyPart 

                    mbp.setFileName(fds.getName());  //得到文件名同样至入BodyPart 

                    mp.addBodyPart(mbp); 

                }   

                file.removeAllElements();     

            }  

            msg.setContent(mp); //Multipart加入到信件 

            msg.setSentDate(new Date());     //设置信件头的发送日期 

            //发送信件 

            msg.saveChanges();  

            trans = session.getTransport("smtp"); 

            trans.connect(smtpServer, username, password); 

            trans.sendMessage(msg, msg.getAllRecipients()); 

            trans.close(); 

            

        }catch(AuthenticationFailedException e){    

             map.put("state", "failed"); 

             message="邮件发送失败!错误原因:\n"+"身份验证错误!"; 

             e.printStackTrace();  

        }catch (MessagingException e) { 

             message="邮件发送失败!错误原因:\n"+e.getMessage(); 

             map.put("state", "failed"); 

             e.printStackTrace(); 

             Exception ex = null; 

             if ((ex = e.getNextException()) != null) { 

                 System.out.println(ex.toString()); 

                 ex.printStackTrace(); 

             }  

        } 

        //System.out.println("\n提示信息:"+message); 

        map.put("message", message); 

        return map; 

    } 

}

SmtpAuth.java 代码:

复制代码 代码如下:

package mail; 

public class SmtpAuth extends javax.mail.Authenticator {  

    private String username,password;  

    public SmtpAuth(String username,String password){  

        this.username = username;   

        this.password = password;   

    }  

    protected javax.mail.PasswordAuthentication getPasswordAuthentication() {  

        return new javax.mail.PasswordAuthentication(username,password);

    }  

}

存在的问题就是发送到163的邮件全部都带有一个附件的符号,不管有没有发送附件,感兴趣的朋友可以对此加以改进和完善。

希望本文所述对大家的Java程序设计有所帮助。

相关文章:

java中javamail发送带附件的邮件实现方法

java中javamail发送带附件的邮件实现方法 本文实例讲述了java中javamail发送带附件的邮件实现方法。分享给大家供大家参考。具体分析如下: JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口。它是Sun发布的用来处理email的API。它…...

Stable Diffusion高阶技能(2)-稳定扩散百态:解密AI绘画工具「SD WebUI」的提示词高级使用策略

简介 在我们的生活中,艺术元素可谓无处不在,而处于中心地位的绘画,无疑是携带着强烈的艺术魅力。现如今随着AI技术的日新月异,AI绘画对我们的生活世界的改造影响越来越深远。那么,如何让我们在AI绘画工具中更好的指导AI完成我们心中的作品呢? 这需要我们玩转这个工具的…...

【果树农药喷洒机器人】Part2:机器人变量喷药系统硬件选型

本专栏介绍:付费专栏,持续更新机器人实战项目,欢迎各位订阅关注。 关注我,带你了解更多关于机器人、嵌入式、人工智能等方面的优质文章! 文章目录 一、引言二、变量喷药系统总体要求2.1系统功能要求2.2系统技术要求三、机器人关键硬件选型3.1深度相机概述与选型3.2单片机选…...

解决vite+vue3项目npm装包失败

报错如下: Failed to remove some directories [ npm WARN cleanup [ npm WARN cleanup D:\\V3Work\\v3project\\node_modules\\vue, npm WARN cleanup [Error: EPERM: operation not permitted, rmdir D:\V3Work\v3project\node_modules\vue\reactivity\…...

Rust之错误处理

在Rust中,将错误分为两种,可恢复错误和不可恢复错误。所谓可恢复错误就是指类似于文件未找到这类错误,一般需要将它们报告给用户并再次尝试进行操作,而不可恢复错误往往就是Bug,需要停止程序的运行。 1、不可恢复错误…...

docker compose快速编排

Docker-compose概述 Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容集群的快速编排 Docker-Compose将所管理的容器分为三层,分别是工程(project),服务(service)以及容器&#x…...

java.io.File类的使用

文章目录 概述构造器常用方法1、获取文件和目录基本信息2、列出目录的下一级3.File类的重命名功能4、判断功能的方法5、创建、删除功能 练习 概述 File类及本章下的各种流,都定义在java.io包下。一个File对象代表硬盘或网络中可能存在的一个文件或者文件目录&#…...

TypeScript技能总结(三)

typescript是js的超集,目前很多前端框架都开始使用它来作为项目的维护管理的工具,还在不断地更新,添加新功能中,我们学习它,才能更好的在的项目中运用它,发挥它的最大功效 //泛型 > 参数和返回值类型相…...

python绿色版运行程序,python 绿色版免安装

大家好,小编来为大家解答以下问题,python绿色版运行程序,python 绿色版免安装,今天让我们一起来看看吧! 软件简介 Python3.7.0 是一种被广大从业者广泛使用的通用型设计语言。该软件提供了丰富全面的模块,并…...

Python 向Excel写数据

1.项目终端导入 xlwt 库 pip install xlwt2.导入依赖包 import xlwt3.创建Excel表格类型文件 调用xlwt模块中的Workbook方法来创建一个excel表格类型文件,其中的第一个参数是设置数据的编码格式,这里是’utf-8’的形式,style_compression设…...

MySQL(1)

MySQL创建数据库和创建数据表 创建数据库 1. 连接 MySQL mysql -u root -p 2. 查看当前的数据库 show databases; 3. 创建数据库 create database 数据库名; 创建数据库 4. 创建数据库时设置字符编码 create database 数据库名 character set utf8; 5. 查看和显示…...

Android10 Recovery系列(二)增加OTG升级功能

一 、背景 起因是遇到了客户有这个需求,本着了解的原则,去看了一下之前Android版本的代码,想看看之前有没有现成的实现,移植过来。结果很不幸,没有找到。于是自己开始了功能实现的过程。下面分享一下该功能的实现 二 、准备工作 首先简单了解一下Recovery 模块的系统升…...

el-popover使用自定义图标

使用el-popover实现鼠标点击或浮动到自定义图标上弹出表格弹窗,官方文档上使用的是按钮el-button,如果想换成图标或其他的组件的话直接把el-button替换掉即可。注意替换之后的组件一定要加slot“reference”,不然组件是显示不出来的。 代码如…...

KCOM4串口转键鼠控制线测试说明

1.KOCM4介绍 KCOM4是一款最新开发的串口转键盘鼠标控制线,采用32位内核,最大60Mhz的工作频率,完美适用于游戏挂机等应用场景(如果是用在工作电脑控制或展厅电脑控制推荐CH9329双头线)。KCOM4支持普通键盘、相对鼠标、…...

2023华数杯数学建模C题完整5问代码思路分析

目前已经写出2023华数杯C题母亲身心健康对婴儿成长的影响全部5问的完整代码和42页论文(正文30页,论文部分摘要如下: 本文共解决了五个问题,涉及婴儿行为特征、睡眠质量与母亲的身体指标和心理指标的关系,以及如何优化…...

02_kafka_基本概念_基础架构

文章目录 常见的消息队列工作模式基本概念kafka 特性Kafka 基本架构topic 分区的 目的/ 好处 日志存储形式消费者,消费方式 逻辑消费组 高性能写入: 顺序写 mmap读取:零拷贝DMA 使用场景 常见的消息队列工作模式 至多一次:消息被…...

HTTP 常用状态码 301 302 304 403

HTTP 常用状态码 301 302 304 403 301 永久重定向,浏览器会把重定向后的地址缓存起来,将来用户再次访问原始地址时,直接引导用户访问新地址 302 临时重定向,浏览器会引导用户进入新地址,但不会缓存原始地址&#xff0c…...

分布式 - 服务器Nginx:一小时入门系列之静态网页配置

文章目录 1. 静态文件配置2. nginx listen 命令解析3. nginx server_name 命令解析4. nginx server 端口重复5. nginx location 命令 1. 静态文件配置 在 /home 文件下配置一个静态的AdminLTE后台管理系统: [rootnginx-dev conf.d]# cd /home [rootnginx-dev home…...

kubernetes网络之网络策略-----Network Policies - Example

创建一个Deployment并配置Service 创建一个 nginx Deployment 用于演示 Kubernetes 的 NetworkPolicy: kubectl create deployment nginx --imagenginx 输出结果 deployment.apps/nginx created通过Service暴露该Deployment kubectl expose deployment nginx --po…...

【GDI/GDI+】如何抓取屏幕保存到bitmap文件?

问题 如何抓取屏幕保存到bitmap文件? 方法 GDI 方法 1、抓取。 HBITMAP CRectChartUI::GetBitmap(HDC hDC) {HDC hMemDC;int x, y;int nWidth, nHeight;HBITMAP hBitmap, hOldBitmap;hMemDC CreateCompatibleDC(hDC);nWidth GetDeviceCaps(hDC, HORZRES);nHei…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测

uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...