JavaMail介绍

  JavaMail是SUN提供给开发人员在应用程序中实现邮件发送和接收功能而提供的一套标准开发类库,支持常用的邮件协议,如SMTP、POP3、IMAP,开发人员使用JavaMail编写邮件程序时,无需考虑底层的通信细节(Socket),JavaMail也提供了能够创建出各种复杂MIME格式的邮件内容的API。使用JavaMail,我们可以实现类似OutLook、FoxMail的软件。虽然JavaMail(仅支持JDK4及以上)也是Java的API之一,但是却没有直接加入到JDK中,所以我们需要另行下载。另外,JavaMail依赖JAF(JavaBeans Activation Framework),JAF在Java6之后已经合并到JDK中,而JDK5之前需要另外下载JAF的类库。

  JavaMail下载地址:http://www.oracle.com/technetwork/java/javamail/index.html

JavaMail发送邮件

  邮件的方发送过程可以参照:【Mail】telnet收发邮件过程;本例中主要流程是:先创建一个Message(邮件对象),然后使用Transport(邮件传输对象)发邮件发送到邮件服务器。

  1. 先新建一个javaweb的maven项目。参照:【Maven】Eclipse 使用Maven创建Java Web项目
  2. 在pom文件中,引入javamail.jar包
  3. 新建一个Demo1类,使用Transport 非静态方法 发送邮件
     package com.hd.javamail;
    
     import java.util.Properties;
    
     import javax.mail.Address;
    import javax.mail.Message;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage; /**
    *
    * @author H__D
    * @date 2016年12月6日 下午7:01:27
    *
    */
    public class Demo1 { /**
    * 使用Transport 非静态方法 发送邮件
    * 连接163服务,给QQ邮箱发邮件
    */
    public static void main(String[] args) throws Exception { // 属性
    Properties properties = new Properties();
    // 设置认证属性
    properties.setProperty("mail.smtp.auth", "true");
    // 设置通信协议
    properties.setProperty("mail.transport.protocol", "smtp");
    // 邮件环境信息
    Session session = Session.getInstance(properties);
    // 调试,打印信息
    session.setDebug(true); // 邮件
    Message message = new MimeMessage(session);
    // 主题
    message.setSubject("test message");
    // 发送人
    message.setFrom(new InternetAddress("xxxx@163.com"));
    // 内容
    message.setText("this is content"); // 邮件传输对象
    Transport transport = session.getTransport();
    // 传输连接:host,port,user,pass/主机,端口,用户名,密码
    transport.connect("smtp.163.com", 25, "xxxx@163.com", "xxxxxx");
    // 发送邮件
    transport.sendMessage(message, new Address[] { new InternetAddress("123456@qq.com") }); // 关闭连接
    transport.close();
    }
    }
  4. 新建一个Demo2类,使用Transport 非静态方法 发送邮件
     package com.hd.javamail;
    
     import java.util.Properties;
    
     import javax.mail.Authenticator;
    import javax.mail.Message;
    import javax.mail.Message.RecipientType;
    import javax.mail.PasswordAuthentication;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage; /**
    *
    * @author H__D
    * @date 2016年12月6日 下午7:05:07
    *
    */
    public class Demo2 { /**
    * 使用Transport 静态方法 发送邮件
    * 连接163服务,给多个QQ邮箱发邮件
    * @param args
    * @throws Exception
    */
    public static void main(String[] args) throws Exception {
    // 属性对象
    Properties properties = new Properties();
    // 开启debug调试 ,打印信息
    properties.setProperty("mail.debug", "true");
    // 发送服务器需要身份验证
    properties.setProperty("mail.smtp.auth", "true");
    // 发送服务器端口,可以不设置,默认是25
    properties.setProperty("mail.smtp.port", "25");
    // 发送邮件协议名称
    properties.setProperty("mail.transport.protocol", "smtp");
    // 设置邮件服务器主机名
    properties.setProperty("mail.host", "smtp.163.com");
    // 环境信息
    Session session = Session.getInstance(properties, new Authenticator() {
    @Override
    protected PasswordAuthentication getPasswordAuthentication() {
    // 在session中设置账户信息,Transport发送邮件时会使用
    return new PasswordAuthentication( "xxxx@163.com", "xxxxx");
    }
    }); // 创建邮件对象
    Message message = new MimeMessage(session);
    //设置主题
    message.setSubject("中文主题");
    // 发件人
    message.setFrom(new InternetAddress("xxxx@163.com"));
    // 多个收件人
    message.setRecipients(RecipientType.TO, InternetAddress.parse("654321@qq.com,123456@qq.com"));
    // 抄送人
    message.setRecipient(RecipientType.CC, new InternetAddress("aaaaaa@163.com"));
    // 暗送人
    message.setRecipient(RecipientType.BCC, new InternetAddress("bbbbbbb@163.com"));
    // HTML内容
    message.setContent("<span style='color:red'>中文呵呵</span>","text/html;charset=utf-8"); // 连接邮件服务器、发送邮件、关闭连接,全做了
    Transport.send(message); }
    }
  5. 使用 465端口 发送邮件,且使用ssl认证 发送邮件
     package com.hd.javamail;
    
     import java.util.Properties;
    
     import javax.mail.Authenticator;
    import javax.mail.Message;
    import javax.mail.Message.RecipientType;
    import javax.mail.PasswordAuthentication;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage; /**
    *
    * @author H__D
    * @date 2019年11月28日 下午7:05:07
    *
    */
    public class Demo3 { /**
    * 由于国际与国内均对垃圾邮件进行严格管控,很如服务器的25端口被禁用了
    * 下面介绍使用465端口发送邮件
    * 使用Transport 静态方法 发送邮件
    * 连接163服务,给多个QQ邮箱发邮件
    * @param args
    * @throws Exception
    */
    public static void main(String[] args) throws Exception {
    // 属性对象
    Properties properties = new Properties();
    // 开启debug调试 ,打印信息
    properties.setProperty("mail.debug", "true");
    // 发送服务器需要身份验证
    properties.setProperty("mail.smtp.auth", "true");
    // 使用ssl认证
    properties.setProperty("mail.smtp.ssl.enable", "true");
    // 发送服务器端口,可以不设置,默认是25
    properties.setProperty("mail.smtp.port", "465");
    // 发送邮件协议名称
    properties.setProperty("mail.transport.protocol", "smtp");
    // 设置邮件服务器主机名
    properties.setProperty("mail.host", "smtp.163.com");
    // 环境信息
    Session session = Session.getInstance(properties, new Authenticator() {
    @Override
    protected PasswordAuthentication getPasswordAuthentication() {
    // 在session中设置账户信息,Transport发送邮件时会使用
    return new PasswordAuthentication( "xxxx@163.com", "xxxxx");
    }
    }); // 创建邮件对象
    Message message = new MimeMessage(session);
    //设置主题
    message.setSubject("中文主题");
    // 发件人
    message.setFrom(new InternetAddress("xxxx@163.com"));
    // 多个收件人
    message.setRecipients(RecipientType.TO, InternetAddress.parse("654321@qq.com,123456@qq.com"));
    // 抄送人
    message.setRecipient(RecipientType.CC, new InternetAddress("aaaaaa@163.com"));
    // 暗送人
    message.setRecipient(RecipientType.BCC, new InternetAddress("bbbbbbb@163.com"));
    // HTML内容
    message.setContent("<span style='color:red'>中文呵呵</span>","text/html;charset=utf-8"); // 连接邮件服务器、发送邮件、关闭连接,全做了
    Transport.send(message); }
    }

【Mail】JavaMail介绍及发送邮件(一)的更多相关文章

  1. JavaMail SMTP服务器发送邮件程序示例 java通过dns服务器解析ip地址

    /** * JavaMail SMTP服务器发送邮件程序示例 * 扮演SMTP服务器角色与邮件客户端软件最大的区别就是: * SMTP服务器需要解析不同接收人邮件地址主机名对应的SMTP服务器主机名 ...

  2. Spring的JavaMail实现异步发送邮件

    具体背景就不说了,可以网上搜索相关知识,或者直接看Sping MailSender的官坊网页.这里就直接实战了(Java实现异步发送电子邮件,包含中文无乱码). Maven: <dependen ...

  3. SpringBoot 2.0 集成 JavaMail ,实现异步发送邮件

    一.JavaMail的核心API 1.API功能图解 2.API说明 (1).Message 类: javax.mail.Message 类是创建和解析邮件的一个抽象类 子类javax.mail.in ...

  4. (三)集成 JavaMail ,实现异步发送邮件

    集成 JavaMail ,实现异步发送邮件 1.JavaMail的核心API 1.1 API功能图解 1.2 API说明 1.2.1 Message 类: 1.2.2 Transport 类 1.2. ...

  5. Linux下配置mail使用外部SMTP发送邮件

    修改/etc/mail.rc,增加两行:指定外部的smtp服务器地址.帐号密码等. # vi /etc/mail.rc set from=demo@qq.com smtp=smtp.qq.com se ...

  6. Java Mail(二):JavaMail介绍及发送一封简单邮件

    http://blog.csdn.net/ghsau/article/details/17839983 ************************************************ ...

  7. 使用JavaMail创建邮件发送邮件

    一.RFC882文档简单说明 RFC882文档规定了如何编写一封简单的邮件(纯文本邮件),一封简单的邮件包含邮件头和邮件体两个部分,邮件头和邮件体之间使用空行分隔. 邮件头包含的内容有: from字段 ...

  8. Android JavaMail介绍及发送一封简单邮件

    本文来自:高爽|Coder,原文地址:http://blog.csdn.net/ghsau/article/details/17839983,转载请注明.       JavaMail是SUN提供给开 ...

  9. Java JavaMail通过SMPT发送邮件

    概述 本讲讲述如何使用JavaMail工具包,通过SMPT协议,在Java代码中发送邮件. 一.JavaMail简介 JavaMail API提供了一个独立于平台且与协议无关的框架来构建邮件和消息传递 ...

随机推荐

  1. 通过JDBC进行简单的增删改查(以MySQL为例)

    目录 前言:什么是JDBC 一.准备工作(一):MySQL安装配置和基础学习 二.准备工作(二):下载数据库对应的jar包并导入 三.JDBC基本操作 (1)定义记录的类(可选) (2)连接的获取 ( ...

  2. logistic公式形式的由来,从广义线性回归说起

    普通线性回归的形式为:(之所以这么写是因为的线性才是线性的所指) 线性回归模型有一下以下几个特征: 1. 2.x,y 通常取值连续 3.y的分布为正态分布或接近正态. 广义线性模型进行了如下推广: 1 ...

  3. DSP下的#program

    2014年7月22日 最近调试使用TMS320C6713的片子调试SDRAM,中间经过很多波折,这里就不吐槽了. 想将数据或者代码放到SDRAM上一定要用到#pragma .查阅资料后,感觉百度文库的 ...

  4. 谈谈springMVC和Strut2的理解

    关于struts2框架原理 执行流程 struts2框架的核心是一个过滤器,我们编写的action类都继承ActionSupport的接口(顶层是一个过滤器filter),用户发送请求,经过核心过滤器 ...

  5. js手机号码和电话号码验证正则表达式

    /******************** 函数名称:IsTelephone 函数功能:固话,手机号码检查函数,合法返回true,反之,返回false 函数参数:obj,待检查的号码 检查规则: (1 ...

  6. NSURLCache详解和使用

    使用缓存的目的是为了使应用程序能更快速的响应用户输入,是程序高效的运行.有时候我们需要将远程web服务器获取的数据缓存起来,以空间换取时间,减少对同一个url多次请求,减轻服务器的压力,优化客户端网络 ...

  7. 微信小程序 wx.getUserInfo 解密 C# 代码

    花了6小时,弄出来的代码.网上的是PHP代码 public static string DecodeUserInfo(string raw, string signature,string encry ...

  8. keepalived衡环境搭建

    环境信息 keepalived master 192.168.1.106 keepalived backup 192.168.1.103 vip 192.168.1.100 1,安装keepalive ...

  9. Erp中的ATP和CTP是什么?两者有什么区别?

    可用量承诺(Available to Promise,ATP),是一种库存匹配模型,意在最大限度地利用库存产品对客户订单需求做出及时和准确的反应,缩短交货提前期.降低库存水准: 可用生产能力承诺(Ca ...

  10. ajax访问服务器返回json格式

    使用ajax访问服务器返回多条数据,比如返回一个表中的所有数据,页面该如何处理呢?如何获取数据呢?一直不会用ajax返回json格式,今天研究了下,分享给大家~ 首先需要引用服务,点击项目右键,添加引 ...