• 【Mail】JavaMail介绍及发送邮件(一)


    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 非静态方法 发送邮件
       1 package com.hd.javamail;
       2 
       3 import java.util.Properties;
       4 
       5 import javax.mail.Address;
       6 import javax.mail.Message;
       7 import javax.mail.Session;
       8 import javax.mail.Transport;
       9 import javax.mail.internet.InternetAddress;
      10 import javax.mail.internet.MimeMessage;
      11 
      12 /**
      13  * 
      14  * @author H__D
      15  * @date 2016年12月6日 下午7:01:27
      16  *
      17  */
      18 public class Demo1 {
      19 
      20     /**
      21      * 使用Transport 非静态方法 发送邮件
      22      * 连接163服务,给QQ邮箱发邮件
      23      */
      24     public static void main(String[] args) throws Exception {
      25 
      26         // 属性
      27         Properties properties = new Properties();
      28         // 设置认证属性
      29         properties.setProperty("mail.smtp.auth", "true");
      30         // 设置通信协议
      31         properties.setProperty("mail.transport.protocol", "smtp");
      32         // 邮件环境信息
      33         Session session = Session.getInstance(properties);
      34         // 调试,打印信息
      35         session.setDebug(true);
      36 
      37         // 邮件
      38         Message message = new MimeMessage(session);
      39         // 主题
      40         message.setSubject("test message");
      41         // 发送人
      42         message.setFrom(new InternetAddress("xxxx@163.com"));
      43         // 内容
      44         message.setText("this is content");
      45 
      46         // 邮件传输对象
      47         Transport transport = session.getTransport();
      48         // 传输连接:host,port,user,pass/主机,端口,用户名,密码
      49         transport.connect("smtp.163.com", 25, "xxxx@163.com", "xxxxxx");
      50         // 发送邮件
      51         transport.sendMessage(message, new Address[] { new InternetAddress("123456@qq.com") });
      52 
      53         // 关闭连接
      54         transport.close();
      55     }
      56 }
    4. 新建一个Demo2类,使用Transport 非静态方法 发送邮件
       1 package com.hd.javamail;
       2 
       3 import java.util.Properties;
       4 
       5 import javax.mail.Authenticator;
       6 import javax.mail.Message;
       7 import javax.mail.Message.RecipientType;
       8 import javax.mail.PasswordAuthentication;
       9 import javax.mail.Session;
      10 import javax.mail.Transport;
      11 import javax.mail.internet.InternetAddress;
      12 import javax.mail.internet.MimeMessage;
      13 
      14 /**
      15  * 
      16  * @author H__D
      17  * @date 2016年12月6日 下午7:05:07
      18  *
      19  */
      20 public class Demo2 {
      21 
      22     /**
      23      * 使用Transport 静态方法 发送邮件
      24      * 连接163服务,给多个QQ邮箱发邮件
      25      * @param args
      26      * @throws Exception
      27      */
      28     public static void main(String[] args) throws Exception {
      29         // 属性对象
      30         Properties properties = new  Properties();
      31         // 开启debug调试  ,打印信息
      32         properties.setProperty("mail.debug", "true"); 
      33         // 发送服务器需要身份验证  
      34         properties.setProperty("mail.smtp.auth", "true");
      35         // 发送服务器端口,可以不设置,默认是25
      36         properties.setProperty("mail.smtp.port", "25");
      37         // 发送邮件协议名称 
      38         properties.setProperty("mail.transport.protocol", "smtp");
      39         // 设置邮件服务器主机名 
      40         properties.setProperty("mail.host", "smtp.163.com");
      41         // 环境信息
      42         Session session = Session.getInstance(properties, new Authenticator() {
      43             @Override
      44             protected PasswordAuthentication getPasswordAuthentication() {
      45                 // 在session中设置账户信息,Transport发送邮件时会使用  
      46                 return new PasswordAuthentication( "xxxx@163.com", "xxxxx");
      47             }
      48         });
      49         
      50         // 创建邮件对象  
      51         Message message = new MimeMessage(session);  
      52         //设置主题
      53         message.setSubject("中文主题");
      54         // 发件人  
      55         message.setFrom(new InternetAddress("xxxx@163.com"));
      56         // 多个收件人  
      57         message.setRecipients(RecipientType.TO, InternetAddress.parse("654321@qq.com,123456@qq.com"));
      58         // 抄送人  
      59         message.setRecipient(RecipientType.CC, new InternetAddress("aaaaaa@163.com"));  
      60         // 暗送人  
      61         message.setRecipient(RecipientType.BCC, new InternetAddress("bbbbbbb@163.com"));  
      62         // HTML内容  
      63         message.setContent("<span style='color:red'>中文呵呵</span>","text/html;charset=utf-8");
      64         
      65         // 连接邮件服务器、发送邮件、关闭连接,全做了  
      66         Transport.send(message);
      67         
      68     }
      69 }
    5. 使用 465端口 发送邮件,且使用ssl认证 发送邮件
       1 package com.hd.javamail;
       2 
       3 import java.util.Properties;
       4 
       5 import javax.mail.Authenticator;
       6 import javax.mail.Message;
       7 import javax.mail.Message.RecipientType;
       8 import javax.mail.PasswordAuthentication;
       9 import javax.mail.Session;
      10 import javax.mail.Transport;
      11 import javax.mail.internet.InternetAddress;
      12 import javax.mail.internet.MimeMessage;
      13 
      14 /**
      15  * 
      16  * @author H__D
      17  * @date 2019年11月28日 下午7:05:07
      18  *
      19  */
      20 public class Demo3 {
      21 
      22     /**
      23      * 由于国际与国内均对垃圾邮件进行严格管控,很如服务器的25端口被禁用了
      24      * 下面介绍使用465端口发送邮件
      25      * 使用Transport 静态方法 发送邮件
      26      * 连接163服务,给多个QQ邮箱发邮件
      27      * @param args
      28      * @throws Exception
      29      */
      30     public static void main(String[] args) throws Exception {
      31         // 属性对象
      32         Properties properties = new  Properties();
      33         // 开启debug调试  ,打印信息
      34         properties.setProperty("mail.debug", "true"); 
      35         // 发送服务器需要身份验证  
      36         properties.setProperty("mail.smtp.auth", "true");
      37         // 使用ssl认证
      38         properties.setProperty("mail.smtp.ssl.enable", "true");
      39         // 发送服务器端口,可以不设置,默认是25
      40         properties.setProperty("mail.smtp.port", "465");
      41         // 发送邮件协议名称 
      42         properties.setProperty("mail.transport.protocol", "smtp");
      43         // 设置邮件服务器主机名 
      44         properties.setProperty("mail.host", "smtp.163.com");
      45         // 环境信息
      46         Session session = Session.getInstance(properties, new Authenticator() {
      47             @Override
      48             protected PasswordAuthentication getPasswordAuthentication() {
      49                 // 在session中设置账户信息,Transport发送邮件时会使用  
      50                 return new PasswordAuthentication( "xxxx@163.com", "xxxxx");
      51             }
      52         });
      53         
      54         // 创建邮件对象  
      55         Message message = new MimeMessage(session);  
      56         //设置主题
      57         message.setSubject("中文主题");
      58         // 发件人  
      59         message.setFrom(new InternetAddress("xxxx@163.com"));
      60         // 多个收件人  
      61         message.setRecipients(RecipientType.TO, InternetAddress.parse("654321@qq.com,123456@qq.com"));
      62         // 抄送人  
      63         message.setRecipient(RecipientType.CC, new InternetAddress("aaaaaa@163.com"));  
      64         // 暗送人  
      65         message.setRecipient(RecipientType.BCC, new InternetAddress("bbbbbbb@163.com"));  
      66         // HTML内容  
      67         message.setContent("<span style='color:red'>中文呵呵</span>","text/html;charset=utf-8");
      68         
      69         // 连接邮件服务器、发送邮件、关闭连接,全做了  
      70         Transport.send(message);
      71         
      72     }
      73 }
  • 相关阅读:
    数字式频率计数器的选择
    频率计数器简介
    地铁时钟系统介绍
    铷原子时钟基准介绍
    GPS网络校时服务器厂家的选择?
    低频数字式相位测试仪的原理与使用
    如何选择一套网络时钟系统?
    GNSS卫星信号转发器应用与原理
    GPS卫星原子钟和原子频标介绍
    如何检定铷原子频率标准?
  • 原文地址:https://www.cnblogs.com/h--d/p/6138810.html
Copyright © 2020-2023  润新知