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

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

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

相关文章

网络安全 Day27-运维安全项目-堡垒机部署

运维安全项目-堡垒机部署 1. 运维安全项目-架构概述2. 运维安全项目之堡垒机2.1 堡垒机概述2.2 堡垒机选型2.3 环境准备2.4 部署Teleport堡垒机2.4.1 下载与部署2.4.2 启动2.4.3 浏览器访问teleport2.4.4 进行配置2.4.5 安装teleport客户端 2.5 teleport连接服务器 1. 运维安全…

Elasticsearch官方测试数据导入

一、数据准备 百度网盘链接 链接:https://pan.baidu.com/s/1rPZBvH-J0367yQDg9qHiwQ?pwd7n5n 提取码:7n5n文档格式 {"index":{"_id":"1"}} {"account_number":1,"balance":39225,"firstnam…

【音视频】vms布署说明

目录 外场布署场景(99%) 研发实验场景(1%) 高级玩法 证书安装方法 外场布署场景(99%) 下面两种场景,为本产品主要应用场景,2023-08-08日后(统一所有证书)…

C++ 函数模板与类模板

C最重要的特性之一就是代码重用,为了实现代码重用,代码必须具有通用性。通用代码应不受数据类型的影响,并且可以自动适应数据类型的变化。这种程序设计类型称为参数化程序设计。模板是C支持参数化程序设计的工具,通过它可以实现参…

前端进阶js02----null和undefined的区别

1.相同点 1)都是原始类型的值且保存在栈中。 2) 在布尔运算中都会被认为是false 2.不同点 1)null是js的关键字,表示空值;undefined不是关键字,是一个全局变量。 2)值相同,但类型不一样 值相同&#xff1a…

考研算法第40天:众数 【模拟,简单题】

题目 本题收获 又是一道比较简单的模拟题,就不说解题思路了,说一下中间遇到的问题吧,就是说cin输入它是碰到空格就停止输入的,详细的看下面这篇博客对于cin提取输入流遇到空格的问题_while(cin) 空格_就是那个党伟的博客-CSDN博…

为什么都劝年轻人不要频繁跳槽?

"为什么都劝年轻人不要频繁跳槽?"这句话绝对正确,没有任何漏洞,无论如何解释都是正确的,因为“频繁”这个词是非常主观的,有很大的弹性。 不同的人对于跳多少次才算频繁有不同的看法,有人认为一…

大数据培训课程-《机器学习从入门到精通》上新啦

《机器学习从入门到精通》课程是一门专业课程,面向人工智能技术服务,课程系统地介绍了Python编程库、分类、回归、无监督学习和模型使用技巧以及算法和案例充分融合。 《机器学习从入门到精通》课程亮点: 课程以任务为导向,逐步学…

Python自动化测试用例:如何优雅的完成Json格式数据断言

目录 前言 直接使用 优化 封装 小结 进阶 总结 资料获取方法 前言 记录Json断言在工作中的应用进阶。 直接使用 很早以前写过一篇博客,记录当时获取一个多级json中指定key的数据: #! /usr/bin/python # coding:utf-8 """ aut…

访问者模式(Visitor)

访问者模式是一种行为设计模式,可封装一些作用于当前数据结构的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。 Visitor is a behavior design pattern that encapsulates some operations that act on the elements of t…

积累常见的有针对性的python面试题---python面试题001

1.考点列表的.remove方法的参数是传入的对应的元素的值,而不是下标 然后再看remove这里,注意这个是,删除写的那个值,比如这里写3,就是删除3, 而不是下标. remove不是下标删除,而是内容删除. 2.元组操作,元组不支持修改,某个下标的内容 可以问他如何修改元组的某个元素 3.…

Vue3 第五节 一些组合式API和其他改变

1.provide和inject 2.响应式数据判断 3.Composition API的优势 4.新的组件 5.其他改变 一.provide和inject 作用:实现祖与后代组件间通信 套路:父组件有一个provide选项来提供数据,后代组件有一个inject选项来开始使用这些数据 &…

AcWing算法提高课-1.3.17背包问题求具体方案

宣传一下算法提高课整理 <— CSDN个人主页&#xff1a;更好的阅读体验 <— 本题链接&#xff08;AcWing&#xff09; 点这里 题目描述 有 N N N 件物品和一个容量是 V V V 的背包。每件物品只能使用一次。 第 i i i 件物品的体积是 v i v_i vi​&#xff0c;价值…

HEIF—— 1、vs2017编译Nokia - heif源码

HEIF(高效图像文件格式) 一种图片有损压缩格式,它的后缀名通常为".heic"或".heif"。 HEIF 是由运动图像专家组 (MPEG) 标准化的视觉媒体容器格式,用于存储和共享图像和图像序列。它基于著名的 ISO 基本媒体文件格式 (ISOBMFF) 标准。HEIF读写器引擎…

【C++】位图|布隆过滤器|海量数据处理面试题

文章目录 一.位图1. 位图的概念2. 位图的使用3. 位图的实现 二.布隆过滤器1. 布隆过滤器2. 布隆过滤器的实现 三.海量数据处理面试题1.位图2.布隆过滤器3.哈希切割 一.位图 1. 位图的概念 所谓位图&#xff0c;就是用每一位来存放某种状态&#xff0c;适用于海量数据&#xf…

【LeetCode】删除并获得点数

删除并获得点数 题目描述算法分析编程代码空间优化 链接: 删除并获得点数 题目描述 算法分析 编程代码 class Solution { public:int deleteAndEarn(vector<int>& nums) {const int N 10001;int arr[N] {0};for(const auto& n : nums){arr[n]n;}vector<in…

2.安装Docker-ce

一、删除之前安装的docker(若之前未安装过&#xff0c;此步骤省略…) 进入centos根目录执行以下命令&#xff08;\ 是linux系统种命令换行符&#xff0c;如果命令过长&#xff0c;可以用\来换行&#xff09; yum remove docker \ docker-client \ docker-client-latest \ doc…

尚品汇总结十:秒杀模块(面试专用)

1、需求分析 所谓“秒杀”&#xff0c;就是商家发布一些超低价格的商品&#xff0c;所有买家在同一时间网上抢购的一种销售方式。通俗一点讲就是商家为促销等目的组织的网上限时抢购活动。由于商品价格低廉&#xff0c;往往一上架就被抢购一空&#xff0c;有时只用一秒钟。 秒…

状态模式(State)

状态模式是一种行为设计模式&#xff0c;允许一个对象在其内部状态改变时改变它的行为&#xff0c;使其看起来修改了自身所属的类。其别名为状态对象(Objects for States)。 State is a behavior design pattern that allows an object to change its behavior when its inter…

谷歌广告(Google ads)如何投放?新手必看的超全教程

Google是公认的全球最大的搜索引擎&#xff0c;同时&#xff0c;Google还通过旗下的 YouTube、Gmail、Google Play、Android等产品&#xff0c;汇集了海量的海外用户。对于跨境出海商家来说&#xff0c;谷歌广告是提高销售额、提高产品流量、拓展全球市场的重要推广渠道。 那么…