900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > (保姆级教程)使用Java向邮箱发送邮件 验证码

(保姆级教程)使用Java向邮箱发送邮件 验证码

时间:2023-03-12 02:24:03

相关推荐

(保姆级教程)使用Java向邮箱发送邮件 验证码

材料:一个可以登录的邮箱(本文以qq邮箱为例子),Idea和脑子

第一步:登录自己的qq邮箱登录 QQ 邮箱

点击开启服务,会得到一个授权码,就像这个样子

保存一下这个一会要用到

第二步:打开IDEA,创建一个Maven项目(嫌麻烦直接跳最后Idea直接git项目)

git地址:GitHub - Fengzj916/EmailSend

创建好之后创建两个class文件,就像下面这样

Email代码:

import javax.activation.DataHandler;import javax.activation.FileDataSource;import javax.mail.*;import javax.mail.internet.*;import java.util.Iterator;import java.util.LinkedList;import java.util.List;import java.util.Properties;public class Email {private static String defaultSenderName = "";// 默认的发件人用户名,defaultEntity用得到private static String defaultSenderPass = "";// 默认的发件人密码,defaultEntity用得到private static String defaultSmtpHost = "";// 默认的邮件服务器地址,defaultEntity用得到private String smtpHost; // 邮件服务器地址private String sendUserName; // 发件人的用户名private String sendUserPass; // 发件人密码private MimeMessage mimeMsg; // 邮件对象private Session session;private Properties props;private Multipart mp;// 附件添加的组件private List<FileDataSource> files = new LinkedList<FileDataSource>();// 存放附件文件private void init() {if (props == null) {props = System.getProperties();}props.put("mail.transport.protocol", "smtp");// 连接协议props.put("mail.smtp.host", smtpHost);props.put("mail.smtp.port", "465");// 端口号props.put("mail.smtp.socketFactory.port", "465");props.put("mail.smtp.socketFactory.class", ".ssl.SSLSocketFactory");props.put("mail.smtp.auth", "true"); // 需要身份验证props.put("mail.smtp.ssl.enable", "true");//设置是否使用ssl安全连接 ---一般都使用props.put("mail.debug", "true");//设置是否显示debug信息 true 会在控制台显session = Session.getDefaultInstance(props, null);// 置true可以在控制台(console)上看到发送邮件的过程session.setDebug(true);// 用session对象来创建并初始化邮件对象mimeMsg = new MimeMessage(session);// 生成附件组件的实例mp = new MimeMultipart();}private Email(String smtpHost, String sendUserName, String sendUserPass, String to, String cc, String mailSubject, String mailBody,List<String> attachments, String formName) {this.smtpHost = smtpHost;this.sendUserName = sendUserName;this.sendUserPass = sendUserPass;init();setFrom(sendUserName, formName); //设置发送人邮箱账号和发送人名setTo(to); //设置收件人邮箱setCC(cc); //设置抄送setBody(mailBody); //设置内容setSubject(mailSubject); //设置标题if (attachments != null) { //循环添加附件for (String attachment : attachments) {addFileAffix(attachment);}}}/*** 邮件实体** @param smtpHost邮件服务器地址* @param sendUserName 发件邮件地址* @param sendUserPass 发件邮箱密码* @param to 收件人,多个邮箱地址以半角逗号分隔* @param cc 抄送,多个邮箱地址以半角逗号分隔* @param mailSubject 邮件主题* @param mailBody邮件正文* @return* @paramattachmentPath 附件路径*/public static Email entity(String smtpHost, String sendUserName, String sendUserPass, String to, String cc, String mailSubject, String mailBody,List<String> attachments, String fromName) {return new Email(smtpHost, sendUserName, sendUserPass, to, cc, mailSubject, mailBody, attachments, fromName);}/*** 默认邮件实体,用了默认的发送帐号和邮件服务器** @param to收件人,多个邮箱地址以半角逗号分隔* @param cc抄送,多个邮箱地址以半角逗号分隔* @param subject 邮件主题* @param body 邮件正文* @return*/public static Email defaultEntity(String to, String cc, String subject, String body, List<String> attachments, String fromName) {return new Email(defaultSmtpHost, defaultSenderName, defaultSenderPass, to, cc, subject, body, attachments, fromName);}/*** 设置邮件主题** @param mailSubject* @return*/private boolean setSubject(String mailSubject) {try {mimeMsg.setSubject(mailSubject);} catch (Exception e) {return false;}return true;}/*** 设置邮件内容,并设置其为文本格式或HTML文件格式,编码方式为UTF-8** @param mailBody* @return*/private boolean setBody(String mailBody) {try {BodyPart bp = new MimeBodyPart();bp.setContent("<meta http-equiv=Content-Type content=text/html; charset=UTF-8>" + mailBody, "text/html;charset=UTF-8");// 在组件上添加邮件文本mp.addBodyPart(bp);} catch (Exception e) {System.err.println("设置邮件正文时发生错误!" + e);return false;}return true;}/*** 添加一个附件** @param filename 邮件附件的地址,只能是本机地址而不能是网络地址,否则抛出异常* @return*/public boolean addFileAffix(String filename) {try {if (filename != null && filename.length() > 0) {BodyPart bp = new MimeBodyPart();FileDataSource fileds = new FileDataSource(filename);bp.setDataHandler(new DataHandler(fileds));bp.setFileName(MimeUtility.encodeText(fileds.getName(), "utf-8", null)); // 解决附件名称乱码mp.addBodyPart(bp);// 添加附件files.add(fileds);}} catch (Exception e) {System.err.println("增加邮件附件:" + filename + "发生错误!" + e);return false;}return true;}/*** 删除所有附件** @return*/public boolean delFileAffix() {try {FileDataSource fileds = null;for (Iterator<FileDataSource> it = files.iterator(); it.hasNext(); ) {fileds = it.next();if (fileds != null && fileds.getFile() != null) {fileds.getFile().delete();}}} catch (Exception e) {return false;}return true;}/*** 设置发件人地址** @param from 发件人地址* @return*/private boolean setFrom(String from, String name) {try {mimeMsg.setFrom(new InternetAddress(from, name));} catch (Exception e) {return false;}return true;}/*** 设置收件人地址** @return* @paramto收件人的地址*/private boolean setTo(String to) {if (to == null)return false;try {mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));} catch (Exception e) {return false;}return true;}/*** 设置抄送** @param cc* @return*/private boolean setCC(String cc) {if (cc == null) {return false;}try {mimeMsg.setRecipients(, InternetAddress.parse(cc));} catch (Exception e) {return false;}return true;}/*** 发送邮件** @return*/public boolean send() throws Exception {mimeMsg.setContent(mp);mimeMsg.saveChanges();System.out.println("正在发送邮件....");Transport transport = session.getTransport("smtp");// 连接邮件服务器并进行身份验证transport.connect(smtpHost, sendUserName, sendUserPass);// 发送邮件transport.sendMessage(mimeMsg, mimeMsg.getRecipients(Message.RecipientType.TO));System.out.println("发送邮件成功!");transport.close();return true;}}

SendTest代码:

/*** Created by 86157 on /10/8.*/import java.util.Arrays;import java.util.List;/*** @author 86157* @version 1.0* @description: TODO* @date /10/8 22:31*/public class SendTest {public void sendEmail(String name,String body,String to) throws Exception {String userName = "123123@"; // 发件人QQ邮箱String password ="nideshouquanma";//激活POP3/SMTP服务的授权码String smtpHost = ""; // 邮件服务器,这个不用改String fromName="阿里";//发件人名称// 收件人的邮箱账号,多个收件人以半角逗号分隔String cc = ""; //抄送,多个抄送以半角逗号分隔String subject = "阿里|早上好"; // 主题// 附件的路径是文件在你电脑上的绝对路径,多个附件以逗号分开List<String> attachments = Arrays.asList("");Email email = Email.entity(smtpHost, userName, password, to, cc, subject, body, attachments,fromName);email.send(); // 发送!}public static void main(String[] args) throws Exception {//邮件发送组件SendTest emailTest=new SendTest();//使用图片验证码生成的随机文本作为验证邮箱的文本,拼合字符发送邮件String ddUserNickName="abc";//这个是对方名称String boby="阿里,早上好,美好的一天开始了!";//正文内容String ddUserEmail="1047@";//对方邮箱//发送邮件emailTest.sendEmail(ddUserNickName,boby,ddUserEmail);}}

pom依赖:(这个很重要,里面有些可以用不上我都放在里面了)

<?xml version="1.0" encoding="UTF-8"?><project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.gxy</groupId><artifactId>Springboot_Maven191</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><name>Springboot_Maven191 Maven Webapp</name><!-- FIXME change it to the project's website --><url></url><!--属性设置--><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><piler.source>1.8</piler.source><piler.target>1.8</piler.target><kotlin.version>1.2.71</kotlin.version></properties><!--定义公共资源版本--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.12.RELEASE</version></parent><dependencies><!--web开发 所需依赖,springboot相关依赖,不用指定版本,与parent一致包含spring springmvc springboot等jar资源 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--整合jsp--><!-- /artifact/org.apache.tomcat.embed/tomcat-embed-jasper --><dependency><groupId>org.apache.tomcat.embed</groupId><artifactId>tomcat-embed-jasper</artifactId></dependency><!-- /artifact/javax.servlet/jstl --><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId></dependency><!-- Springboot 热部署依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional></dependency><!-- SpringBoot 测试依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><!-- Spring-Mybatis --><!-- /artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.2</version></dependency><!--图片验证码--><!-- /artifact/com.github.penggle/kaptcha --><dependency><groupId>com.github.penggle</groupId><artifactId>kaptcha</artifactId><version>2.3.2</version></dependency><!-- oracle --><dependency><groupId>commons-dbcp</groupId><artifactId>commons-dbcp</artifactId><version>1.4</version></dependency><!-- /artifact/com.oracle/ojdbc6 --><!-- /artifact/com.oracle/ojdbc6 --><dependency><groupId>com.oracle</groupId><artifactId>ojdbc6</artifactId><version>11.2.0.4.0-atlassian-hosted</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.47</version></dependency><!--发邮件--><dependency><groupId>javax.mail</groupId><artifactId>mail</artifactId><version>1.4.1</version></dependency><!-- /artifact/javax.activation/activation --><dependency><groupId>javax.activation</groupId><artifactId>activation</artifactId><version>1.1.1</version></dependency><!-- /artifact/commons-pool/commons-pool --><dependency><groupId>commons-pool</groupId><artifactId>commons-pool</artifactId><version>1.6</version></dependency><!-- /artifact/com.alibaba/fastjson --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.49</version></dependency><!-- /artifact/com.fasterxml.jackson.core/jackson-core --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.9.5</version></dependency><!-- /artifact/com.fasterxml.jackson.core/jackson-annotations --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.9.5</version></dependency><!-- /artifact/com.fasterxml.jackson.core/jackson-databind --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.5</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId></dependency><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.10</version></dependency><!-- /artifact/org.apache.taglibs/taglibs-standard-impl --><dependency><groupId>org.apache.taglibs</groupId><artifactId>taglibs-standard-impl</artifactId><version>1.2.5</version></dependency></dependencies><build><!--idea 识别.xml 指定资源的位置--><resources><resource><!--指定目录--><directory>src/main/java</directory><!--包含在目录下的.properties, .xml文件 都会扫描到--><includes><include>**/*.xml</include></includes><!--不启用过滤器 --><filtering>true</filtering></resource><!--<resource>&lt;!&ndash;指定目录&ndash;&gt;<directory>src/main/resources</directory>&lt;!&ndash;包含在目录下的.properties, .xml文件 都会扫描到&ndash;&gt;<includes><include>**/*.properties</include><include>**/*.xml</include></includes>&lt;!&ndash;不启用过滤器 &ndash;&gt;<filtering>false</filtering></resource>--></resources></build></project>

第三步:测试

运行SendTest类中的main方法,效果如下

可以根据自己需要改为发送验证码,验证邮箱等操作,有问题请留意看到会回

Idea直接git项目:(选学)

打开idea

git地址:/Fengzj916/EmailSend

大功告成,比那个方便多了

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。