当前位置: 首页 > 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…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

Vite中定义@软链接

在webpack中可以直接通过符号表示src路径,但是vite中默认不可以。 如何实现: vite中提供了resolve.alias:通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...

echarts使用graphic强行给图增加一个边框(边框根据自己的图形大小设置)- 适用于无法使用dom的样式

pdf-lib https://blog.csdn.net/Shi_haoliu/article/details/148157624?spm1001.2014.3001.5501 为了完成在pdf中导出echarts图,如果边框加在dom上面,pdf-lib导出svg的时候并不会导出边框,所以只能在echarts图上面加边框 grid的边框是在图里…...

Canal环境搭建并实现和ES数据同步

作者:田超凡 日期:2025年6月7日 Canal安装,启动端口11111、8082: 安装canal-deployer服务端: https://github.com/alibaba/canal/releases/1.1.7/canal.deployer-1.1.7.tar.gz cd /opt/homebrew/etc mkdir canal…...

FOPLP vs CoWoS

以下是 FOPLP(Fan-out panel-level packaging 扇出型面板级封装)与 CoWoS(Chip on Wafer on Substrate)两种先进封装技术的详细对比分析,涵盖技术原理、性能、成本、应用场景及市场趋势等维度: 一、技术原…...