一、首先你要用来发送邮件的qq邮箱需要开通pop3/smtp服务,这个可以百度一下就知道了

二、导入所需要的jar包,我使用的是maven添加依赖

<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>smtp</artifactId>
<version>1.6.0</version>
</dependency>

三、进行工具类编写并测试,代码如下

package com.cccuu.project.myUtils;

import com.sun.mail.util.MailSSLSocketFactory;

import javax.mail.Authenticator;
import javax.mail.Message.RecipientType;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.Properties;
import java.util.UUID; /*******************************************
* 使用smtp协议发送邮件
* @Package com.cccuu.project.myUtils
* @Author drt
* @Date 2018/3/28 11:40
* @Version V1.0
*******************************************/
public class JavaMailUtil { private final static String PROTOCOL = "smtp"; // 邮件发送协议
private final static String HOST = "smtp.qq.com"; //邮件服务器主机
private final static String PORT = "465"; // SMTP邮件服务器默认端口
private final static String IS_AUTH = "true"; // 是否要求身份认证
private final static String IS_ENABLED_DEBUG_MOD = "true"; //// 是否启用调试模式(启用调试模式可打印客户端与服务器交互过程时一问一答的响应消息) // 初始化连接邮件服务器的会话信息
private static Properties props = null; static {
props = new Properties();
props.setProperty("mail.transport.protocol", PROTOCOL);
props.setProperty("mail.smtp.host", HOST);
props.setProperty("mail.smtp.port", PORT);
props.setProperty("mail.smtp.auth", IS_AUTH);
props.setProperty("mail.debug",IS_ENABLED_DEBUG_MOD);
} /**
* 发送邮件工具类:通过qq邮件发送,因为具有ssl加密,采用的是smtp协议
* @param loginAccount 登录邮箱的账号:如 "1576357208@qq.com"
* @param loginAuthCode 登录qq邮箱时候需要的授权码:可以进入qq邮箱,账号设置那里"生成授权码"
* @param sender 发件人邮箱
* @param recipients 收件人邮箱:支持群发
* @param emailSubject 邮件的主题
* @param emailContent 邮件的内容
* @param emailContentType 邮件内容的类型,支持纯文本:"text/plain;charset=utf-8";,带有Html格式的内容:"text/html;charset=utf-8"
* @return 是否成功
*/
public static boolean sendEmail(final String loginAccount,final String loginAuthCode,String sender,String[] recipients,
String emailSubject,String emailContent,String emailContentType){
boolean flag;
try {
//开启SSL加密,否则会失败
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
props.put("mail.smtp.ssl.enable", "true");
props.put("mail.smtp.ssl.socketFactory", sf);
// 创建session
Session session = Session.getDefaultInstance(props, new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
//用户名可以用QQ账号也可以用邮箱的别名:第一个参数为邮箱账号,第二个为授权码
PasswordAuthentication pa = new PasswordAuthentication(loginAccount,loginAuthCode);
return pa;
}
});
//设置打开调试状态
//session.setDebug(true);
//声明一个Message对象(代表一封邮件),从session中创建,可以发送几封邮件:可以在这里 for循环多次
MimeMessage msg = new MimeMessage(session);
//邮件信息封装
//1发件人
msg.setFrom(new InternetAddress(sender));
//2收件人:可以多个
//msg.setRecipient(RecipientType.TO, new InternetAddress("linsenzhong@126.com"));
InternetAddress[] receptientsEmail=new InternetAddress[recipients.length];
for(int i=0;i<recipients.length;i++){
receptientsEmail[i]=new InternetAddress(recipients[i]);
}
//多个收件人
msg.setRecipients(RecipientType.TO,receptientsEmail);
//设置发送时间
msg.setSentDate(new Date());
//设置邮件优先级
msg.setHeader("X-Priority","1");
//3邮件内容:主题、内容
msg.setSubject(emailSubject);
//设置html内容为邮件正文
msg.setContent(emailContent,emailContentType);
//设置自定义发件人昵称
String nick="";
try {
nick=javax.mail.internet.MimeUtility.encodeText("河南灵秀网络科技有限公司");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
msg.setFrom(new InternetAddress(nick+" <"+sender+">"));
// 保存并生成最终的邮件内容
msg.saveChanges();
//发送动作
Transport.send(msg);
System.out.println("邮件发送成功");
flag=true; } catch (Exception e) {
System.out.println("邮件发送失败: "+e.getMessage());
flag=false;
}
return flag;
} public static void main(String[] args) throws Exception {
String code=UUID.randomUUID().toString();
boolean result=sendEmail("1576357208@qq.com", "lisaygkznttogjhj", "1576357208@qq.com",
new String[]{"17737138812@163.com","303157545@qq.com"},
"修改密码验证码",
"<h3 style='margin-left: 10px; color: #00a0e9'>你的验证码是"+code+",10分钟内有效,过期请重新获取</h3>",
"text/html;charset=utf-8");
System.out.println("\n发送结果:"+result);
}
}

使用javaMail实现简单邮件发送的更多相关文章

  1. java-基于JavaMail的Java邮件发送

    1.基于JavaMail的Java邮件发送:简单邮件发送 2.基于JavaMail的Java邮件发送:复杂邮件发送

  2. 基于JavaMail的Java邮件发送:复杂邮件发送

    参考:http://blog.csdn.net/xietansheng/article/details/51722660package com.bfd.ftp.utils;import java.ut ...

  3. ActiveMQ入门系列之应用:Springboot+ActiveMQ+JavaMail实现异步邮件发送

    现在邮件发送功能已经是几乎每个系统或网址必备的功能了,从用户注册的确认到找回密码再到消息提醒,这些功能普遍的会用到邮件发送功能.我们都买过火车票,买完后会有邮件提醒,有时候邮件并不是买完票立马就能收到 ...

  4. JavaMail如何保证邮件发送成功

    使用过JavaMail的api发送邮件的人可能会有这样一个疑惑:我如何知道我调用该api发送的邮件是否成功呢?一般的开放的api给我们调用都会有个返回值或者状态码,来告诉我们执行成功与否.但是Java ...

  5. 【转】基于JavaMail的Java邮件发送

    http://blog.csdn.net/xietansheng/article/details/51673073 http://blog.csdn.net/xietansheng/article/d ...

  6. springboot 简单邮件发送

    写作原因: 项目接近尾声,需求一变再变,其实技术点从未改变,只是业务逻辑的变更,发送邮件提醒的功能,两个月变更七次.我想把技术点记录下来,这里无关乎业务,只有发送邮件的功能. 邮件发送准备说明: 由于 ...

  7. 基于JavaMail的Java邮件发送:简单邮件发送

    使用Java应用程序发送 E-mail 十分简单,但是首先你应该在你的机器上安装 JavaMail API 和Java Activation Framework (JAF) . 您可以从 Java 网 ...

  8. JavaMail技术实现邮件发送转【】

    1.导入2个jar包,mail.jar,activation.jar 2.导入的jar包与myeclipse中自带的javaee 中的javaee.jar中的javax.activation包及jav ...

  9. C#简单邮件发送

    System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage(); message.From = new System.N ...

随机推荐

  1. Markdown 语法手册 (完整整理版)

    http://blog.csdn.net/witnessai1/article/details/52551362

  2. ArcEngine 10.2 汉化问题

    开发环境:VS2010 + ArcEngine 10.2 + DEV 15.2 arcengine自带工具条提示汉化方法: 1:重写tool里的方法 2:利用工具箱里的ToopTip 3:把:ArcG ...

  3. Django——ORM

    Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据 ...

  4. 神奇的RAC宏

    先说说RAC中必须要知道的宏 RAC(TARGET, [KEYPATH, [NIL_VALUE]])   使用: RAC(self.outputLabel, text) = self.inputTex ...

  5. 对于一个刚入门的linux运维来说

    干 就完了~ 我觉得 人生的意义在于 不断地学习......

  6. python web开发-flask连接sqlite数据库

    在之前的文章中我们介绍了如何在centOS中安装sqlite数据库. Sqlite安装完成后,本节就用flask来连接和操作sqlite数据库. 1.       数据准备 先在sqlite3中创建一 ...

  7. Java多线程:synchronized关键字和Lock

    一.synchronized synchronized关键字可以用于声明方法,也可以用来声明代码块,下面分别看一下具体的场景(摘抄自<大型网站系统与Java中间件实践>) 案例一:其中fo ...

  8. Django+xadmin打造在线教育平台(十)

    十四.xadmin的进阶开发 14.1.权限管理 (1)用户权限 超级用户拥有所有权限,其它添加的用户默认没有任何权限 进后台添加一个用户“Editor1”,勾上“职员状态”后,这个用户才可以登录进后 ...

  9. Java基础学习笔记二十二 网络编程

    络通信协议 通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵守交通规则一样.在计算机网络中,这些连接和通信的规则 ...

  10. 微信APP简要分析

    Part1 走进微信APP 很明显,微信是很成功的APP. 微信 (WeChat) 是腾讯公司于2011年1月21日推出的一个为智能终端提供即时通讯服务的免费应用程序,现已是超过九亿人使用的手机应用. ...