一分钟学会JavaMail(假)__手动滑稽

因为公司内部办公系统(OA)需要增加一个发送邮件的功能,所以学习了这个感觉比较冷门的JavaMail

 

1、先上成功截图 :

2、准备事项:Java Mail虽然是官方写的,但是没有集成到jkd里面,所以需要自己下jar包

首先去官网下载,或者去CSDN 下(http://download.csdn.net/download/itsonglin/8632453)

3、这里贴一个封装好了的工具类代码,可以直接copy不用看,使用这个就能很方便的使用 javamail 而不用了解什么是javamail

ps:以前在学校学东西都是一步步的稳打稳扎,现在工作就是会用就行,赶快把功能做出来 ,   唉,希望能有时间补起来

import java.io.*;
import java.util.*;

import javax.activation.*;
import javax.mail.*;
import javax.mail.internet.*;

public class SendMail {

    private String username = null;
    private String password = null;
    private Authenticator auth = null;
    private MimeMessage mimeMessage =null;
    private Properties pros = null;
    private Multipart multipart = null;
    private BodyPart bodypart= null;
    /**
     * 初始化账号密码并验证
     * 创建MimeMessage对象
     * 发送邮件必须的步骤:1
     * @param username
     * @param password
     */
    public SendMail(String username,String password){
        this.username = username;
        this.password = password;
    }
    /**
     * 设置email系统参数
     * 接收一个map集合key为string类型,值为String
     * 发送邮件必须的步骤:2
     * @param map
     */
    public void setPros(Map<String,String> map){
        pros = new Properties();
        for(Map.Entry<String,String> entry:map.entrySet()){
            pros.setProperty(entry.getKey(), entry.getValue());
        }
    }
    /**
     * 初始化MimeMessage对象
     * 发送邮件必须的步骤:3
     */
    public void initMessage(){
        this.auth = new Email_Autherticator();
        Session session = Session.getDefaultInstance(pros,auth);
        mimeMessage = new MimeMessage(session);
    }
    /**
     * 验证账号密码
     * 发送邮件必须的步骤
     * @author Administrator
     *
     */
    public class Email_Autherticator extends Authenticator
    {
        public PasswordAuthentication getPasswordAuthentication()
        {
            return new PasswordAuthentication(username, password);
        }
    }
    /**
     * 设置发送邮件的基本参数(去除繁琐的邮件设置)
     * @param sub 设置邮件主题
     * @param text 设置邮件文本内容
     * @param rec 设置邮件接收人
     * @throws MessagingException
     * @throws UnsupportedEncodingException
     */
    public void setDefaultMessagePros(String sub,String text,String rec) throws MessagingException, UnsupportedEncodingException{
        mimeMessage.setSubject(sub);
        mimeMessage.setText(text);
        mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(rec));
        mimeMessage.setSentDate(new Date());
        mimeMessage.setFrom(new InternetAddress(username,username));
    }
    /**
     * 设置主题
     * @param subject
     * @throws MessagingException
     */
    public void  setSubject(String subject) throws MessagingException{
        mimeMessage.setSubject(subject);
    }
    /**
     * 设置日期
     * @param date
     * @throws MessagingException
     */
    public void  setDate(Date date) throws MessagingException{
        mimeMessage.setSentDate(new Date());
    }
    /**
     * 设置邮件文本内容
     * @param text
     * @throws MessagingException
     */
    public void setText(String text) throws MessagingException{
        mimeMessage.setText(text);
    }
    /**
     * 设置邮件头部
     * @param arg0
     * @param arg1
     * @throws MessagingException
     */
    public void setHeader(String arg0,String arg1) throws MessagingException{
        mimeMessage.setHeader(arg0, arg1);
    }
    /**
     * 设置邮件接收人地址 <单人发送>
     * @param recipient
     * @throws MessagingException
     */
    public void setRecipient(String recipient) throws MessagingException{
        mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(recipient));
    }
    /**
     * 设置邮件接收人地址 <多人发送>
     * @param list
     * @throws MessagingException
     * @throws AddressException
     */
    public String setRecipients(List<String> recs) throws AddressException, MessagingException{
        if(recs.isEmpty()){
            return "接收人地址为空!";
        }
        for(String str:recs){
            mimeMessage.addRecipient(Message.RecipientType.TO, new InternetAddress(str));
        }
        return "加入接收人地址成功!";
    }
    /**
     * 设置邮件接收人地址 <多人发送>
     * @param StringBuffer<parms,parms2,parms.....>
     * @throws MessagingException
     * @throws AddressException
     */
    @SuppressWarnings("static-access")
    public String setRecipients(StringBuffer sb) throws AddressException, MessagingException{
        if(sb==null||"".equals(sb)){
            return "字符串数据为空!";
        }
        Address []address = new InternetAddress().parse(sb.toString());
        mimeMessage.addRecipients(Message.RecipientType.TO, address);
        return "收件人加入成功";
    }
    /**
     * 设置邮件发送人的名字
     * @param from
     * @throws UnsupportedEncodingException
     * @throws MessagingException
     */
    public void setFrom(String from) throws UnsupportedEncodingException, MessagingException{
        mimeMessage.setFrom(new InternetAddress(username,from));
    }
    /**
     * 发送邮件<单人发送>
     * return 是否发送成功
     * @throws MessagingException
     */
    public String sendMessage() throws MessagingException{
        Transport.send(mimeMessage);
        return "success";
    }
    /**
     * 设置附件
     * @param file 发送文件的路径
     */
    public void setMultipart(String file) throws MessagingException, IOException{
        if(multipart==null){
            multipart = new MimeMultipart();
        }
        multipart.addBodyPart(writeFiles(file));
        mimeMessage.setContent(multipart);
    }
    /**
     * 设置附件<添加多附件>
     * @param fileList<接收List集合>
     * @throws MessagingException
     * @throws IOException
     */
    public void setMultiparts(List<String> fileList) throws MessagingException, IOException{
        if(multipart==null){
            multipart = new MimeMultipart();
        }
        for(String s:fileList){
            multipart.addBodyPart(writeFiles(s));
        }
        mimeMessage.setContent(multipart);
    }
    /**
     * 发送文本内容,设置编码方式
     * <方法与发送附件配套使用>
     * <发送普通的文本内容请使用setText()方法>
     * @param s
     * @param type
     * @throws MessagingException
     */
    public void setContent(String s,String type) throws MessagingException{
        if(multipart==null){
            multipart = new MimeMultipart();
        }
        bodypart = new MimeBodyPart();
        bodypart.setContent(s, type);
        multipart.addBodyPart(bodypart);
        mimeMessage.setContent(multipart);
        mimeMessage.saveChanges();
    }
    /**
     * 读取附件
     * @param filePath
     * @return
     * @throws IOException
     * @throws MessagingException
     */
    public BodyPart writeFiles(String filePath)throws IOException, MessagingException{
        File file = new File(filePath);
        if(!file.exists()){
            throw new IOException("文件不存在!请确定文件路径是否正确");
        }
        bodypart = new MimeBodyPart();
        DataSource dataSource = new FileDataSource(file);
        bodypart.setDataHandler(new DataHandler(dataSource));
        //文件名要加入编码,不然出现乱码
        bodypart.setFileName(MimeUtility.encodeText(file.getName()));
        return bodypart;
    }

}

ps:代码来自http://blog.csdn.net/Coding_One/article/details/51354456

4、把代码copy到位后(记得加你的包名),直接可以使用这个工具类了,下面就贴我写的demo了

 public void sendMailTest() throws IOException, MessagingException {
        //首先创建一个sendMail对象,它是把发送邮件这件事情封装成对象,当然需要先告诉它你的用户名和密码
        SendMail sendMail=new SendMail("你的邮箱地址","你的邮箱密码");

        //这个是告诉它一些配置信息,就像框架的配置文件
        Map<String,String> map=new HashMap<String, String>();
        map.put("mail.host","smtp.qq.com");//设置邮箱服务器的地址 我这里填的是qq邮箱的,假如你不知道你使用邮箱的服务器地址,百度下就好了,一般都是这样格式的,比如163就是smtp.163.com
        map.put("mail.smtp.auth", "true");//开启验证,不确认怎么发呢,对吧
        sendMail.setPros(map);//然后把你写好的信息告诉它

        //初始化并验证下你密码对不对
        sendMail.initMessage();

        sendMail.setSubject("这里填邮件的标题");
        sendMail.setText("这里填正文");
        sendMail.setRecipient("这个填你要发给谁");
        sendMail.setFrom("这个填你的昵称,告诉人家你是谁");
        //填了一堆乱七八糟的东西,终于可以发送拉
        sendMail.sendMessage();
    }

      总感觉这个代码样式有点丑,看IDE的更好点

    这只是一个简单的demo,更多的群发,添加附件,添加多个附件等等,  工具类里面都有支持

------------------------------------------------------------------------------一个 我还没完 的分割线------------------------------------------------------------------------------

 有个重要的事情就是,如果使用qq邮箱,密码不填你的qq密码,而是填所谓的授权码(需要在qq邮箱里面申请,设置-账户-开启SMTP服务)

然后还要开启ssl ,代码如下:

     //使用ssl登录
        MailSSLSocketFactory sf = null;
        sf = new MailSSLSocketFactory();
        sf.setTrustAllHosts(true);
        props.put("mail.smtp.ssl.enable", "true");
        props.put("mail.smtp.ssl.socketFactory", sf);

这个加哪都可以(除了发送之后。。),最好放在:

然后就可以用循环骚扰你的基友了             嘿嘿嘿

本demo只要加上开启ssl和使用授权码就可以使用,非常简单!

本文禁止一切形式转载!

时间: 2024-10-01 04:25:42

一分钟学会JavaMail(假)__手动滑稽的相关文章

十分钟学会Markdown(younghz原创)

younghz原创,转载请注明:http://blog.csdn.net/u012150179/article/details/26503779 原内容及代码托管在GitHub上,并持续更新,欢迎交流:https://github.com/younghz/Markdown 主要内容 MARKDOWN是什么? 谁发明可这么个牛X的东西? 为什么要使用它? 怎么使用? 都谁在用?没人用的东西我可不用. 感觉有意思?趁热打铁,推荐几个工具. 正文 1. MARKDOWN是什么? MARKDOWN是一种

十分钟学会Python的基本类型

一:起因 (1)说起学习Python的原因,上一篇blog已经提到过了:Python掐指一算不过是自己接触过的第四门大型语言(从接触到现在已经2周了)c/c++ ,Java,MATLAB(PS:应该还不算入门,只会简单的应用),之后就是python了. (2)c/c++ 到java的过渡是非常短暂的,但是过渡到MATLA就非常的不顺利(PS:就是上一篇的blog提到过的,从内心里抵触一门未曾谋面的语言),当时就已经感受到了开启一门新语言阻力非常大(有时可以用可遇不可求来形容). (3)从java

为知笔记 | 三分钟学会书写格式良好的笔记(Markdown)

三分钟学会书写格式良好的笔记(Markdown) 为知笔记内置了 markdown 语法支持,我们可以快速的编写格式良好的笔记,让自己写的笔记也可以赏心悦目. 新建笔记的时候,按照 markdown 语法书写,然后再标题后面加 .md 后缀(注意是英文半角小数点),保存后切换到阅读状态,就可以看到 markdown 渲染后的效果了. 为知笔记的 windows 版.Android 版.iOS 版.Mac版都支持 markdown 的渲染.在任何设备上,你都可以用简单的 markdown 语法创建

3 分钟学会调用 Apache Spark MLlib KMeans

Apache Spark MLlib是Apache Spark体系中重要的一块拼图:提供了机器学习的模块.不过,目前对此网上介绍的文章不是很多.拿KMeans来说,网上有些文章提供了一些示例程序,而这些程序基本和Apache Spark 官网上的程序片断类似:在得到训练模型后,几乎都没有展示如何使用该模型.程序执行流程.结果展示以及举例测试数据等部分.笔者根据Apache Spark官网上的程序片断,写了一个完整的调用MLlib KMeans库的测试程序,并成功在Spark 1.0 + Yarn

10分钟学会基于ASP.NET的 JQuery实例 (转)

本文介绍如何在ASP.NET(ASP.NET/AJAX)里使用基于JQuery的AJAX技术.(源代码下载见最后) 在使用JQuery前,请到www.jquery.com下载最新版本的js代码,然后再代码里使用 <script src="_scripts/jQuery-1.2.6.js" type="text/javascript"></script>即可,当然,由于微软已经把JQuery集成到VS里,所以你可以到WWW.ASP.NET/aj

三分钟学会 JavaScript 单元测试

此篇文章使用 js-test-driver , 希望给无任何JavaScript 单元测试经验的开发者, 能在最短的时间内, 开展单元测试的工作? 附件: 三分钟学会 JavaScript 单元测试

两分钟学会Unity3D布娃娃的使用

在RPG游戏中,为了让人物的死亡更加真实,unity创建布娃娃系统,搞的跟真的一样,尼玛我差点就相信那是真的了. 1.首先打开unity,创建地形,导入已经准备好的人物模块. 2.project下选中该模型,再为该模型添加布娃娃属性:GameObject->Create Other->RagDoll 3.在弹出的框中将布娃娃的各个结点设置进去 4.一定要去掉该人物的Box Collider属性,运行程序,就可以看到人物的死亡效果啦. 两分钟学会Unity3D布娃娃的使用,布布扣,bubuko.

【转载】【grunt整合版】30分钟学会使用grunt打包前端代码

[grunt整合版]30分钟学会使用grunt打包前端代码 grunt 是一套前端自动化工具,一个基于nodeJs的命令行工具,一般用于:① 压缩文件② 合并文件③ 简单语法检查 对于其他用法,我还不太清楚,我们这里简单介绍下grunt的压缩.合并文件,初学,有误请包涵 准备阶段 1.nodeJs环境 因为grunt是基于nodeJs的,所以首先各位需要安装nodeJS环境,这块我们便不管了http://www.cnblogs.com/yexiaochai/p/3527418.html 2.安装

PHP学习过程_Symfony_(3)_整理_十分钟学会Symfony

这篇文章主要介绍了Symfony学习十分钟入门教程,详细介绍了Symfony的安装配置,项目初始化,建立Bundle,设计实体,添加约束,增删改查等基本操作技巧,需要的朋友可以参考下 (此文章已被多人复制转载,原文为我们老板写的"十分钟学会Symfony",不过GItHub已经清理了,所以今天我重新整理一下,不过基本不变) Symfony是一个强大的基于PHP的Web开发框架,在这里我们用十分钟的时间来做一个简单的增删改查的程序, 任何不熟悉Symfony的人都可以通过这个教程完成自己