邮件(email)

邮件–发送邮件

1.准备工作

1.1.生成查长度为4的验证码
package com.Li.bc;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

import javax.naming.spi.DirStateFactory.Result;

/**
 * @desc 产生验证码的工具类
 * @author Li Ya Hui 
 * @time   2021年6月17日 下午2:43:23
 */
public class CodeUtils {
	public static void main(String[] args) {
		createCode();
	}
	/**
	 * @desc 1.产生长度为4位的验证码
	 * @return	
	 */
	public static String createCode() 
	{
		//创建一个字符串数组
		String beforeShuffle [] = new String[] { "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" }; 
		//字符串数组转成list
		List<String> list = Arrays.asList(beforeShuffle);
		//创建一个线程安全字符串
		StringBuilder sb = new StringBuilder();
		//将一个list里的数据进行洗牌 也就是乱序
		Collections.shuffle(list);
		//遍历添加到字符串中
		for (String s : list) {
			sb.append(s);
		}
		//将stringbuilder字符串转字符
		String afterShuffle = sb.toString();
		//将字符串截取第6个到第9个  6,7,8,9
		String result = afterShuffle.substring(5, 9);
		System.out.println(result);
		return result;
	}
}
1.2.日期处理工具类
package com.Li.bc.dates;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * @desc   日期处理的工具类
 * @author Li Ya Hui 
 * @time   2021年6月17日 下午3:42:12
 */
public class DateUtils {
	public static void main(String[] args) throws ParseException {
		//生日日期
		String dateStr = "2019-12-11";
		
		Date now = new Date();
		
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		String dateStr2 = format.format(now);
		
		System.out.println(dateStr2);
		System.out.println(dateStr);
		
		int day = differentDaysByMillionSeconds(dateStr, dateStr2);
		System.out.println(day);
		
	}
	
	public static int differentDaysByMillionSeconds(String dateStr , String dateStr2) throws ParseException 
	{
		//1.初始化SimpleDateFormat 类
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		
		//2.将传入的日期准备为日期类型
		Date fDate = (Date) format.parse(dateStr);
		Date oDate = (Date) format.parse(dateStr2);
		
		//初始化日历工具类
		Calendar calendar = Calendar.getInstance();
		
		//4.计算两个日期相差的天数
		calendar.setTime(fDate);
		//计算出第一个日期的天数
		int day1 = calendar.get(Calendar.DAY_OF_YEAR);
		
		calendar.setTime(oDate);
		//计算出第二个日期的天数
		int day2 = calendar.get(Calendar.DAY_OF_YEAR);
		return day2 - day1;
	}
}
1.3.properties配置文件处理类
  1. 创建一个config文件夹,且该文件夹与src是平级的,且权限也是与src的级别一样(要构建权限级别),在该目录下创建mail.properties

  2. 在mail.properties写入一些数据
    emailFrom=java01_plus@163.com
    emialFromAuthorization=wyh2019
    emailRole=XX管理系統

PS:在mail,properties中要对该文件设定编码集为UTF-8,且不要再里面有过多的空格和换行

package com.Li.utils;
/**
 * @desc   解析属性配置文件的工具类
 * @desc   解析属性配置文件(mail.properties)
 * @author Li Ya Hui 
 * @time   2021年6月17日 下午4:27:08
 */

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;

public class PropertuUtils {
	
	/*
	 * public static void main(String[] args) throws IOException {
	 * 
	 * String propertyPath = "mail.properties"; Map<String, Object> map =
	 * getInfoFromProperties(propertyPath); System.out.println(map); }
	 */
	/**
	 * @throws IOException 
	 * @desc   1.解析获取Mail.properties中的数据
	 */
	public static Map<String, Object> getInfoFromProperties( String propertyPath) throws IOException
	{
		//1.创建一个map用与装入解析获取到的数据
		Map<String, Object> map = new HashMap<String, Object>();
		
		//2.初始化properties
		Properties props = new Properties();
		
		//3.解析:将mail.properties文件转变为输入流对象  这个获取文件的区别在去可以去class路径里获取属性文件	
		InputStream inputStream = PropertuUtils.class.getClassLoader().getResourceAsStream(propertyPath);
		
		//4.将流对象读取到缓冲区中
		BufferedReader buffereReader = new BufferedReader(new InputStreamReader( inputStream , "utf-8"));
		
		//5.加载缓存区读对象
		props.load(buffereReader);
		
		//6.读取并得到一个迭代器
		Iterator<String> it = props.stringPropertyNames().iterator();
		
		//7.将得到的值变为map形式
		while (it.hasNext()) {
			String key = (String) it.next();
			map.put(key, props.getProperty(key));
		}
		return map;
	}
}
1.4.可以执行简单发生邮件的 邮件工具类
package com.Li.bc.email;

import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.Properties;

import javax.mail.Message.RecipientType;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;


/**
 * @desc 可以执行简单发生邮件的 邮件工具类
 * @author Li Ya Hui 
 * @time   2021年6月17日 下午8:27:08
 */
public class EmailUtils {

	//自己的邮箱
	public static String sendEmailAccount = "liyahui0702@163.com" ;
	//邮箱授权码
	public static String sendEmailPwd = "CNMBLTOESPBQLZEM" ; 
	//收件人邮箱
	public static String receiveMailAccount = "969607885@qq.com";//
	
	
	public static void main(String[] args) throws UnsupportedEncodingException, MessagingException {
		createMimeMessage( sendEmailAccount , receiveMailAccount );
	}
	
	/**
	 * @throws MessagingException 
	 * @throws UnsupportedEncodingException 
	 * @desc 1. 创建一封简单的邮件
	 */
	public static void createMimeMessage( String sendMail , String receviceMail ) throws MessagingException, UnsupportedEncodingException 
	{
		//1.创建参数配置, 用于连接邮件服务器的参数配置
		Properties props = new Properties();
        props.setProperty("mail.transport.protocol","smtp");// 使用的协议(JavaMail规范要求)
        props.setProperty("mail.smtp.host","smtp.163.com"); // 发件人的邮箱的 SMTP 服务器地址
        props.setProperty("mail.smtp.auth", "true");    // 需要请求认证
        
        //2.创建session会话对象 根据配置创建会话对象, 用于和邮件服务器交互
        Session session = Session.getInstance(props);
        
        //开启debug调试的模式,可以打印出发送的log
        session.setDebug(true);
        
        //3.创建一封邮件	
        MimeMessage message = new MimeMessage(session);
        
        //4.设定发件人			//address 子类   发送者邮箱     发送者昵称     内容编码
        message.setFrom( new InternetAddress(sendMail, "发送者的昵称", "utf-8"));
        
        //5.设置收件人To: 收件人(可以增加多个收件人、抄送、密送)    CC:抄送人 , BCC:密送
        message.setRecipient(RecipientType.TO , new InternetAddress( receviceMail , "接收人" , "utf-8"));
        
        //6. Subject: 邮件主题(标题有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改标题)
        message.setSubject("这是我的第一封邮件");
        
        //7.Content: 邮件正文(可以使用html标签)(内容有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改发送内容)
        message.setContent("正文内容:Hello Email", "text/html;charset=utf-8");
        
        //8.设置发件时间
        message.setSentDate(new Date());
        
        //9.保存设置
        message.saveChanges();
        
        //10.根据 Session 获取邮件传输对象
        Transport transport = session.getTransport();
        
        //11.  链接上SMTP邮件服务器  自己的邮箱       邮箱授权码
        transport.connect(sendEmailAccount,sendEmailPwd);
        
        //12.发送邮件		 	  发送信息     发送人,所有收件人 发送邮件, 发到所有的收件地址, message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人
        transport.sendMessage(message, message.getAllRecipients());
        
        System.out.println("发送成功");
        //13.关闭连接
        transport.close();
	} 
	// 5. 使用//开启debug调试的模式,可以打印出发送的log
    //session.setDebug(true);
    //
    //    PS_01: 成败的判断关键在此一句, 如果连接服务器失败, 都会在控制台输出相应失败原因的 log,
    //           仔细查看失败原因, 有些邮箱服务器会返回错误码或查看错误类型的链接, 根据给出的错误
    //           类型到对应邮件服务器的帮助网站上查看具体失败原因。
    //
    //    PS_02: 连接失败的原因通常为以下几点, 仔细检查代码:
    //           (1) 邮箱没有开启 SMTP 服务;
    //           (2) 邮箱密码错误, 例如某些邮箱开启了独立密码;
    //           (3) 邮箱服务器要求必须要使用 SSL 安全连接;
    //           (4) 请求过于频繁或其他原因, 被邮件服务器拒绝服务;
    //           (5) 如果以上几点都确定无误, 到邮件服务器网站查找帮助。
    //
    //    PS_03: 仔细看log, 认真看log, 看懂log, 错误原因都在log已说明。
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DataPulse-辉常努腻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值