使用javamail发送包含八位验证码的邮件(完美解决中文乱码问题)

1.     发送邮件生成验证码的类

import javax.activation.DataHandler;

import javax.activation.FileDataSource;

import javax.mail.Message;

import javax.mail.MessagingException;

import javax.mail.Multipart;

import javax.mail.Session;

import javax.mail.Transport;

import javax.mail.internet.InternetAddress;

import javax.mail.internet.MimeBodyPart;

import javax.mail.internet.MimeMessage;

import javax.mail.internet.MimeMultipart;

 

import java.util.Date;

import java.util.Properties;

import java.util.UUID;

 

public class mailRegister {

 

       //生成随机验证码

       publicstatic String[] chars = new String[] { "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", "0", "1","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" }; 

      

       //发件人的 邮箱 和 密码(替换为自己的邮箱和密码)

       //PS: 某些邮箱服务器为了增加邮箱本身密码的安全性,给 SMTP 客户端设置了独立密码(有的邮箱称为“授权码”),

       //对于开启了独立密码的邮箱, 这里的邮箱密码必需使用这个独立密码(授权码)。

       publicstatic String myEmailAccount = "XXXXXXXX@163.com";

       publicstatic String myEmailPassword = "XXXXXXXX";

 

       //发件人邮箱的 SMTP 服务器地址, 必须准确, 不同邮件服务器地址不同, 一般(只是一般, 绝非绝对)格式为:smtp.xxx.com

       //网易163邮箱的 SMTP 服务器地址为: smtp.163.com

       publicstatic String myEmailSMTPHost = "smtp.163.com";

 

       publicboolean SendMail(String receiveMailAccount) throws Exception {

              //1. 创建参数配置, 用于连接邮件服务器的参数配置

              Propertiesprops = new Properties(); // 参数配置

              props.setProperty("mail.transport.protocol","smtp"); // 使用的协议(JavaMail规范要求)

              props.setProperty("mail.smtp.host",myEmailSMTPHost); // 发件人的邮箱的 SMTP

                                                                                                                //服务器地址

              props.setProperty("mail.smtp.auth","true"); // 需要请求认证

             

              //2. 根据配置创建会话对象, 用于和邮件服务器交互

              Sessionsession = Session.getDefaultInstance(props);

              session.setDebug(true);// 设置为debug模式, 可以查看详细的发送 log

 

              //3. 创建一封邮件

              /**

               * 创建一封只包含文本的简单邮件

               *

               * @param session

               *           和服务器交互的会话

               * @param sendMail

               *           发件人邮箱

               * @param receiveMail

               *           收件人邮箱

               * @return

               * @throws Exception

               */

              //  创建一封邮件

              MimeMessagemessage = new MimeMessage(session);

 

              //  From: 发件人

              message.setFrom(newInternetAddress(myEmailAccount, "中文测试","UTF-8"));

 

              //  To: 收件人(可以增加多个收件人、抄送、密送)

              message.setRecipient(MimeMessage.RecipientType.TO,new InternetAddress(receiveMailAccount, "亲爱的用户","UTF-8"));

 

              //  Subject: 邮件主题

              message.setSubject("验证码", "UTF-8");

 

              //  Content: 邮件正文(可以使用html标签)

              StringRandomCode=generateShortUuid();

             

      

              this.setMessageContent(message,"",RandomCode);

             

              message.setSentDate(newDate());

 

              //  保存设置

              message.saveChanges();

 

              //4. 根据 Session 获取邮件传输对象

              Transporttransport = session.getTransport();

 

              //5. 使用 邮箱账号 和 密码 连接邮件服务器, 这里认证的邮箱必须与 message 中的发件人邮箱一致, 否则报错

             

              transport.connect(myEmailAccount,myEmailPassword);

 

              //6. 发送邮件, 发到所有的收件地址,message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人,

              //抄送人, 密送人

              transport.sendMessage(message,message.getAllRecipients());

             

              //8. 关闭连接

              transport.close();

              returntrue;

       }

 

       /*

       @Description:生成八位验证码

       */

       publicstatic String generateShortUuid() { 

           StringBuffer shortBuffer = newStringBuffer(); 

           String uuid =UUID.randomUUID().toString().replace("-", ""); 

           for (int i = 0; i < 8; i++) { 

               String str = uuid.substring(i * 4, i *4 + 4); 

               int x = Integer.parseInt(str, 16); 

               shortBuffer.append(chars[x %0x3E]); 

           } 

           return shortBuffer.toString(); 

       }

       /*

       @解决邮件正文乱码问题

       */

       publicvoid setMessageContent(Message message, String ContentType,String RandomCode)throws MessagingException {

              StringContent="尊敬的用户,您好!您的验证码是: "+RandomCode;

              MimeMultipartmmt = new MimeMultipart();

              MimeBodyPartmbp = new MimeBodyPart();

 

              if(ContentType == null || ContentType.equals("")) // ContentType为编码类型,如GBK等

 

                     mbp.setText(Content);// 由JavaMail来决定编码

 

              else

 

                     mbp.setContent(Content,ContentType); // 指定编码格式

              mmt.addBodyPart(mbp);

              message.setContent(mmt);

       }

}

 

2.     测试类

 

publicclass TestMail {

public static void main(String args[]){

        //收件人信息

        StringreceiveMailAccount="XXXXXXXX@qq.com";

        mailRegister mr=new mailRegister();

        try {

               System.out.println(mr.SendMail(receiveMailAccount));

        } catch (Exception e) {

               // TODO Auto-generated catchblock

               e.printStackTrace();

        }

}

}

欢迎扫描二维码关注微信公众号 深度学习与数学   [每天获取免费的大数据、AI等相关的学习资源、经典和最新的深度学习相关的论文研读,算法和其他互联网技能的学习,概率论、线性代数等高等数学知识的回顾]
在这里插入图片描述

javamail1.4.7

原文链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值