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. linux 获取线程号

    #include <sys/types.h> pid_t gettid(void); 如果系统库里没有,则可以这样做: #include <sys/syscall.h> pid ...

  2. 基于angular写的一个todolist

    对于新手来说,使用angularjs写一个todolist可以快速入门

  3. Winform 窗体单例

    有窗体Form1和窗体Form2,单击Form1上按钮,只弹出一个Form2. Form2里自定义一个方法,里面判断是否弹出Form2,没有时弹出Form2. public static Form2 ...

  4. NDO to PNP( ndoutils to PNP4Nagios)

    How to use this script The aim of this script is to import your ndo database directly into PNP4nagio ...

  5. python批量处理excel文件数据

    https://www.zhihu.com/question/39299070?sort=created 作者:水中柳影链接:https://www.zhihu.com/question/392990 ...

  6. Mysql Innodb 间隙锁浅析

    间隙锁说明 innodb引擎自动使用间隙锁来避免幻读(原因是因为innodb采用单行锁+间隙锁组合而成的行锁,会锁定一个范围和记录本身的行),参数默认innodb_locaks_unsafe_for_ ...

  7. Linked List Start!

    (1)Delete Node in a Linked List 题意简单明了,用后一个节点来替换要删除的节点即可.代码如下: /** * Definition for singly-linked li ...

  8. SVN-修改已提交的日志

    前提:服务器是Windows下的VisualSVN Server 1.在库的属性页面的Hooks选项卡下找到Pre-revision property change hook,2.双击修改其内容,具体 ...

  9. cocos2dx中常见设计模式

    1.单例设计模式:导演类 2.观察者模式: 被观察者含有一个数组,里边存放了所有观察者的引用,在被观察者的状态发生改变的时候,通过调用观察者的函数来通知观察者,实现了信息的传递.  事件监听器:就是采 ...

  10. SwipeRefreshLayout嵌套ScrollView包裹复杂头布局和RecyclerView

    布局如下:上面是一个描述有:头像和部分信息的布局,底部是一个RecyclerView: 想法:想实现RecyclerView向上滚动的时候,隐藏上面的头像布局信息:使用了 CoordinatorLay ...