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

news2024/12/26 0:18:42

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程序设计有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/840772.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

24届近5年上海交通大学自动化考研院校分析

今天给大家带来的是上海交通大学控制考研分析 满满干货~还不快快点赞收藏 一、上海交通大学 学校简介 上海交通大学是我国历史最悠久、享誉海内外的高等学府之一,是教育部直属并与上海市共建的全国重点大学。经过120多年的不懈努力,上海交…

码出高效_第二章 | 面向对象_下

目录 四. 方法1. 方法签名2. 方法参数1. 形参和实参2. 可变参数 3. 构造方法4. 类内方法5. getter和setter6. 覆写 五. 重载六. 泛型七. 数据类型1. 基本数据类型2. 引用大小3. 包装类型4. 选择包装类型还是基本数据类型5. 字符串 四. 方法 1. 方法签名 方法签名包括方法名称…

PCA和自动编码器:每个人都能理解的算法

一、说明 本文的主要重点是提供主成分分析 (PCA) 和自动编码器数据转换技术的直观信息。我不打算深入研究支撑这些模型的数学理论,因为已经有大量的资源可用。 二、pca降维和自编码 2.1 pca和自编码的共同点 自动编码器通过组合数据最重要的特…

VMWare虚拟机设置固定ip

1、在主机上刷新并重新获取ip 1、输入以下命令以释放原先的 ip 地址 #windows命令 ipconfig /release #linux/macos命令 sudo dhclient -r2、再输入以下命令以重新获取 ip 地址 #windows命令 windows:ipconfig /renew #linux/macos命令 sudo dhclient2、设置虚拟…

Linux 下设置开机自启动的方法

文章目录 事先准备对于普通的 Linux对于 RedHat Enterprise Linux 9 笔者的运行环境: 设置成功过的 Linux: RedHat Enterprise Linux 9 x86_64 CentOS 8 x86_64 事先准备 进行这个教程之前,必须要先安装好一个 Linux 操作系统。这个 Linux…

windows永久关闭更新

windows图形化页面做的很好,就是一直强制你更新,不管你用不用得到,而且每次更新,电脑就会变慢。看下面多少更新的功能是用不到的。 打开注册表 winr,输入regedit打开注册表 找位置 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microso…

基于 Emscripten + WebAssembly 实现浏览器操作 Excel

一、为什么要造这个轮子 【C】使用WebAssembly在浏览器端操作Excel_wasm文件用什么打开_你的薄荷醇的博客-CSDN博客使用WebAssembly在浏览器端操作Excel_wasm文件用什么打开https://blog.csdn.net/weixin_44305576/article/details/125545900?ops_request_misc%257B%2522requ…

夜骑,需要注意些什么?

晚上骑行相较于白天骑行,存在着更多的危险和挑战。那么,在夜骑时需要注意些什么呢?接下来我将从以下几个方面进行探讨。 首先,我们需要关注夜间骑行的安全问题。由于夜间视线不好,路面状况也难以掌握,因此需…

回归预测 | MATLAB实现POA-CNN-LSTM鹈鹕算法优化卷积长短期记忆神经网络多输入单输出回归预测

回归预测 | MATLAB实现POA-CNN-LSTM鹈鹕算法优化卷积长短期记忆神经网络多输入单输出回归预测 目录 回归预测 | MATLAB实现POA-CNN-LSTM鹈鹕算法优化卷积长短期记忆神经网络多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MATLAB实现POA-CNN…

聚观早报|iPhone 15预计9月22日上市;一加Open渲染图曝光

【聚观365】8月7日消息 iPhone 15预计9月22日上市一加Open渲染图曝光Redmi K60至尊版细节曝光小米14 Pro屏幕细节曝光vivo V3正式发布,执着自研“影像芯片” iPhone 15预计9月22日上市 上周有多位消息人士透露,多家合作的电信运营商已要求员工不要在9月…

自动驾驶传感器选型

360的场景,避免有盲区,长距离 Lidar(激光雷达) 典型特点一圈一圈的,轮廓和很高的位置精度 禾赛的机械雷达 速腾的固态雷达 固态雷达是车规级的,车规级的意思是可以装到量产车上 Radar(毫米…

Containerd的两种安装方式

1. 轻量级容器管理工具 Containerd 2. Containerd的两种安装方式 3. Containerd容器镜像管理 4. Containerd数据持久化和网络管理 操作系统环境为centos7u6 1. YUM方式安装 1.1 获取YUM源 获取阿里云YUM源 # wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun…

vsocde里面远程连接服务器报could not esatablish connection xxxx

我在vscode里面远程连接服务器编辑代码时,正常我按F1选择了服务器IP地址,然后让我选在Linux,然后我再输入服务器密码,但是当我选择Linux系统之后直接没出让我输入服务器密码的输入框,而是直接报错 could not esatablis…

node上传文件 + vue3 + elementPlus 组件封装

一、node 1.在node环境中安装multer(node.js中间件)包,用于处理 multipart/form-data 类型的表单数据 npm install --save multer 2.userRouter var express require(express); const multer require(multer) const upload multer({ dest: public/avataruplo…

Unity制作护盾——1、闪电护盾

Unity引擎制作闪电护盾效果 大家好,我是阿赵。   这期做一个闪电护盾的效果。 一、效果说明 可以改变闪电的颜色 可以改变范围 改变贴图的平铺次数,也可以做出各种不同感觉的护盾。 二、原理 这个效果看着很复杂,其实只是用了一张N…

我们来谈谈数据链路层

"啊,其实触手可及!" 谈到网络层IP,有很多说法都是说,"IP是决定到达对端主机的能力"。而在实际的网络世界中,在各个节点路由器上,游走的报文也是IP报文! 但是&#xff0c…

C++入门之stl六大组件--List源码深度剖析及模拟实现

文章目录 前言 一、List源码阅读 二、List常用接口模拟实现 1.定义一个list节点 2.实现一个迭代器 2.2const迭代器 3.定义一个链表,以及实现链表的常用接口 三、List和Vector 总结 前言 本文中出现的模拟实现经过本地vs测试无误,文件已上传gite…

AI大模型来袭,智能客服变天?

配图来自Canva可画 自ChatGPT爆火“出圈”之后,国内外就掀起了一波AI大模型风潮。越来越多的企业都开始布局AI大模型领域,其中不少企业已经推出了自家的AI大模型产品,试图在这股AI浪潮中拔得头筹。而在众多AI大模型中,既有通用大…

Python爬虫如何更换ip防封

作为一名长期扎根在爬虫行业动态ip解决方案的技术员,我发现很多人常常在使用Python爬虫时遇到一个困扰,那就是如何更换IP地址。别担心,今天我就来教你如何在Python爬虫中更换IP,让你的爬虫不再受到IP封锁的困扰。废话不多说&#…