javamail模拟邮箱功能发送电子邮件-基础篇(java电子邮件实例)

引言:

  JavaMail 是一种可选的、能用于读取、编写和发送电子消息的包

  JavaMail jar包下载地址:http://java.sun.com/products/javamail/downloads/index.html

  JavaMail  API中包含了多种邮件传输协议: SMTP   POP(最新为pop3)  IMAP  MIME 四大类  (本章主要讲解常用的 SMTP)

  该API的几大核心类:会话(session)、消息(message)、地址(address)、验证程序(Authentication)、传输(Transport),存储和文件夹

  废话不多说,跟着例子一步步解释每个类的主要功能 —.—



实例代码演示:

  **********************此例可直接复制粘帖至编译器进行测试哦**********************

package com.cplatform.movie.back.test;
import java.io.UnsupportedEncodingException;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

/**
 * javaMail API 模拟邮箱发送电子邮件
 * @author liuyt
 * @date  2014-10-24 上午10:10:51
 */
public class EmailFunction {
    /**
     * 发送邮件的props文件 (可使用自建priperty文件)
     * 用于初始化一个session实例,配置了一个session会话的一些基本信息
     */
    private final transient Properties props = new Properties();

    /**
     * 邮件发送者的用户名和密码
     */
    private transient String username = "[email protected]";
    private transient String password = "邮箱密码";

    /**
     * session为一个基本的邮件会话,通过该会话可执行其他邮件工作
     * 如:之后的初始化一个MimeMessage实例
     */
    private transient Session session;

    /**
     * MIME类型邮件MimeMessage类(抽象消息类Message的一个子类)
     * 可以通过将Session对象传递给MimeMessage构造器的方法来创建
     */
    private transient MimeMessage message;

    /**
     * 邮件内容类型 (这里演示一个html格式的消息格式)
     */
    private final static String CONTENT_TYPE_HTML = "text/html;charset=utf-8";

    /**
     * 端口号
     */
    private final static int MAIL_PORT = 25;

    /**
     * 邮件内容
     */
    private String content = "点击进入» <a href=‘http://www.cnblogs.com/liuyitian‘>刘一天的博客</a>";

     /**
     * 继承Authenticator子类用于用户认证  (这里指邮件服务器对用户的认证)
     * 也可外部创建一个单独的邮件实体类(包涵用户名/密码即可),继承Authenticator类来重写PasswordAuthentication方法
     */
    static class MyAuthenricator extends Authenticator{
        private String user=null;
        private String pass="";
        public MyAuthenricator(String user,String pass){
            this.user=user;
            this.pass=pass;
        }
        @Override
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(user,pass);
        }  

    }  

    /**
     * 初始化    session 实例方法
     * @param username 发送邮件的用户名(地址)
     * @param password 密码
     * @param smtpHostName  SMTP邮件服务器地址
     */
    private void initSession(String username, String password, String smtpHostName) {

        // 初始化props文件
        props.setProperty("mail.transport.protocol", "smtp");//发送邮件协议
        props.put("mail.smtp.auth", "true");        //需要验证
        props.put("mail.smtp.host", smtpHostName);    //服务器地址  

        // 根据property文件创建session,并传入Authenticator进行验证
        session = Session.getInstance(props, new MyAuthenricator(username, password));

        // 是否控制台打印消息列表 (可选)
        session.setDebug(true);
    }

    /**
     * 初始化邮箱message(消息实例)方法
     * @param subject    邮件主题
     * @param content    邮件内容
     * @throws MessagingException
     * @throws AddressException
     * @throws UnsupportedEncodingException
     */
    private void initMessage(String subject, Object content)
            throws AddressException, MessagingException, UnsupportedEncodingException {

        // 根据session创建一个消息对象
        message = new MimeMessage(session);

        // 设置发件人地址  (第二个参数为显示发件人名称,目前还没有测试成功)
        message.setFrom(new InternetAddress(username, "要显示的发件人名称"));

        // 设置邮件的主题
        message.setSubject("主题:javamail测试邮件");

        // 设置邮件的发送内容和内容的content-type(这里采用text/html格式)
        message.setContent(content.toString(),EmailFunction.CONTENT_TYPE_HTML);

        // 设置邮件的接收人地址--方法一 (选其一即可)
        // Address[] address = new Address[]{new InternetAddress("[email protected]"),"...更多列表..."};
        // message.setReplyTo(addresses);

        // 设置邮件的接收人地址--方法二 (选其一即可)
        // 如果群发邮件,收件人较多,可另写一个方法用于专门循环遍历并设置接收人
        message.addRecipient(Message.RecipientType.TO, new InternetAddress("[email protected]"));
        message.addRecipient(Message.RecipientType.TO, new InternetAddress("[email protected]"));
    }

    /**
     * 初始化邮件发送器方法
     * @param username  发送邮件的用户名(地址),并以此解析SMTP服务器地址
     * @param password  发送邮件的密码
     * @throws MessagingException
     * @throws UnsupportedEncodingException
     * @throws AddressException
     * @return
     */
    public void SimpleMailSender(final String username, final String password)
            throws AddressException, UnsupportedEncodingException, MessagingException {

        // 通过邮箱地址解析出smtp服务器,对大多数邮箱都管用 (还有IMAP和POP3)
        final String smtpHostName = "smtp." + username.split("@")[1];

        // 调用初始化session方法
        initSession(username, password, smtpHostName);

        // 调用初始化MimeMessage方法 (在初始化session完毕后)
        initMessage("邮件主题:测试邮件", content);
    }

    /**
     * 邮件发送
     * @throws MessagingException
     * @throws UnsupportedEncodingException
     */
    private void send() throws MessagingException, UnsupportedEncodingException {

        // 调用初始化邮件方法
        SimpleMailSender(username, password);

        // 根据session来获得一个Transport抽象类对象
        Transport tran = session.getTransport();

        // 打开链接 ,此时会去校验用户名和密码 (参数列表:【 邮箱服务器地址】【端口号】【 发件箱用户名】【发件箱密码】)
        tran.connect(props.getProperty("mail.smtp.host"), EmailFunction.MAIL_PORT, username, password);

        // 发送邮件  (第二个参数null指收件人地址,因为在初始化message时已经设置好了收件人地址,此处便省略)
        tran.sendMessage(message, null);

        // 关闭通道
        tran.close();
    }

    /**
     * main方法测试
     * @param args
     * @throws AddressException
     * @throws MessagingException
     * @throws UnsupportedEncodingException
     */
    public static void main(String[] args)
            throws AddressException, MessagingException, UnsupportedEncodingException {
        //直接调用发送方法
        new EmailFunction().send();
    }

}


 小结简单流程:

  根据实例代码,来总结下用javamail来发送一封简单邮件的流程
  • 下载javamail API jar包,并path到项目中去。(jar包下载地址请看本章开头)
  • 创建一个java bean,设置必要私有属性,提高代码的复用性和可读性
  • 创建内部类并继承Authenticator (验证机制)类,提供必要属性用户名和密码,重写getPasswordAuthentication方法
  • 根据java.util.property文件初始化一个邮件的Session会话实例
  • 根据步骤四得来的Session实例来初始化一个Message(消息)实例,并设置各个参数(收、发件人、主题、内容等)
  • 根据Session创建一个Transport(传输)实例 --> 打开链接(connect) -->  发送(sendMessage) -->  关闭(close)

上述流程是依据本章的实例代码来罗列的,只是让大家对流程有个简单的认识,代码本身可能并不精简,还请哆哆指正。

 转载请注明出处http://www.cnblogs.com/liuyitian/p/4048006.html



                                             每天多学一点点     代码少敲一点点

  

  

  

时间: 2024-10-06 23:27:04

javamail模拟邮箱功能发送电子邮件-基础篇(java电子邮件实例)的相关文章

javamail模拟邮箱功能发送电子邮件-中级实战篇【新增附件发送方法】(javamail API电子邮件实例)

引言: 此篇是紧随上篇文章而封装出来的,阅读本篇章建议先阅读上一篇  --> javamail模拟邮箱功能发送电子邮件-基础实战篇 上一篇章简单讲解了javamail发送邮件的基本基础和用到的几个类,并且所有初始化和发送方法都封装在一个类里面(为了代码方便演示),本章节将对各个模块进行拆分和优化,并且引入附件发送的方法 要想邮件发送附件,就要引入两个新类  Multipart 和 BodyPart 两类 Multipart(报文部件容器) 实则为一个报文容器,而邮件消息  Msage 是由各个子

javamail模拟邮箱功能--邮件删除-中级实战篇【邮件标记方法】(javamail API电子邮件实例)

前言: JavaMail jar包下载地址:http://java.sun.com/products/javamail/downloads/index.html 本章可能是讲解javamail的最后一篇了,上次更新完查看方法后,本打算周末更新的,没想今天周五挺闲,就地正法算了...就赶紧再下班前写完了.阅读本章节前建议阅读之前章节,因为这章是在之前的基础上增加的业务方法,不看之前的可能有点云里雾里.  点我前往 邮件标志:是指给邮件message对象设置一个Flag内部类里的属性字段,标志类型会

javamail模拟邮箱功能收取电子邮件-中级实战篇【内容|附件下载方法】(javamail API电子邮件实例)

引言: JavaMail jar包下载地址:http://java.sun.com/products/javamail/downloads/index.html 此篇是紧随上篇文章而封装出来的,阅读本篇章建议先阅读上一篇  -->javamail模拟邮箱功能发送电子邮件-中级实战篇[新增附件发送方法](javamail API电子邮件实例) 在上一篇中,讲解了邮件发送的两个基本方法(HTML和附件),并且引入了两个新类 Multipart 和 BodyPart 两类,整体结构比较紧凑,邮件的服务

javamail模拟邮箱功能--邮件回复-中级实战篇【邮件回复方法】(javamail API电子邮件实例)

引言: JavaMai下载地址l jar包:http://java.sun.com/products/javamail/downloads/index.html 此篇是紧随上篇文章而封装出来的,阅读本篇章建议先阅读上一篇  -->javamail模拟邮箱功能获取邮件内容-中级实战篇[内容|附件下载方法](javamail API电子邮件实例) 在上一篇中,讲解了邮件获取内容的两个方法(HTML和附件),简单介绍了邮件发送和内容获取的相同和不同之处,并且引入了新类-->javax.mail.St

java基础篇—java的集成开发环境(IDE)

从开始学习java,我们可能尝试过使用记事本编写我们的第一个java程序,比如打印"hello world!",但是慢慢的,随着对java功能的深入了解发现,面对图形,文件的输入和输出,web服务器和安卓应用程序开发等,使用集成开发环境更有助我们简单高效的编写各类java程序.目前有多种IDE支持Java 8(目前的java最新版),例如Intellij IDEA,开源软件Eclipse,NetBeans都是十分优秀的IDE.熟悉这些工具的使用对以后的学习和开发是有很大帮助的,但是作为

电子邮件账户注册,注册个人邮箱功能集锦

说到注册邮箱账号,大家都不陌生,但是上班后,收发邮件的数量大大增多,附件也越来越大.靠普通邮件收发信也许不能满足大家的工作需求,由此,商务邮箱的使用变得更加频繁.在这里,小编着重介绍一下商务邮箱的功能及使用技巧,除此之外,附上商务邮箱注册方法,希望能帮到大家邮箱功能1 收发信--与普通邮箱一样,商务邮箱同样有基础的收发信功能,与普通邮箱不同的是,商务邮箱一般通过单独收发信通道进行收发邮件,更加安全,速度也相对更快:2 大储存容量--商务用途的邮箱,信件数量.附件存储容量都需要大一些,比起普通邮箱

javamail 在linux下发送电子邮件出错

javamail  在linux下发送电子邮件出错:javax.mail.MessagingException: 500 Error: bad syntax 解决办法: 首先在Linux命令行中查看hostname[[email protected] ~]# hostnamelinux在/etc/hosts中添加一行127.0.0.1  linux 再用下列命令查看,出来结果即正确[[email protected] ~]# hostname -i127.0.0.1

3-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案基础篇(项目功能演示--GPRS )

2-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案基础篇(项目功能演示--Wi-Fi ) 这节演示 STM32采集的温湿度数据通过GPRS模块传给手机APP,APP上有个开关按钮,发指令给GPRS模块,然后发给STM32. 注:GPRS的程序都做成的透传的,就是GPRS模块通过串口接收的数据直接发给服务器,然后服务器再发给手机..GPRS模块通过网络接收的数据直接通过串口发给单片机. 一,给GPRS模块下载程序 ①调整波动开关位置 然后 记得插手机卡 二,测试

单片机成长之路(51基础篇) - 022 N76e003 APROM模拟EEPROM驱动

N76e003单片机内部没有EEPROM,但是可以使用 APROM模拟EEPROM功能,代码如下: eeprom.h 1 #ifndef _EEPROM_H_ 2 #define _EEPROM_H_ 3 4 //EEPROM 指令 5 #define BYTE_PROGRAM_AP 0x21 //APROM 字节编程(数据写入) 6 #define PAGE_ERASE_AP 0x22 //APROM 页擦除 (128字节) 7 #define BYTE_Read_AP 0x00 //APRO