java实现发送邮件功能

java实现发送邮件功能java实现发送邮件功能电子邮件开发在后台中是普遍存在的现象和功能,比如用户注册,系统自动发送一封电子邮件到用户邮箱;再比如密码找回,系统会自动把密码发送到用户邮箱;……等等,所以作为一名java程序员,还是有必要学会这项技能的。我是一名安卓开发人员,我们都知道在客户端和后台交互数据的时候用到了Http协议,那么相应的,邮箱传输也有自己的一套协议,如SMTP,POP3,IMAP。在原生的javaJ

大家好,又见面了,我是你们的朋友全栈君。

##java实现发送邮件功能

####电子邮件开发在后台中是普遍存在的现象和功能,比如用户注册,系统自动发送一封电子邮件到用户邮箱;再比如密码找回,系统会自动把密码发送到用户邮箱;…等等,所以作为一名java程序员,还是有必要学会这项技能的。

####我是一名安卓开发人员,我们都知道在客户端和后台交互数据的时候用到了Http协议,那么相应的,邮箱传输也有自己的一套协议,如SMTP,POP3,IMAP。在原生的java JDK中官方为我们封装了Http协议,叫URLConnection,自然的官方也封装了邮件的专属协议,只不过,这个在原生的java JDK中我们找不到,因为它需要我们另外下载。

####我们到oracle官网去下载相应的jar包,地址:http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-eeplat-419426.html#javamail-1.4.5-oth-JPR

####目前JavaMail的最新版本是1.1.7,我们下载下来如下:

在这里插入图片描述

####mail.jar就是我们需要的,另外还有文档和官方demo,这里我们就不做过多了解,直接开始本demo。

####这里我直接在现有项目中使用JUnit Test测试,大家可以新建普通java项目练习。

import java.util.Date;
import java.util.Properties;
import javax.mail.Message.RecipientType;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import org.junit.Test;

public class EmailTest {

	public static final String SMTPSERVER = "smtp.163.com";
	public static final String SMTPPORT = "465";
	public static final String ACCOUT = "******@163.com";
	public static final String PWD = "*******";

	@Test
	public void testSendEmail() throws Exception {
		
		// 创建邮件配置
		Properties props = new Properties();
		props.setProperty("mail.transport.protocol", "smtp"); // 使用的协议(JavaMail规范要求)
		props.setProperty("mail.smtp.host", SMTPSERVER); // 发件人的邮箱的 SMTP 服务器地址
		props.setProperty("mail.smtp.port", SMTPPORT); 
		props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
		props.setProperty("mail.smtp.auth", "true"); // 需要请求认证
		props.setProperty("mail.smtp.ssl.enable", "true");// 开启ssl
		

		// 根据邮件配置创建会话,注意session别导错包
		Session session = Session.getDefaultInstance(props);
		// 开启debug模式,可以看到更多详细的输入日志
		session.setDebug(true);
		//创建邮件
		MimeMessage message = createEmail(session);
		//获取传输通道
		Transport transport = session.getTransport();
		transport.connect(SMTPSERVER,ACCOUT, PWD);
		//连接,并发送邮件
		transport.sendMessage(message, message.getAllRecipients());
		transport.close();
		
	}

	
	public MimeMessage createEmail(Session session) throws Exception {
		// 根据会话创建邮件
		MimeMessage msg = new MimeMessage(session);
		// address邮件地址, personal邮件昵称, charset编码方式
		InternetAddress fromAddress = new InternetAddress(ACCOUT,
				"kimi", "utf-8");
		// 设置发送邮件方
		msg.setFrom(fromAddress);
		InternetAddress receiveAddress = new InternetAddress(
				"********@qq.com", "test", "utf-8");
		// 设置邮件接收方
		msg.setRecipient(RecipientType.TO, receiveAddress);
		// 设置邮件标题
		msg.setSubject("测试标题", "utf-8");
		msg.setText("我是个程序员,一天我坐在路边一边喝水一边苦苦检查程序。 这时一个乞丐在我边上坐下了,开始要饭,我觉得可怜,就给了他1块钱。 然后接着调试程序。他可能生意不好,就无聊的看看我在干什么,然后过了一会,他缓缓地指着我的屏幕说,这里少了个分号");
		// 设置显示的发件时间
		msg.setSentDate(new Date());
		// 保存设置
		msg.saveChanges();
		return msg;
	}
}

代码量并不是很多,然后JUnit Test Run:

在这里插入图片描述

邮件确实收到了,当然这里面的吭还是有的,这里根据我遇到的错误,简单说下:

错误如: DEBUG SMTP: Attempt to authenticate using mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM XOAUTH2

####登录失败,这个原因很多。首先我们要保证发送方的邮件,POP3/SMTP服务和IMAP/SMTP服务一定要开启,否则发送失败,拿网易邮箱来说,在如下地方打开此服务:

在这里插入图片描述

####如果以上确认打开了,接下来我们就要确认密码是否正确,因为我的163邮箱开启了客户端授权密码,所以这里一定要注意,这里必须填写客户端授权密码才可以,否则也会出现如上错误。

####我碰到的问题就上面的一个,如果有问题或者意见的朋友,欢迎大家随时交流。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/146617.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 顺丰科技QT面试题「建议收藏」

    顺丰科技QT面试题「建议收藏」自定义控件:应该做过吧?能举几个例子吗?还有其他的吗?你觉得自定义控件的方法主要是哪些?答:从外观设计上:QSS、继承绘制函数重绘、继承QStyle相关类重绘、组合拼装等等从功能行为上:重写事件函数、添加或者修改信号和槽等等QSS:QSS平时使用的多吗?能举几个例子吗?都是如何使用,能说说吗?答:1.将QSS统一写在一个文件中,通过程序给主窗口加载;2.写成一个字符串中,通过程序给主窗口加载;3.需要使用的地方,写一个字符串,加载给对象;4.QTDesigner中填写;事件机制:

  • Mac 下ll命令 command not found

    Mac 下ll命令 command not found

  • putty 报server unexpectedly closed network connection错误

    putty 报server unexpectedly closed network connection错误由于IP变了,再用putty访问组内的服务器时,竟然总是出错,报serverunexpectedlyclosednetworkconnection错误。查了下防火墙设置,原来里面指定了allow的IP端,真的是晕死了,改好,一试,果然OK了

    2022年10月20日
  • vue报错:Navigation cancelled from “/userIndex“ to “/blank/login“ with a new navigati

    vue报错:Navigation cancelled from “/userIndex“ to “/blank/login“ with a new navigati最近在弄一个vue项目时碰到这么一个报错,查了下资料,记录一下:这个错误是vue-router的内部错误,是因为没有进行catch处理,导致的编程式导航跳转问题,往同一个地址跳转时,会报错。解决方法如下:在路由文件中进行配置:router/index.jsimportVuefrom’vue’importRouterfrom’vue-router’Vue.use(Router)//解决报错constoriginalPush=Router.prototype.pushco

  • Python运维常用的脚本,提高工作效率就靠它了

    Python运维常用的脚本,提高工作效率就靠它了前言用Python做运维的小伙伴肯定会进行重复的工作,这个时候脚本的重要性就体现出来了一个好的脚本工具可以帮你省去很多重复的工作,创造更大的价值下面小编就带你们看看Python运维最常用的脚本吧清除指定redis缓存#!/usr/bin/envpython3#-*-coding:utf-8-*-#@Time:2018-12-2015:19…

  • 通达OA工作流-流程设计

    通达OA工作流-流程设计2.2    流程设计  2.2.1    流程分类  在工作流工作流设置分类设置可以为系统添加流程分类。流程分类更方便了流程的管理,把不同性质的流程放在不同的分类下,也方便了流程的查找。 同时根据流程分类的所属部门,实现了流程分类按部门进行独立管理的目的。

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号