java 发邮件_java实现邮件的发送

文章所用jar文件

链接:https://pan.baidu.com/s/1YaxhdkaCTC4TUDL-y9-ASQ

提取码:30ow

程序入口,发送工具类

package test;

import org.apache.commons.mail.EmailException;

/**

* 邮箱发送工具类

* @author Administrator

*

*/

public class EmailUtil {

public static void main(String[] args) throws EmailException {

//自定义工具类

EmailUtils EmailUtils = new EmailUtils();

//返回0表示发送失败 返回1表示发送成功

int o = EmailUtils.sendSimpleEmail("123465@qq.com", "名称", "Java send Email", "测试");

if(o==0){

System.out.println("发送失败");

}else{

System.out.println("发送成功");

}

}

}

发送简单邮件方法类

package test;

import org.apache.commons.mail.DefaultAuthenticator;

import org.apache.commons.mail.EmailException;

import org.apache.commons.mail.SimpleEmail;

public class EmailUtils{

/**

* 发送简单邮件方法

* @param emailAddress

* 发送地址

* @param sendName

* 发件人名

* @param title

* 邮件标题

* @param message

* 邮件内容

* @return

* 返回0表示发送失败 返回1表示发送成功

* @throws EmailException

*/

public int sendSimpleEmail(String emailAddress, String sendName, String title, String message) throws EmailException{

//要发送的服务器 地址

String hostName="smtp.qq.com";//对方邮箱是什么类型,这里是QQ邮箱的服务器地址

//要发送的服务器 邮箱账号

String userName="自己的邮箱地址";

//要发送的服务器 邮箱密码

String password="自己的邮箱密码";

//要发送的端口 587 465 25

int smtpPort=587;

//是否使用ssl加密协议

boolean SSL=true;

try {

SimpleEmail email = new SimpleEmail();

//smtp address

email.setHostName(hostName);

//smtp port

email.setSmtpPort(smtpPort);

//账号 密码

email.setAuthenticator(new DefaultAuthenticator(userName, password));

//设置发件人地址

email.setFrom(userName);

//设置邮件标题

email.setSubject(title);

//设置邮件主体

//email.setMsg(message);

email.setContent(message, "text/html;charset=UTF-8");//解决乱码

//设置收件人地址

email.addTo(emailAddress);

//设置是否使用SSL加密

email.setSSL(SSL);

//发送邮件

email.send();

} catch (Exception e) {

//异常

return 0;

}

//正常

return 1;

}

}

邮件发送控制器

package test;

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class SendEmailServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// 前端form表单post请求--防止请求提交乱码.

request.setCharacterEncoding("utf-8");

// 获取前端传入的参数

try {

// 邮件发送处理

SendEmailUtil.sendMail("2249119735@qq.com", "邮件测试");

// 将发送信息保存到session中

request.getSession().setAttribute("send_msg", "邮件发送成功!");

// 页面跳转到发送结果页面

request.getRequestDispatcher("/index.jsp").forward(request, response);

} catch (Exception e) {

e.printStackTrace();

request.getSession().setAttribute("send_msg", "邮件发送失败!");

request.getRequestDispatcher("/index.jsp").forward(request, response);

}

}

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

this.doGet(request, response);

}

}

核心发送方法

package test;

import java.util.Properties;

import javax.mail.Address;

import javax.mail.MessagingException;

import javax.mail.Session;

import javax.mail.Transport;

import javax.mail.internet.InternetAddress;

import javax.mail.internet.MimeMessage;

public class SendEmailUtil {

public static boolean sendMail(String emailAddress, String emailMsg) {

// 谁发送

String from = "1535765656@qq.com";

// 发给谁

String to = emailAddress;

// 发送者的用户名和密码(邮箱登录用)

final String username = "1535765656@qq.com"; // 此处填写发送的邮箱名

final String password = "ypvjnbyqelcsihag"; // 此处填写登录的邮箱密码

// 定义properties对象,设置环境信息

Properties properties = new Properties();

/*

* mail.smtp.host :指定连接的邮件服务器的主机名。如:163邮箱就填写smtp.163.com

* 若在本地测试的话,需要在本地安装smtp服务器

*/

properties.setProperty("mail.smtp.host", "smtp.qq.com");

// mail.smtp.auth:指定客户端是否要向邮件服务器提交验证

properties.setProperty("mail.smtp.auth", "true");

/*

* mail.transport.protocol:指定邮件发送协议:smtp。smtp:发邮件;pop3:收邮件

* mail.store.protocol:指定邮件接收协议

*/

properties.setProperty("mail.transport.protocol", "smtp");

// 获取session对象

Session session = Session.getInstance(properties);

// 当设置为true,JavaMail AP就会将其运行过程和邮件服务器的交互命令信息输出到console中,用于JavaMail的调试

session.setDebug(true);

try {

// 创建邮件对象

MimeMessage message = new MimeMessage(session);

// 设置邮件发送方

message.setFrom(new InternetAddress(from));

// 设置邮件发送的主题

message.setSubject("邮件发送设置");

// 设置邮件发送的内容

message.setContent(emailMsg,"text/html;charset=utf-8");

Transport transport=session.getTransport();

// 连接邮件服务器,“”中填写邮件服务器主机名

properties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");

transport.connect("smtp.qq.com",465, username, password);

transport.sendMessage(message,new Address[]{new InternetAddress(to)});

transport.close();

return true;

} catch (MessagingException e) {

e.printStackTrace();

return false;

}

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/271922.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件工程与程序算法

软件工程包括需求分析、概要设计、详细设计、代码实现和维护五个部分。而具体的程序编码只占其中的一小部分。算法是在代码设计中的基础,提供了解决问题的方法。软件工程是应用计算机科学、数学及管理科学等原理,开发软件的工程。软件工程借鉴传统工程的…

docker安装Sentinel

1:拉取镜像:docker pull bladex/sentinel-dashboard 2:启动 docker run --name sentinel -d -p 8858:8858 -d bladex/sentinel-dashboard 3:访问 http://公网ip:8858 4:登录,用户名和密码都是sentinel

蓝牙技术的工作原理及用途

所谓蓝牙技术就是一种全球无线通讯标准,在一定距离内连接设备。目前,蓝牙技术也已应用到各个领域中,并已成为接入物联网(IOT)的主要技术。那关于蓝牙技术的工作原理本文将进行介绍,并概括其特点。蓝牙技术的…

什么是BusyBox?

BusyBox 是标准 Linux 工具的一个单个可执行实现。BusyBox 包含了一些简单的工具,例如 cat 和 echo,还包含了一些更大、更复杂的工具,例如 grep、find、mount 以及 telnet。有些人将 BusyBox 称为 Linux 工具里的瑞士军刀.简单的说BusyBox就好…

iOS十进制切割格式转换

//"123456789" 转换后 "123,456,789" interface NSString (num)- (NSString *)money;endimplementation NSString (num)- (NSString *)money{NSNumberFormatter *numFormat [[NSNumberFormatter alloc] init];[numFormat setNumberStyle:NSNumberFormatte…

同一接口有多个实现类,怎么来注入一个指定的实现?@Resource、@Autowired、@Qualifier

如果一个接口有2个以上不同的实现类, 那么如何Autowire一个指定的实现 1:首先,UserService接口有两个实现类 UserService1和 UserService2 UserService接口 2:以下是UserService接口的两个实现类UserService1和UserService2,请注意service注解的使用方式&#xff…

java类型比较_java 基本数据类型 ==和equals()比较

1.基本类型的存储Java 8种基本类型都是存储在堆栈中,例:int i 1;String str "hello world";也是存储在堆栈中。new基本类型的包装器类型和new String()都是存储在堆内存中。例Integer i new Integer(1);String str new String("hello…

嵌入式操作系统的主要特点都有哪些

嵌入式操作系统(EOS)是指用于嵌入式系统的操作系统。嵌入式操作系统是一种用途广泛的系统软件,通常包括与硬件的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器等。嵌入式系统分为4层:硬件层、驱动层、…

UIWebView UITextView

// // ViewController.m // 网页 //#import "ViewController.h"interface ViewController ()<UITextFieldDelegate,UIWebViewDelegate> property (weak, nonatomic) IBOutlet UITextField *textFiled; property (weak, nonatomic) IBOutlet UIWebView *webVi…

BeanFactory和ApplicationContext有什么区别?

BeanFactory&#xff1a; 是Spring里面最底层的接口&#xff0c;提供了最简单的容器的功能&#xff0c;只提供了实例化对象和拿对象的功能 ApplicationContext&#xff1a; 应用上下文&#xff0c;继承BeanFactory接口&#xff0c;它是Spring的一各更高级的容器&#xff0c;提…

java的继承实例_Java继承和多态实例

我们知道面向对象的三大特性是封装、继承和多态。然而我们有时候总是搞不清楚这些概念。下面对这些概念进行整理&#xff0c;为以后面向抽象的编程打下坚实的基础。封装的概念还是很容易理解的。如果你会定义类&#xff0c;那么相信你对封装的概念已经完全掌握了。下面定义的几…

【数据库】13种会导致索引失效语句写法

数据库的索引是保证数据快速查询的重中之重&#xff0c;以下13种会导致索引失效语句会导致你的SQL查询索引失效&#xff0c;具体如下&#xff1a;1、使用like关键字模糊查询时&#xff0c;% 放在前面索引不起作用&#xff0c;只有“%”不在第一个位置&#xff0c;索引才会生效&…

yii2史上最简单式安装教程,没有之一

作者&#xff1a;白狼 出处&#xff1a;www.manks.top/article/yii2_install 本文版权归作者&#xff0c;欢迎转载&#xff0c;但未经作者同意必须保留此段声明&#xff0c;且在文章页面明显位置给出原文连接&#xff0c;否则保留追究法律责任的权利。 最近有小伙伴私聊我&…

java static调用吗_Java中的static的使用

1.Java 中被static修饰的成员称为静态成员或类成员。它属于整个类所有&#xff0c;而不是某个对象所有&#xff0c;即被类的所有对象所共享、且优先于对象存在。静态成员可以使用类名直接访问&#xff0c;也可以使用对象名进行访问。使用 static 可以修饰变量、方法和代码块。2…

15个搞笑的程序员段子

1. 问答Q&#xff1a;你是怎么区分一个内向的程序员和一个外向的程序员的&#xff1f;A&#xff1a;外向的程序员会看着你的鞋和你说话时。Q&#xff1a;为什么程序员不能区分万圣节和圣诞节&#xff1f;A&#xff1a;这是因为 Oct 31 Dec 25&#xff01;&#xff08;八进制的…

java ffmpeg 获取视频时长_Java通过调用FFMPEG获取视频时长

FFmpeg是一套可以用来记录、转换数字音频、视频&#xff0c;并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec&#xff0c;为了保证高可移植性和编解码质量&#xff0…

盘点15个搞笑的程序员段子

1.车Delphi象吉普车&#xff0c;什么路上都能开&#xff0c;却在啥路上也开不好&#xff1b;PB就象卡丁车&#xff0c;只能在固定线路上开&#xff0c;到室外就有些不稳&#xff1b;VC象跑车&#xff0c;你开得起却买不 起&#xff0c;而且一旦发生故障&#xff0c;想修都找不到…

判断listview是上滑还是下滑的方法

方法一&#xff1a; 用setOnScrollListener(new AbsListView.OnScrollListener()&#xff09;来实现&#xff0c;判断滑动后显示的第一个条目 &#xff0c;与滑动前的第一个条目的大小来判断&#xff0c; 这种方法逻辑简单&#xff0c;但是必须要滑动到当前第一条目隐藏后才能起…

如何保证消息不被重复消费~~~~~(如何保证消息队列的幂等性)

分析&#xff1a;这个问题其实换一种问法就是&#xff0c;如何保证消息队列的幂等性&#xff1f;这个问题可以认为是消息队列领域的基本问题。换句话来说&#xff0c;是在考察你的设计能力&#xff0c;这个问题的回答可以根据具体的业务场景来答&#xff0c;没有固定的答案。 回…