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. C#中有哪些类型的数组

    一维数组(Single-Dimensional)多维数组(Multidimensional)交错数组(Jagged arrays):交错数组是元素为数组的数组.交错数组元素的维度和大小可以不同.交错数 ...

  2. NodeJS 错误处理最佳实践

    NodeJS的错误处理让人痛苦,在很长的一段时间里,大量的错误被放任不管.但是要想建立一个健壮的Node.js程序就必须正确的处理这些错误,而且这并不难学.如果你实在没有耐心,那就直接绕过长篇大论跳到 ...

  3. win10使用技巧

    无法使用内置的管理员账户打开应用的问题命令行里输入:secpol.msc安全设置-本地策略-安全选项点击找到“用户账户控制:用于内置管理员账户的管理员批准”选项.该选项设置为"已启用&quo ...

  4. spark优化

    spark.shuffle.consolidateFiles=false 默认是false,shuffle阶段不进行文件的合并,1000个map和1000个reduce将产生1000 000个文件. ...

  5. leetcode-javascript

    1. Largest Number For example, given [3, 30, 34, 5, 9], the largest formed number is 9534330. // wro ...

  6. [Altera]PLL仿真

    EDA Tools: 1.Quartus II 13.1(64-bit) 2.Modelsim SE-64 10.1c Time: 2016.05.05 ----------------------- ...

  7. 传输层(2)-TCP连接的建立和终止、TIME_WAIT状态

    1.TCP连接的建立和终止 1)三路握手 客户端发送一个SYN(同步)分解,告诉服务器客户将在连接中发送的数据的初始序列号. 服务器发送确认客户的SYN(ACK),同时自己也得发送一个SYN分节,它含 ...

  8. git工作中的常用操作

    上班开始,打开电脑,git pull:拉取git上最新的代码: 编辑代码,准备提交时,git stash:将自己编辑的代码暂存起来,防止git pull时与库中的代码起冲突,否则自己的代码就白敲了: ...

  9. CC1310之使用SMARTRF STUDIO

    SMARTRF STUDIO是TI提供的射频测试软件,在调射频的时候非常非常非常好用,推荐每一个使用TI射频芯片的工程师都要掌握. 1 如何使用? 要使用SMARTRF STUDIO,硬件必须连接仿真 ...

  10. maven 编译项目时:报com.sun.image.codec.jpeg不存在

    项目中用到图片处理相关的一些工具类,在eclipse开发工具内,程序并没有什么问题,都可以正常使用,项目也没有报错,但通过maven 进行编译打包时,则会报错: 程序包com.sun.image.co ...