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.hqwc.cn/news/54687.html

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

相关文章

vim、awk、tail、grep的使用

vim命令 $定位到光标所在行的行末^定位到光标所在行的行首gg定位到文件的首行G定位到文件的末行dd删除光标所在行ndd删除n行(从光标所在行开始)D删除光标所在行,使之变为空白行x删除光标所在位置字符nx删除n个字符,从光标开始向后…

【linux源码学习】【实验篇】使用bochs运行linux0.11系统(搭建一个自己的工作站)

目录 背景资源获取bochs环境搭建windowsbochs环境搭建linux声明 背景 最近看赵炯老师的《linux内核完全注释》,然后在最后一个习题里面看到使用bochs跑一下0.11的内核代码,本来觉得很难,但是如果做过一遍就会发现其实很简单,这个…

No112.精选前端面试题,享受每天的挑战和学习

文章目录 说一说JavaScript有几种方法判断变量的类型?说一说defer和async区别?HTTP(超文本传输协议)是什么?说一下浏览器输入URL发生了什么?一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青…

学python的心得体会1000字,学python的心得体会2000字

这篇文章主要介绍了学python的心得体会2000字,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获,下面让小编带着大家一起了解一下。 1. 初学者应该从简单的练习开始,先掌握基本的语法和概念,…

如何用python做自然语言处理

如何用python做自然语言处理 使用Python进行自然语言处理(NLP)是非常常见和强大的。以下是一些基本步骤: 安装所需的库: 首先,您需要安装一些用于自然语言处理的Python库,如NLTK(自然语言工具包…

html,css日常记录

动态绑定class,当index3!0时,class的值为bdt :class"{bdt:index3!0}" 动态绑定style中的height和lineheight,其中,height的值为函数px(item.length)的返回值,函数名可以随意取。 :style"{height:px(…

规划路线(微信小程序、H5)

//地图getLocationDian(e1, e2) {console.log(e1, e2);let self this;self.xx1 [];self.xx2 [];self.points [];// self.markers[]console.log(self.markers, >marks);// self.$jsonp(url, data).then(re > {// var coors re.result.routes[0].polyline;// for (v…

05|Oracle学习(UNIQUE约束)

1. UNIQUE约束介绍 也叫:唯一键约束,用于限定数据表中字段值的唯一性。 1.1 UNIQUE和primary key区别: 主键/联合主键每张表中只有一个。UNIQUE约束可以在一张表中,多个字段中存在。例如:学生的电话、身份证号都是…

数据结构:双向链表的实现(C实现)

个人主页 : 个人主页 个人专栏 : 《数据结构》 《C语言》 文章目录 前言 一、实现思路1.节点的结构(ListNode)2.新节点的创建(BuyListNode)3.头结点的创建(ListCreate)4.双向链表的销毁(ListDestroy)5.双向链表的打印(ListPrint)6.双向链表的尾插(ListPu…

面试热题(打家窃舍)

一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响小偷偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负…

windows 同时安装 Mysql 5.7 和8.0

下载链接 https://dev.mysql.com/downloads/mysql/ 推荐下载 MSI,可以通过图像化界面配置 8.1 版本 安装5.7 系统安装两个MySQL 怎么访问 都是mysql,所以环境变量 配置,只能一个生效,生效就是谁靠前谁生效 cmd 录入 services.m…

[Linux]理解文件系统!动静态库详细制作使用!(缓冲区、inode、软硬链接、动静态库)

hello,大家好,这里是bang___bang_,今天来谈谈的文件系统知识,包含有缓冲区、inode、软硬链接、动静态库。本篇旨在分享记录知识,如有需要,希望能有所帮助。 目录 1️⃣缓冲区 🍙缓冲区的意义 …