JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口。它是Sun发布的用来处理email的API。它可以方便地执行一些常用的邮件传输。我们可以基于JavaMail开发出类似于Microsoft Outlook的应用程序。

JavaMail包中用于处理电子邮件的核心类是:Session,Message,Address,Authenticator,Store,Transport, Folder等。Session定义了一个基本的邮件会话,它需要从Properties中读取类似于邮件服务器,用户名和密码等信息。不过JDK中并没有包含,使用JavaMail发送邮件需要使用Sun发布的mail.jar和activtion.jar两个包。

邮件协议:

SMTP协议:Simple Mail Transfer Protocol,即简单邮件传输协议,用于发送电子邮件

POP3协议:Post Office Protocol 3,即邮局协议的第三个版本,用于接收邮件

IMAP协议:Internet Message Access Protocol,即互联网消息访问协议,是POP3的替代协议


JavaMail发邮件的流程:

  1.搭建James邮件服务器

  2.安装OutLook[邮件客户端]

  3.配置outLook邮件客户端

  4.搭建James邮件服务器


1.搭建james邮件服务器

   james是apache的一个开源项目,纯java实现。

  首先我们需要下载apache-james-2.3.2.zip(批:http://pan.baidu.com/s/1pJoyg7h)

  其次运行bin目录下的run.bat即可启动服务器

  然后运行cmd命令[Telnet  localhost 4555]

  最后通过apps\james\SAR-INF\config.xml配置服务器(修改节点)

2.安装OutLook[邮件客户端],3.配置outLook邮件客户端

  输入产品秘钥(可选,测试的话,不必输入)

  产品秘钥:PQDV9-GPDV4-CRM4D-PHDTH-4M2MT

  创建用户账号,根据Telnet  localhost 4555,进行连接,

  用户名和密码默认为root

  进入help,进行添加账户(adduser)

    按要求安装,下一步即可,注意下面这个:

hosts文件:

安装完成,进行测试:

4.搭建James邮件服务器

  

最后使用JavaMail发送邮件:

需求:账户收到由javaMail所发送的任务,以及附件信息。

核心代码:

创建一个类EmailAuthenticator并继承自Authenticator,并植入用户名和密码

创建Mail类(设置邮件信息):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
public class Mail {
  private String mailServer,from,to,mailSubject,mailContent;
  private String username,password;
  public Mail(){
      //设置邮件信息
      //进行认证登录的用户名
      username="hq@mail.com";
      //认证密码
      password="hq";
      //认证的邮箱对应的邮件服务器
      mailServer="192.168.17.176";
      //发件人信息
      from="wj";
      //收件人信息
      to="wj@mail.com";
      //邮件标题
      mailSubject="我们都是好孩子333";
      //邮件内容
      mailContent="这是一封测试邮件!如有雷同,纯属不可能";
  }
  //设置邮件服务器
  @SuppressWarnings("static-access")
public  void send(){
      Properties prop=System.getProperties();
      //指定邮件server
      prop.put("mail.smtp.host", mailServer);
        
      //是否开启认证
      prop.put("mail.smtp.auth""true");
        
      //smtp协议的
      prop.put("mail.smtp.port""25");
      //产生Session服务
      EmailAuthenticator mailauth=new EmailAuthenticator(username, password);
      Session mailSession=Session.getInstance(prop,(Authenticator)mailauth);
       try {
           //封装Message对象
           Message message=new MimeMessage(mailSession);
             
           message.setFrom(new InternetAddress(from)); //发件人
           message.setRecipient(Message.RecipientType.TO, new InternetAddress(to));//收件人
           message.setSubject(mailSubject);
           //设置内容(设置字符集处理乱码问题)
           message.setContent(mailContent,"text/html;charset=gbk");
           message.setSentDate(new Date());
           //创建Transport实例,发送邮件
           Transport tran=mailSession.getTransport("smtp");
           tran.send(message,message.getAllRecipients());
           tran.close();
             
        catch (Exception e) {
            e.printStackTrace();
        }
  }

  

测试类:  

1
2
3
4
5
6
7
8
public class MyTest {
    public static void main(String[] args) {
        Mail mail=new Mail();
        mail.send();
        System.out.println("success!");
    }
  
}

  


七、发送带附件的Mail

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class MailWithAttachment {
    private JavaMailSender mailSender; //必须使用 JavaMailSender
    public void setMailSender(JavaMailSender mailSender) {
        this.mailSender = mailSender;
    }
      
    public void send() throws MessagingException,IOException{
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true"UTF-8");
        helper.setFrom("hq@mail.com");
        helper.setTo("wj@mail.com");
          
        helper.setSubject("生活生活");
        helper.setText("生活不止眼前的苟且!!!");
        //添加附件1
        ClassPathResource file1 = new ClassPathResource(
                                        "/cn/bdqn/attachfiles/test.doc");
        helper.addAttachment(file1.getFilename(), file1.getFile());
        //添加附件2:附件的文件名为中文时,需要对文件名进行编码转换,解决乱码问题
        ClassPathResource file2 = new ClassPathResource(
                                        "/cn/bdqn/attachfiles/附件测试文件.doc");
        helper.addAttachment(MimeUtility.encodeWord(file2.getFilename()),file2.getFile());
        mailSender.send(mimeMessage);
    }
}

测试类:  

1
2
3
4
5
6
7
8
9
10
11
12
13
public class MailTest {
    public static void main(String[] args){
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
          
        /*测试带附件的邮件*/
        try{
            MailWithAttachment mailWithAttach = (MailWithAttachment)context.getBean("mailWithAttachment");
            mailWithAttach.send();
        }catch(Exception e){
            System.out.print(e.toString());
        }
    }

applicationContext.xml:

JavaMail和James的更多相关文章

  1. JavaMail和James的秘密花园

    JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口.它是Sun发布的用来处理email的API.它可以方便地执行一些常用的邮件传输.我们可以基于JavaMail开发出类似于Micros ...

  2. james+javamail入门

    James+Javamail构建邮件服务(一) 本文描述如何使用James搭建具备一定邮件过滤.邮件操作功能的邮件服务器,以及使用Javamail实现对James服务器邮件的收发功能. 1关于Jame ...

  3. Spring JavaMail发送邮件

    JavaMail的介绍 JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口.它是Sun发布的用来处理email的API.它可以方便地执行一些常用的邮件传输.   虽然JavaMail是 ...

  4. 使用JavaMail发送邮件

    一.邮件的相关概念 邮件协议.主要包括: SMTP协议:Simple Mail Transfer Protocol,即简单邮件传输协议,用于发送电子邮件 POP3协议:Post Office Prot ...

  5. James搭建邮件服务器

    来源:http://chenfengcn.iteye.com/blog/356874   1 关于James与Javamail Apache James(Java Apache Mail Enterp ...

  6. 用 Apache James 搭建邮件服务器来收发邮件实践(一)(转)

    Apache James 简称 James, 是 Java Apache Mail Enterprise Server的缩写.James 是100%基于Java的电子邮件服务器.它是一种独立的邮件服务 ...

  7. 手动搭建apache james邮件服务器,实现邮件功能

    最近一直在搞邮件这块,本来我们邮件发送是用的腾讯免费的企业邮箱,邮件功能没有问题,但是由于邮件的限制,如下: 这些限制导致我们的部分客户是收不到邮件的,哪怕付费,这样的固定频率限制也是无法解决的,可以 ...

  8. JAVA实用工具--javamail

    在实现javamail之前首先要搭建邮件服务器 James 在进行WEB程序开发的时候需要使用Tomcat服务器,但是Tomcat服务器并不支持邮件的处理操作,所以要想进行邮件的发送,还需要配置一个单 ...

  9. 如何做系列(5)-james mail安装总结

    安装james还是比较复杂的,我们在EC2上花费了差不多一天,发现不能发送邮件到外网,后续又陆续花了几天的时间,才成功搭建james邮件服务器. 现在愿意把我们的经历分享出来,让大家参考一下. 由于项 ...

随机推荐

  1. AngularJS开发指南11:AngularJS的model,controller,view详解

    model model这个词在AngularJS中,既可以表示一个(比如,一个叫做phones的model,它的值是一个包含多个phone的数组)对象,也可以表示应用中的整个数据模型,这取决于我们所讨 ...

  2. ASP.NET MVC 5调用其他Action

    引用代码: @Html.Action("Index", "BaseData", new { d = "variety" }) 后台获取参数: ...

  3. 【目录】JUC锁框架目录

    JUC锁框架的目录整理如下: 1. [JUC]JUC锁框架综述 2. [JUC]JDK1.8源码分析之LockSupport(一) 3. [JUC]JDK1.8源码分析之AbstractQueuedS ...

  4. 2.C#WinForm基础Email分析器

    功能:输入Email地址,输出用户名和域名 string[] String.split(params char[] separator)(+5重载)) 返回的字符串数组包含此实例的字符串(由指定Uni ...

  5. 用SignalR 2.0开发客服系统[系列4:负载均衡的情况下使用SignalR]

    前言 交流群:195866844 目录: 用SignalR 2.0开发客服系统[系列1:实现群发通讯] 用SignalR 2.0开发客服系统[系列2:实现聊天室] 用SignalR 2.0开发客服系统 ...

  6. ASP.NET Core 中文文档 第二章 指南(4.7)添加搜索

    原文:Adding Search 作者:Rick Anderson 翻译:魏美娟(初见) 校对:谢炀(Kiler) .孟帅洋(书缘).张仁建(第二年.夏) 在本节中,你可以为 Index 方法添加查询 ...

  7. Dozer扫盲级教程

    前言 这篇文章是本人在阅读Dozer官方文档(5.5.1版本,官网已经一年多没更新了)的过程中,整理下来我认为比较基础的应用场景. 本文中提到的例子应该能覆盖JavaBean映射的大部分场景,希望对你 ...

  8. Linq查询基本操作

    摘要:本文介绍Linq查询基本操作(查询关键字) - from 子句 - where 子句 - select子句 - group 子句 - into 子句 - orderby 子句 - join 子句 ...

  9. 福利到!Rafy(原OEA)领域实体框架 2.22.2067 发布!

    距离“上次框架完整发布”已经过去了一年半了,应群中的朋友要求,决定在国庆放假之际,把最新的框架发布出来,并把帮助文档整理出来,这样可以方便大家快速上手.   发布内容 注意,本次发布,只包含 Rafy ...

  10. SQL Server 随机数,随机区间,随机抽取数据rand(),floor(),ceiling(),round(),newid()函数等

    在查询分析器中执行:select rand(),可以看到结果会是类似于这样的随机小数:0.36361513486289558,像这样的小数在实际应用中用得不多,一般要取随机数都会取随机整数.那就看下面 ...