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. 解决openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory错误

    问题 在Centos7上编译安装openssl后,运行openssl version出现如下错误: openssl: error while loading shared libraries: lib ...

  2. win10 重装应用商店

    管理员模式打开powershell 命令窗口,输入以下重装应用商店的命令.亲测有效,我刚安装回来了. Get-AppXPackage *WindowsStore* -AllUsers | Foreac ...

  3. 使用CSS完美实现垂直居中的方法

    使用XHTML+CSS来实现元素的垂直居中一直是前端开发中的一个比较复杂且棘手的问题,作为网页设计师或前端开发工程师,这个垂直居中问题也是必须掌握的技巧之一,一些互联网公司面试题中也会出现这类题目.今 ...

  4. diary and html 文本颜色编辑,行距和其它编辑总汇

    p{line-height:1.2em;}/*段落行间距为2倍.*/ 几小块文字有白色的底色很突兀,显得难看.打开html,那儿有background color的设置,值是#FFFFFF. 对照ht ...

  5. CSS3学习内容与心得

    今天2005年7月9号,博客这个东西还真不懂,以前吧我不认识它,它也不认识我.没辙,汤老要我们写,就写吧. 写什么好呢?那就写今天学习的css3的一些要点吧. css这门课程几乎都学完了.而我觉得我还 ...

  6. Linux课程实践二:编译模块实现内核数据操控

    一.内核模块原理 1. Linux内核增加功能 Linux内核整体结构很庞大,包含了很多的组件,现在有两种方法将需要的功能包含进内核当中: - 静态加载:将所有的功能都编译进Linux内核. - 动态 ...

  7. cenos 7常用操作

    centos 虚拟机 <一>设置ip <1>虚拟机配置ip 虚拟机->设置->网络适配器->设置NAT模式 <2>编辑->虚拟网络编辑器,对 ...

  8. Android 无标题、全屏设置

    一.在主题中设置无标题.全屏 (一):直接设置主题: android:theme="@android:style/Theme.NoTitleBar.Fullscreen"  // ...

  9. css中外边距合并

    最近在布局时遇到一个有趣的问题 <style> #div1{width:200px;height:200px;background:red;}  #div2{width:50px;heig ...

  10. 右键添加"用vim打开"文件选项

    保存一个foo.reg文件 ==================== Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\*\Shell\e ...