想要做一个java发送邮件小功能。

使用的maven搭建的项目。
<!-- https://mvnrepository.com/artifact/javax.mail/mail -->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>

如果要手动引入jar包,则需要引入两个jar包;

以下是我的代码:
public class Mail {
//发送人信息
public static String myEmailAccount = "。。。。@163.com"; //邮箱
public static String myEmailPassword = "。。。。。"; //密码 //发送邮箱信息
//发送人邮箱的SMTP服务器地址,必须准确,不同邮箱服务器地址一般不同,
public static String toEmailSMTPHost = "smtp.163.com"; //网易邮箱
public static String toEmailAccount = "。。。。。@163.com"; //收件人邮箱 //主函数
public static void main(String[] args) throws Exception { //1.创建参数配置,用于连接邮件服务器
Properties props = new Properties();
props.setProperty("mail.transport.protocol","smtp");//声明使用协议
props.setProperty("mail.smtp.host",toEmailSMTPHost);//确定邮箱的服务器地址
props.setProperty("mail.smtp.auth","true");//需要请求验证 /**
* PS 某些邮箱服务器要求SMTP连接需要使用SSL安全认证,为了提高安全性,邮箱支持
* SSL连接,也可以自己开启;如果服务器无法连接右键服务器,仔细查看控制台打印的log
* **/ /**
* 下面代码为打开SSL连接的SMTP服务,
* SMTP 服务器的端口 (非 SSL 连接的端口一般默认为 25, 可以不添加, 如果开启了 SSL 连接,
* 需要改为对应邮箱的 SMTP 服务器的端口, 具体可查看对应邮箱服务的帮助,QQ邮箱的SMTP(SLL)端口为465或587, 其他邮箱自行去查看)
* final String smtpPort = "465";
props.setProperty("mail.smtp.port",smtpPort);
props.setProperty("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
props.setProperty("mail.smtp.socketFactory.fallback","false");
props.setProperty("mail.smtp.socketFactory.port",smtpPort);
**/ //2.根据配置创建会话对象,用于和邮件服务器交互
Session session = Session.getDefaultInstance(props);
session.setDebug(true); //3.创建一封邮件
MimeMessage message = createMimeMessage(session,myEmailAccount,toEmailAccount); //4.根据Session 获取邮件传输对象
Transport transport = session.getTransport(); /**
* 5. 使用邮箱账号 和 密码 连接右键服务器,这里认证的邮箱必须与 message 中的发件人邮箱一致,否则报错
* PS——01:成败的判断关键在此一句,如果连接服务器失败,都会在控制台输出相应失败原因的log
* 仔细查看失败原因,有些邮箱服务器会返回错误码或者查看错误类型的连接,根据给出的错误类型对应的邮件服务器
* 的帮助网站上查看具体失败原因
*
* PS——02:连接失败的原因通常有几下几点,仔细检查代码:
* 1.邮箱没有开启SMTP服务
* 2.邮箱密码错误,例如某些邮箱开启了独立密码;
* 3.邮箱服务器要求必须要使用SSL安全连接;
* 4.请求过于频繁或其他原因,被邮件服务器拒绝服务;
*
*
* PS--03:仔细看log,认真看log,看懂log,错误原因都在log已说明。
*
*/
transport.connect(myEmailAccount,myEmailPassword); //6. 发送邮件,发送所有的收件地址,message.getAllRecipients()获取到的是在创建邮件对象添加的所有收件人,抄送人,密送人
transport.sendMessage(message,message.getAllRecipients()); //7. 关闭连接
transport.close();
} /**
* 创建一封只包含文本的简单邮件
* @param session 和服务器交互的会话
* @param sendMail 发件人邮箱
* @param toEmailAccount 收件人邮箱
*
* **/ public static MimeMessage createMimeMessage(Session session, String sendMail,
String toEmailAccount)throws Exception {
//1.创建一封邮件
MimeMessage message = new MimeMessage(session); //2. From 发件人
message.setFrom(new InternetAddress(sendMail,"哈哈","UTF-8")); //3 To 收件人(可以增加多个收件人,抄送,密送)
message.setRecipient(MimeMessage.RecipientType.TO,new InternetAddress(toEmailAccount,
"美女","UTF-8")); //4.Subject:邮件主题
message.setSubject("来,聊聊天","UTF-8"); //5. Content: 邮件正文(可以使用html标签)
message.setContent("何冰玲美女,今晚没下雨哈","text/html;charset=UTF-8"); // 6.设置发件时间
message.setSentDate(new Date()); //7. 保存设置
message.saveChanges(); return message;
}
}
期间产生的错误:
1.错误码550: 

步骤

1. 登录自己的163邮箱,注意,要用你的应用程序中设置的邮箱地址去登录。

2. 在主菜单栏上的“设置”子菜单里面,选择POP3/SMTP/IAMP菜单。

3. 若没有开启“客户端授权密码”,则选择将其开启。开启后,会给你生成一个应用授权密码。要用这个生成的密码作为java mail API发送邮件的认证密码,如此,才能解除500密码,若用邮箱的登录密码去设置这个认证密码,会遇到500的错误。下图是开启“客户端授权密码”功能后的截图:

 
设置上面之后会产生535错误代码:原因如下:
//发送人信息
public static String myEmailAccount = "。。。。。。; //邮箱
public static String myEmailPassword = "。。。。。。; //密码

这里的密码不是你设置的邮箱登陆密码,而是客户端授权密码。

Java基础——javaMail:使用心得的更多相关文章

  1. Java基础学习心得笔记

    对于很多只会C语言的初学者而言,面对java基础语法学习,反而感觉很难,其实其中最大的问题不是语法难,而是一种编程思想的转变.面向过程就是把你的代码封装成函数,然后依次去做一件事情,面向过程是把你要做 ...

  2. Java基础知识【上】(转载)

    http://blog.csdn.net/silentbalanceyh/article/details/4608272 (最终还是决定重新写一份Java基础相关的内容,原来因为在写这一个章节的时候没 ...

  3. Java最重要的21个技术点和知识点之JAVA基础

     (一)Java最重要的21个技术点和知识点之JAVA基础  写这篇文章的目的是想总结一下自己这么多年JAVA培训的一些心得体会,主要是和一些java基础知识点相关的,所以也希望能分享给刚刚入门的Ja ...

  4. 给Java新手的一些建议----Java知识点归纳(Java基础部分)

    写这篇文章的目的是想总结一下自己这么多年来使用java的一些心得体会,主要是和一些java基础知识点相关的,所以也希望能分享给刚刚入门的Java程序员和打算入Java开发这个行当的准新手们,希望可以给 ...

  5. java基础学习总结一(java语言发展历史、jdk的下载安装以及配置环境变量)

    最近一段时间计划复习一下java基础知识,使用的视频课程是尚学堂高淇老师的,上课过程中的心得体会直接总结一下,方便以后复习. 一:计算机语言的发展 1:机器语言,最原始的语言,主要有“01”构成,最早 ...

  6. Java基础一:面向对象的特征

    经过16年校招,自己在Java基础方面也算有了一个质的飞跃,从原来知其然,到现在知其所以然,现将学习心得总结于此. 首先需要知道类和对象是什么? 维基百科定义类为: an extensible pro ...

  7. Java 基础 -- 泛型、集合、IO、反射

    package com.java.map.test; import java.util.ArrayList; import java.util.Collection; import java.util ...

  8. Java基础面试知识点总结

    微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验. ...

  9. Java基础差,需要怎么补

    本文首发于本博客 猫叔的博客,转载请申明出处 感谢sugar的提问:Java基础差,需要怎么补? 欢迎关注公众号:Java猫说 我整体的总结了一下,大致分为以下的几个点说一下: 1.善于使用搜索引擎 ...

随机推荐

  1. 2017/6Summary

    字符串转换为JSON 1.var json = eval('(' + str + ')'); 2.var json = (new Function("return " + str) ...

  2. C#项目中关于多个程序集下App.config文件的问题

    在项目中我们会经常用到App.config文件,有的是自动生成的,比如引用webservice.wcf服务时生成:也有手动建立的配置文件直接默认名就为app.config.这些配置有的保存当前程序集用 ...

  3. 有关Struts下载文件时报错问题

    在学习文件下载的时候,我也是按照网络课程上面老师的代码一句一句敲得,和老师的一模一样:到最后测试下载的时候出现了如下的错误: 而老师的写的代码可以完美运行,以下是跟着老师敲的代码: package c ...

  4. windows中查看端口占用情况

    说几个命令, netstat 用于查看进程端口占用情况,用法可以使用netstat -h 查看 tasklist 列出当前进程,有进程号 findstr 用于过滤字符串 大致过程就是: 1. 使用 n ...

  5. 水题C

    某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0,1,2,……,L,都种有一棵树. ...

  6. [DeploymentService:290066]Error occurred while downloading files from admin server for deployment request "0". Underlying error is: "null"

    weblogic 莫名无法启动: <Apr , :: PM CST> <Error> <Deployer> <BEA-> <Failed to i ...

  7. modelform的简介

    Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否 ...

  8. python 简单了解namedtuple

    namedtuple类位于collections模块,有了namedtuple后通过属性访问数据能够让我们的代码更加的直观更好维护 namedtuple能够用来创建类似于元祖的数据类型,除了能够用索引 ...

  9. jQuery图片懒加载插件jquery.lazyload.js使用实例注意事项说明

    jQuery图片懒加载插件jquery.lazyload.js使用实例注意事项说明 jquery.lazyload.js是一个用JavaScript编写的jQuery插件.它可以延迟加载长页面中的图片 ...

  10. win10 常用设置 桌面出来计算机图标,固定桌面摆好的图标设置方法,电脑设备ID方法

    win10 常用设置 桌面出来计算机图标,固定桌面摆好的图标设置方法 桌面右键-->显示设置-->桌面图标设置 电脑设备ID:xxx查看方法:桌面右键-->显示设置-->关于