使用java底层实现邮件的发送(含测试,源码)

简介: 使用java底层实现邮件的发送(含测试,源码)

    直接上代码:3个类,两个主要的类,一个测试类:

  主类(Mail):

/**  
* @Title: Mail.java
* @Package org.service.impl
* @Description: TODO该方法的主要作用:
* @author A18ccms A18ccms_gmail_com  
* @date 2017-5-30 下午10:20:35
* @version V1.0  
*/
package org.service.impl;
import java.util.Date;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
 /**   
 *    
 * 项目名称:spring_Schop8   
 * 类名称:Mail   
 * 类描述:   不用spring实现邮件发送
 * 创建人:Mu Xiongxiong  
 * 创建时间:2017-5-30 下午10:20:35   
 * 修改人:Mu Xiongxiong   
 * 修改时间:2017-5-30 下午10:20:35   
 * 修改备注:   
 * @version    
 *    
 */
public class Mail {
  
  private String mailServer,from ,to , mailSubject,mailContent,username,password;
  public Mail(String mailServer, String from, String to, String mailSubject,
      String mailContent, String username, String password) {
    this.mailServer = mailServer;
    this.from = from;
    this.to = to;
    this.mailSubject = mailSubject;
    this.mailContent = mailContent;
    this.username = username;
    this.password = password;
  }
  public Mail() {
    username = "tina";
    password = "123"; 
    mailServer = "mail.com";
    from  = "tina@mail.com";
    to  = "jerry@mail.com";
    mailSubject = "问好";
    mailContent = "好久没见,最近可好!";
    
  }
  
  public void send(){
    //设置服务器
    Properties prop = System.getProperties();
    prop.put("mail.smtp.host", mailServer);
    prop.put("mail.smtp.auth", "true");
    //产生Session服务
    EmailAuthenticator mailauth = new EmailAuthenticator(username, password);
    Session mailSession = Session.getInstance(prop,(Authenticator)mailauth);
    //封装message对象
    Message message = new MimeMessage(mailSession);
    try {
      message.setFrom(new InternetAddress(from));    //设置发送人
      message.setRecipient(Message.RecipientType.TO, new InternetAddress(to)); //设置主题
      message.setSubject(mailSubject);                                      //设置标题
      message.setContent(mailContent,"text/html;charset=utf-8");            //设置内容
      message.setSentDate(new Date());                                      //设置日期
      //和粗昂就爱你Transport实例
      Transport tran = mailSession.getTransport("smtp");
      tran.send(message, message.getAllRecipients());
      tran.close();
    } catch (AddressException e) {
      // TODO 异常执行块!
      e.printStackTrace();
    } catch (MessagingException e) {
      // TODO 异常执行块!
      e.printStackTrace();
    }    //
    
  }
  
  
}


第二个主类(EmailAuthenticator):

package org.service.impl;
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
import org.hibernate.validator.constraints.Email;
public class EmailAuthenticator extends Authenticator {
  private String username=null;
  private String userpass = null;
  
  
  
  public EmailAuthenticator(String username, String userpass) {
    super();
    this.username = username;
    this.userpass = userpass;
  }
  public  PasswordAuthentication getPasswordAuthentication(){
    return new PasswordAuthentication(username, userpass);
  }
  
  
  public String getUsername() {
    return username;
  }
  public void setUsername(String username) {
    this.username = username;
  }
  public String getUserpass() {
    return userpass;
  }
  public void setUserpass(String userpass) {
    this.userpass = userpass;
  }
  
}


测试类:

/**
   * 
  * @Title: testMail1
  * @Description: 该方法的主要作用:java实现底层的邮件发送
  * @param   设定文件  
  * @return  返回类型:void   
  * @throws
   */
  @Test
  public void testMail1(){
    Mail mail = new Mail();
    mail.send();
    System.out.println("发送成功");
  }


源码上完了,再看一下运行的结果吧:


可以看到发送人,发送时间,还有发送内容!已经发送成功!

相关文章
|
11天前
|
XML Java 编译器
Java注解的底层源码剖析与技术认识
Java注解(Annotation)是Java 5引入的一种新特性,它提供了一种在代码中添加元数据(Metadata)的方式。注解本身并不是代码的一部分,它们不会直接影响代码的执行,但可以在编译、类加载和运行时被读取和处理。注解为开发者提供了一种以非侵入性的方式为代码提供额外信息的手段,这些信息可以用于生成文档、编译时检查、运行时处理等。
45 7
|
23天前
|
数据采集 人工智能 Java
Java产科专科电子病历系统源码
产科专科电子病历系统,全结构化设计,实现产科专科电子病历与院内HIS、LIS、PACS信息系统、区域妇幼信息平台的三级互联互通,系统由门诊系统、住院系统、数据统计模块三部分组成,它管理了孕妇从怀孕开始到生产结束42天一系列医院保健服务信息。
28 4
|
29天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
67 2
|
3天前
|
存储 JavaScript 前端开发
基于 SpringBoot 和 Vue 开发校园点餐订餐外卖跑腿Java源码
一个非常实用的校园外卖系统,基于 SpringBoot 和 Vue 的开发。这一系统源于黑马的外卖案例项目 经过站长的进一步改进和优化,提供了更丰富的功能和更高的可用性。 这个项目的架构设计非常有趣。虽然它采用了SpringBoot和Vue的组合,但并不是一个完全分离的项目。 前端视图通过JS的方式引入了Vue和Element UI,既能利用Vue的快速开发优势,
39 13
|
17天前
|
缓存 监控 Java
Java线程池提交任务流程底层源码与源码解析
【11月更文挑战第30天】嘿,各位技术爱好者们,今天咱们来聊聊Java线程池提交任务的底层源码与源码解析。作为一个资深的Java开发者,我相信你一定对线程池并不陌生。线程池作为并发编程中的一大利器,其重要性不言而喻。今天,我将以对话的方式,带你一步步深入线程池的奥秘,从概述到功能点,再到背景和业务点,最后到底层原理和示例,让你对线程池有一个全新的认识。
47 12
|
11天前
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
|
13天前
|
人工智能 移动开发 安全
家政上门系统用户端、阿姨端源码,java家政管理平台源码
家政上门系统基于互联网技术,整合大数据分析、AI算法和现代通信技术,提供便捷高效的家政服务。涵盖保洁、月嫂、烹饪等多元化服务,支持多终端访问,具备智能匹配、在线支付、订单管理等功能,确保服务透明、安全,适用于家庭生活的各种需求场景,推动家政市场规范化发展。
|
1月前
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
58 3
|
2月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
73 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
3月前
|
移动开发 JSON Java
Jmeter实现WebSocket协议的接口测试方法
WebSocket协议是HTML5的一种新协议,实现了浏览器与服务器之间的全双工通信。通过简单的握手动作,双方可直接传输数据。其优势包括极小的头部开销和服务器推送功能。使用JMeter进行WebSocket接口和性能测试时,需安装特定插件并配置相关参数,如服务器地址、端口号等,还可通过CSV文件实现参数化,以满足不同测试需求。
258 7
Jmeter实现WebSocket协议的接口测试方法