基于java使用JavaMail发送邮件

 更新时间:2016年12月16日 16:34:23   作者:Fighting`  
这篇文章主要介绍了基于java使用JavaMail发送邮件 ,非常具有实用价值,需要的朋友可以参考下。

一、邮件的相关概念

邮件协议。主要包括:

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

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

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

--------------------------------------------------------------------------------

 二、搭建James邮件服务器

 James是Apache的一个开源项目,纯Java实现

 搭建James服务器

 ① 下载apache-james-2.3.2.zip解压

 ② 运行bin目录下的run.bat即可启动服务器[Telnet  localhost 4555]

 ③ 通过apps\james\SAR-INF\config.xml配置服务器

 注:先到bin下run一道。 放如非中文目录, 得再控制面板开启Telnet客户端

--------------------------------------------------------------------------------

 三、安装OutLook[邮件客户端]

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

创建用户账号

一、使用telnet连接James的Remote Administration Tool

二、以管理员身份登录

三、使用adduser命令添加用户

--------------------------------------------------------------------------------

四、配置outlook邮件客户端

为了方便查看,可以配置Microsoft Outlook邮件客户端,保证James邮件服务器是启动状态,启动Microsoft Outlook.

选择“工具”->“选项”,打开“选项”面板。选择“邮件设置”并点击“电子邮件账户”,打开“账号设置”面板。在“电子邮件”选项卡下新建邮件账户

--------------------------------------------------------------------------------

五、案例[搭建James邮件服务器]

需求说明:

在本机搭建James邮件服务器,自定义服务器的名称。

创建两个测试用户。

在Microsoft Outlook中配置其中一个测试用户为Outlook邮件账户

--------------------------------------------------------------------------------

 六、使用JavaMail发送电子邮件(案例)

 需求:

使用JavaMail技术,实现从A账户给B账户发送一封电子邮件,标题为“会议通知”,邮件内容为“XX你好!请于明天下午16:00 准时到B01会议室召开技术讨论会。”通过Outlook 客户端查看邮件程序发送的邮件是否发送成功

关键代码:

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

 创建Mail类设置邮件信息:

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();

    }

 } 

测试类:  

public class MyTest {

  public static void main(String[] args) {

    Mail mail=new Mail();

    mail.send();

    System.out.println("success!");

  }
} 

--------------------------------------------------------------------------------

七、发送带附件的Mail

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);

  }

} 

测试类:  

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:大配置  

 

 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Java 中 synchronized的用法详解(四种用法)

    Java 中 synchronized的用法详解(四种用法)

    Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。本文给大家介绍java中 synchronized的用法,对本文感兴趣的朋友一起看看吧
    2015-11-11
  • Java使用JCommander实现解析命令行参数

    Java使用JCommander实现解析命令行参数

    jcommander 是一个只有几十 kb 的 Java 命令行参数解析工具,可以通过注解的方式快速实现命令行参数解析,本文就来和大家介绍一下JCommander是如何解析命令行参数吧
    2023-06-06
  • springboot 整合 langchain4j 实现简单的问答功能

    springboot 整合 langchain4j 实现简单的问答功能

    最近在学习langchain4j,本文将介绍如何使用langchain4j快速实现一个简单的问答功能,结合实例代码给大家介绍的非常详细,需要的朋友参考下吧
    2025-04-04
  • Java打包工具jar包详解

    Java打包工具jar包详解

    这篇文章主要介绍了Java打包工具jar包详解,在本例中我们引入一个叫jaxen.jar的库,并将所有以”org.jaxen”开头的类重命名以”org.example.jaxen”开头,具体实例代码跟随小编一起看看吧
    2021-10-10
  • java中servlet实现登录验证的方法

    java中servlet实现登录验证的方法

    做web开发,登录验证是免不了的,今天学习了servlet的登录验证,当然是很简单的,没有使用session,request等作用域对象,所以还是可以直接通过地址访问网页的。
    2013-05-05
  • Spring+Mybatis 实现aop数据库读写分离与多数据库源配置操作

    Spring+Mybatis 实现aop数据库读写分离与多数据库源配置操作

    这篇文章主要介绍了Spring+Mybatis 实现aop数据库读写分离与多数据库源配置操作,需要的朋友可以参考下
    2017-09-09
  • Java加载本地库的方法之System.load与System.loadLibrary

    Java加载本地库的方法之System.load与System.loadLibrary

    最近在做的工作要用到本地方法,所以下面这篇文章主要介绍了Java加载本地库的方法之System.load与System.loadLibrary的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-09-09
  • java截取网页图片的方法

    java截取网页图片的方法

    这篇文章主要介绍了java截取网页图片的方法,涉及java调用第三方控件实现截图的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • Java实现转换图片格式的示例代码

    Java实现转换图片格式的示例代码

    在日常的软件开发中,处理图像文件是一项常见任务,这篇文章将实现实现一个简单的Java程序,用于将一种图片格式转换为另一种格式,需要的可以了解下
    2025-02-02
  • 深入理解happens-before和as-if-serial语义

    深入理解happens-before和as-if-serial语义

    本文大部分整理自《Java并发编程的艺术》,温故而知新,加深对基础的理解程度。下面可以和小编来一起学习下
    2019-05-05

最新评论