邮件(email)

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
云解析DNS,个人版 1个月
简介: 邮件–发送邮件1.准备工作1.1.生成查长度为4的验证码

邮件–发送邮件


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已说明。
}


目录
相关文章
|
3月前
|
C#
C# WinForm发送Email邮件
C# WinForm发送Email邮件
C# WinForm发送Email邮件
|
1月前
|
API Python
​不用SMTP实现联系表单提交后发送邮件到指定邮箱
构建网站时,联系表单可通过邮件API(如SendGrid、Mailgun、Amazon SES)或第三方自动化服务(Zapier、Integromat)无需SMTP发送邮件。使用API服务,如SendGrid的Python示例,可直接集成到表单提交流程。第三方自动化服务允许表单提交触发邮件发送。后端脚本,如PHPMailer,也可用于邮件发送。这些方法简化了邮件发送并提高了效率。AokSend提供触发式接口和独立IP的高触达发信服务。
|
1月前
|
JavaScript API PHP
不用SMTP实现联系表单提交后发送邮件到指定邮箱
构建网站时,联系表单可通过邮件API(如SendGrid、Mailgun、Amazon SES)或第三方自动化服务(Zapier、Integromat)无需SMTP发送邮件。这些服务提供API接口和自动化工作流程,简化邮件发送。例如,使用SendGrid API在Python中发送邮件涉及注册、获取API密钥并编写发送邮件的代码。同样,Zapier可作为表单提交的触发器,自动发送邮件。此外,后端脚本(如PHPMailer)也能实现这一功能,但需编写处理SMTP的代码。选择适合的方法能优化邮件发送流程。
|
10月前
|
C#
关于用户 email 邮件地址是否允许有加号的问题
在电子邮件地址中使用加号 (+) 非常有用。Gmail 以及两个常见的邮件服务器系统 sendmail 和 CommuniGate Pro 将发送地址为“user+tag@mumble.dom”的邮件,就好像它的地址是“user@mumble.dom”一样。 然后,电子邮件地址的“+标签”部分可用于归档邮件和筛选邮件。
|
存储 Java API
JavaMail 使用POP3/SMTP服务发送QQ邮件
JavaMail 使用POP3/SMTP服务发送QQ邮件
489 0
JavaMail 使用POP3/SMTP服务发送QQ邮件
Email - 搭建自定义邮件服务器
Email - 搭建自定义邮件服务器
286 0
Email - 搭建自定义邮件服务器
|
数据采集 Python
python通过163邮箱发送email邮件
python通过163邮箱发送email邮件
217 0
谋杀 Email
作为新来者,凭着技术的进步、企业提升效率的需求、大厂们留下的中小客户市场切口,Zoom、Slack们高歌猛进,抢夺“Email们”的市场,在“WinTel大厂”们没能涉足的市场切下一块蛋糕。但在未来,当深入到大厂腹地,深入大型客户市场,新老企服软件公司的一战似乎不可避免。面对这些老玩家,他们能成功么
233 0
JavaUtil_09_email_使用 commons-email 发送邮件
  二、参考资料 1.【commons】邮件发送工具——commons-email
1056 0
|
关系型数据库 MySQL 测试技术
email
12582 0