JAVA邮件发送的简单实现
JAVA MAIL是利用现有的邮件账户发送邮件的工具,比如说,我在网易注册一个邮箱账户,通过JAVA Mail的操控,我可以不亲自登录网易邮箱,让程序自动的使用网易邮箱发送邮件。这一机制被广泛的用在注册激活和垃圾邮件的发送等方面。
JAVA邮件发送的大致过程是这样的的:
1、构建一个继承自javax.mail.Authenticator的具体类,并重写里面的getPasswordAuthentication()方法。此类是用作登录校验的,以确保你对该邮箱有发送邮件的权利。
2、构建一个properties文件,该文件中存放SMTP服务器地址等参数。
3、通过构建的properties文件和javax.mail.Authenticator具体类来创建一个javax.mail.Session。Session的创建,就相当于登录邮箱一样。剩下的自然就是新建邮件。
4、构建邮件内容,一般是javax.mail.internet.MimeMessage对象,并指定发送人,收信人,主题,内容等等。
5、使用javax.mail.Transport工具类发送邮件。
下面是具体代码:
方法一:
/**
* @ClassName : Authentication
* @Description : 验证器
* @author : chenrl
* @date : 2015年10月30日 上午9:59:52
*/
public class Authentication extends Authenticator {
String username=null;
String password=null;
public Authentication(){
}
public Authentication(String username, String password) {
this.username = username;
this.password = password;
}
protected PasswordAuthentication getPasswordAuthentication(){
PasswordAuthentication pa = new PasswordAuthentication(username, password);
return pa;
}
}
public class SendMail {
// 发送邮件的服务器的IP和端口
private String mailServerHost;
private String mailServerPort = "25";
private String fromAddress;
private String toAddress;
private String userName;
private String password;
private boolean validate = false;
private String subject;
private String content;
private String[] attachFileNames;
/**
* 获得邮件会话属性
*/
public Properties getProperties() {
Properties p = new Properties();
p.put("mail.smtp.host", this.mailServerHost);
p.put("mail.smtp.port", this.mailServerPort);
p.put("mail.smtp.auth", validate ? "true" : "false");
return p;
}
//set get
}
public class MailSend {
public boolean sendTextMail(final SendMail mailInfo) {
// 判断是否需要身份认证
Authentication authenticator = null;
Properties pro = mailInfo.getProperties();
if (mailInfo.isValidate()) {
// 如果需要身份认证,则创建一个密码验证器
authenticator = new Authentication(mailInfo.getUserName(), mailInfo.getPassword());
}
// 根据邮件会话属性和密码验证器构造一个发送邮件的session
/*Session sendMailSession = Session.getDefaultInstance(pro,authenticator); */
Session sendMailSession = Session.getDefaultInstance(pro, new Authenticator(){
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(mailInfo.getUserName(), mailInfo.getPassword());
}
});
try {
Message mailMessage = new MimeMessage(sendMailSession);
Address from = new InternetAddress(mailInfo.getFromAddress());
mailMessage.setFrom(from);
Address to = new InternetAddress(mailInfo.getToAddress());
mailMessage.setRecipient(Message.RecipientType.TO,to);
mailMessage.setSubject(mailInfo.getSubject());
mailMessage.setSentDate(new Date());
String mailContent = mailInfo.getContent();
mailMessage.setText(mailContent);
Transport.send(mailMessage);
return true;
} catch (MessagingException ex) {
ex.printStackTrace();
}
return false;
}
/**
* 以HTML格式发送邮件
*/
public boolean sendHtmlMail(SendMail mailInfo){
// 判断是否需要身份认证
Authentication authenticator = null;
Properties pro = mailInfo.getProperties();
if (mailInfo.isValidate()) {
authenticator = new Authentication(mailInfo.getUserName(), mailInfo.getPassword());
}
// 根据邮件会话属性和密码验证器构造一个发送邮件的session
Session sendMailSession = Session.getDefaultInstance(pro,authenticator);
try {
// 根据session创建一个邮件消息
Message mailMessage = new MimeMessage(sendMailSession);
Address from = new InternetAddress(mailInfo.getFromAddress());
mailMessage.setFrom(from);
Address to = new InternetAddress(mailInfo.getToAddress());
// Message.RecipientType.TO属性表示接收者的类型为TO
mailMessage.setRecipient(Message.RecipientType.TO,to);
mailMessage.setSubject(mailInfo.getSubject());
mailMessage.setSentDate(new Date());
Multipart mainPart = new MimeMultipart();
BodyPart html = new MimeBodyPart();
html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");
mainPart.addBodyPart(html);
mailMessage.setContent(mainPart);
Transport.send(mailMessage);
return true;
} catch (MessagingException ex) {
ex.printStackTrace();
}
return false;
}
}
public class Send {
public static void main(String[] args) {
//设置邮件参数
SendMail mail = new SendMail();
//qq邮箱
//mail.setMailServerHost("smtp.qq.com"); //这里填发送者的邮箱服务器,我以qq举个例子
//sina
mail.setMailServerHost("smtp.sina.com");
mail.setMailServerPort("25");
mail.setValidate(true);
/*
mail.setUserName("发送者的邮箱名字");
mail.setPassword("发送者邮箱密码");
mail.setFromAddress("发送者邮箱名字");
mail.setToAddress("接受者邮箱密码");
mail.setSubject("标题");
mail.setContent("内容"); */
/*qq邮箱测试成功*/
/*163邮箱测试失败*/
/*gov.cn邮箱测试失败*/
/*sina邮箱测试成功*/
//发送邮件
MailSend sms = new MailSend();
sms.sendTextMail(mail);//发送文体格式
sms.sendHtmlMail(mail);//发送html格式
}
}
方法二:用下面的方法也可以实现:
/****************************************************************
* 对QQ邮箱使用(对于其他的使用类似的你应该也会更改了)
* 首先把QQ邮箱的POP3 SMTP打开
* 首先确定你的网络正常、非代理
* 确定你的QQ邮箱开启了SMTP
* 如果没有开启,那么这样设置下
* 设置->账户 --在下面-- 把这个选上 [√]SMTP发信后保存到服务器
****************************************************************/
public class SendEmail {
//设置服务器
private static String KEY_SMTP = "mail.smtp.host";
private static String VALUE_SMTP = "smtp.qq.com";
//服务器验证
private static String KEY_PROPS = "mail.smtp.auth";
private static boolean VALUE_PROPS = true;
//发件人用户名、密码
private String SEND_USER = EmailConfProperties.getEmail();//你的QQ邮箱
private String SEND_UNAME = EmailConfProperties.getEmailName(); //你的邮箱名
private String SEND_PWD = EmailConfProperties.getEmailPwd(); //你的邮箱密码
//建立会话
private MimeMessage message;
private Session s;
/*
* 初始化方法
* */
public SendEmail(){
Properties props = System.getProperties();
props.setProperty(KEY_SMTP, VALUE_SMTP);
props.put(KEY_PROPS, VALUE_PROPS);
s = Session.getInstance(props);
s.setDebug(true);//开启后有调试信息
message = new MimeMessage(s);
}
/**
* 发送邮件
* @param headName 邮件头文件名
* @param sendHtml 邮件内容
* @param receiveUser 收件人184172133@qq.com
*/
public void doSendHtmlEmail(String headName,StringBuffer sendHtml,String receiveUser){
try {
// 发件人
InternetAddress from = new InternetAddress(SEND_USER);
message.setFrom(from);
// 收件人
InternetAddress to = new InternetAddress(receiveUser);
message.setRecipient(Message.RecipientType.TO, to);
// 邮件标题
message.setSubject(headName);
String content = sendHtml.toString();
// 邮件内容,也可以使纯文本"text/plain"
message.setContent(content, "text/html;charset=GBK");
message.saveChanges();
Transport transport = s.getTransport("smtp");
// smtp验证,就是你用来发邮件的邮箱用户名密码
transport.connect(VALUE_SMTP, SEND_UNAME, SEND_PWD);
// 发送
transport.sendMessage(message, message.getAllRecipients());
transport.close();
} catch (AddressException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
//发邮件提醒
SendEmail email = new SendEmail();
String server_IP = EmailConfProperties.getServerIP();
String server_Port = EmailConfProperties.getServerPort();
String server_Name = EmailConfProperties.getServerName();
String path = "http://" + server_IP + ":" + server_Port + "/" + server_Name;
String headName = "用户注册信息审核通知";
StringBuffer sendHtml = new StringBuffer("亲爱的用户,您好:" +
"<br> 验证码已经发送到您的邮箱,请尽快完成密码找回功能,验证码为:" + 123 +
"<br> 您可以:<a href='" + path + "'>点击此处登录</a>" +
"<br><br>系统邮件,请勿回复");
String receiveUser = "users516@163.com";
email.doSendHtmlEmail(headName, sendHtml, receiveUser);
// System.out.println("邮件已发出,请注意查收!");
}
}
public class EmailConfProperties {
private static Properties properties;
static {
properties = null;
try {
if (properties == null) {
properties = new Properties();
properties.load(EmailConfProperties.class.getClassLoader().getResourceAsStream("emailConfig.properties"));
}
} catch (Exception e) {
System.err.println("not find emailConfig.properties");
e.printStackTrace();
}
}
//发件人邮箱
public static String getEmail() {
return properties.getProperty("send_Email");
}
//发件人邮箱名
public static String getEmailName() {
return properties.getProperty("send_EmailName");
}
//发件人邮箱密码
public static String getEmailPwd() {
return properties.getProperty("send_EmailPwd");
}
public static String getServerIP(){
return properties.getProperty("server_IP");
}
public static String getServerPort(){
return properties.getProperty("server_port");
}
public static String getServerName(){
return properties.getProperty("server_Name");
}
}
emailConfig.properties:配置文件
send_Email = 123456789@qq.com
send_EmailName = 123456789
send_EmailPwd = 123456789
server_IP = 192.168.17.92
server_port = 8080
server_Name = ISMS
JAVA邮件发送的简单实现的更多相关文章
- 基于JavaMail的Java邮件发送:简单邮件发送
使用Java应用程序发送 E-mail 十分简单,但是首先你应该在你的机器上安装 JavaMail API 和Java Activation Framework (JAF) . 您可以从 Java 网 ...
- java-基于JavaMail的Java邮件发送
1.基于JavaMail的Java邮件发送:简单邮件发送 2.基于JavaMail的Java邮件发送:复杂邮件发送
- 基于JavaMail的Java邮件发送:复杂邮件发送
参考:http://blog.csdn.net/xietansheng/article/details/51722660package com.bfd.ftp.utils;import java.ut ...
- java邮件发送(含附件)
1. [代码]java邮件发送(含附件)疯狂的IT人站长整理的:利用Java发送邮件(含附件)的例子:1.邮件发送的配置propertity文件内容如下:(utils.properties文件放在sr ...
- Java Mail邮件发送的简单实现
1.什么是java mail JAVA MAIL是利用现有的邮件账户发送邮件的工具,通过JAVA Mail的操控,让程序自动的使用设置的邮箱发送邮件. 这一机制被广泛的用在注册激活和垃圾邮件的发送等方 ...
- Java邮件发送与接收原理
一. 邮件开发涉及到的一些基本概念 1.1.邮件服务器和电子邮箱 要在Internet上提供电子邮件功能,必须有专门的电子邮件服务器.例如现在Internet很多提供邮件服务的厂商:sina.sohu ...
- java 邮件发送工具类
首先需要下载mail.jar文件,我个人通常是使用maven中心库的那个: <dependency> <groupId>javax.mail</groupId> & ...
- java 邮件发送工具类【来源网络自己已经实际应用】
最近在做一个Java发送邮件的工具类,现在分享一下完整的代码 首先需要java邮件的包javax.mail-1.5.4.jar 之前因为链接给错了,很不好意思,现在重新发一次. 包在这里可以下载htt ...
- 【转】基于JavaMail的Java邮件发送
http://blog.csdn.net/xietansheng/article/details/51673073 http://blog.csdn.net/xietansheng/article/d ...
随机推荐
- Squid的简单使用
1. squid配置 # Squid normally listens to port http_port hosts_file /etc/hosts cache_access_log /var/lo ...
- [转]shell 变量替换
转自:http://blog.csdn.net/xuhongning/article/details/6191515 1,参数替换: 不含有“:”的,只要定义了,就生效,不管是否为空 含有“:”的,即 ...
- Codeforces Round #352 (Div. 2) A Summer Camp
Every year, hundreds of people come to summer camps, they learn new algorithms and solve hard proble ...
- CentOS6.4 安装MongoDB
1.下载MongoDB(64位) http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.4.9.tgz 或 http://pan.baidu.c ...
- Codeforces Round #216 (Div. 2)A. Valera and Plates
#include <iostream> using namespace std; int main(){ int n, m , k; cin >> n >> m & ...
- 【BZOJ2821】作诗(Poetize) 分块
Description 神犇SJY虐完HEOI之后给傻×LYD出了一题:SHY是T国的公主,平时的一大爱好是作诗.由于时间紧迫,SHY作完诗之后还要虐OI,于是SHY找来一篇长度为N的文章,阅读M次, ...
- 【noiOJ】p8206
02:二分法求函数的零点 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 有函数: f(x) = x5 - 15 * x4+ 85 * x3- 225 * x ...
- Windows环境下的NodeJS+NPM+Bower安装配置步骤
Windows下的NodeJS安装是比较方便的(v0.6.0版本之后,支持windows native),只需要登陆官网(http://nodejs.org/),便可以看到首页的“INSTALL”按钮 ...
- VS2010 C++环境下DLL和LIB文件目录及名称修改
VS2010 C++环境下DLL和LIB文件目录及名称修改 转自:http://blog.csdn.net/archielau/article/details/8507581 DLL工程,Debug版 ...
- 关于C# WinForm 边框阴影窗体(一)
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...