发送邮件是很常用的功能,注册验证,找回密码,到货通知,欠费提醒等,都可以通过邮件来提醒。

Java中发送邮件需要使用javax.mail.jar包,读者可以上网搜索或去官方下载,下载地址为:

下面贴上发送邮件的核心代码。

 // Get system properties
Properties properties = System.getProperties(); // Setup mail server
properties.setProperty("mail.smtp.host", host);
properties.setProperty("mail.smtp.port", port);
properties.put("mail.smtp.auth", "true"); // create email authenticator.
Authenticator authenticator = new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
}; // Get the default Session object.
Session session = Session.getDefaultInstance(properties, authenticator); try {
// Create a default MimeMessage object.
MimeMessage message = new MimeMessage(session); // Set From: header field of the header.
message.setFrom(new InternetAddress(from)); // Set To: header field of the header.
for (String to : toList) {
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));
} // Set Subject: header field
message.setSubject("这是邮件标题", "utf-8");
// Send the complete message parts
message.setContent("这里是邮件内容", "text/html;charset=utf-8"); // Send message
Transport.send(message);
System.out.println("Sent message successfully....");
} catch (MessagingException mex) {
mex.printStackTrace(); }

我自己定义了一个类EmailSender,这个类提供了邮件群发功能,以及在邮件中发送附件。用户继承这个类,重载getSubject,getContent和getAttachments这三个方法便可以发送邮件。

类定义如下:

package com.iot.common.email;

import java.io.File;

import javax.activation.DataHandler;

import javax.activation.DataSource;

import javax.activation.FileDataSource;

import javax.mail.Multipart;

import javax.mail.internet.MimeMultipart;

import javax.mail.internet.MimeBodyPart;

import javax.mail.BodyPart;

import javax.mail.PasswordAuthentication;

import javax.mail.Authenticator;

import java.util.ArrayList;

import javax.mail.MessagingException;

import javax.mail.Transport;

import javax.mail.Message;

import javax.mail.internet.InternetAddress;

import javax.mail.internet.MimeMessage;

import javax.mail.Session;

import java.util.Properties;

import java.util.List;

/**
* 邮件发送类,用来发送邮件给用户.<br />
*
* @author Sam
*
*/
public abstract class EmailSender extends Authenticator { private String host;
private String port;
private String username;
private String password;
private String from; public EmailSender() {
this.host = PropertiesUtil.getProperty(Constant.EMAIL_HOST);
this.port = PropertiesUtil.getProperty(Constant.EMAIL_HOST_PORT);
this.username = PropertiesUtil.getProperty(Constant.EMAIL_USER_NAME);
this.password = PropertiesUtil.getProperty(Constant.EMAIL_PASSWORD);
this.from = PropertiesUtil.getProperty(Constant.EMAIL_SENDER);
} /**
* EmailSender构造函数,需要用户提供host,port,username,password,from等信息。<br />
*
* @param host
* ,smtp服务器地址
* @param port
* ,smtp服务器端口
* @param username
* ,邮箱用户名
* @param password
* ,邮箱密码
* @param from
* ,邮箱发送人
*/
public EmailSender(String host, String port, String username,
String password, String from) {
this.host = host;
this.port = port;
this.username = username;
this.password = password;
this.from = from;
} /**
* 发送邮件到指定用户
*
* @param to
* , 邮件发送对象
* @return ture 发送成功, false发送失败
*/
public Boolean send(String to) { List<String> toList = new ArrayList<>();
toList.add(to); return send(toList);
} /**
* 群发邮件
*
* @param toList
* ,需要接受邮件的用户
* @return ture 发送成功, false发送失败
*/
public Boolean send(List<String> toList) { // Get system properties
Properties properties = System.getProperties(); // Setup mail server
properties.setProperty("mail.smtp.host", host);
properties.setProperty("mail.smtp.port", port);
properties.put("mail.smtp.auth", "true"); // create email authenticator.
Authenticator authenticator = new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
}; // Get the default Session object.
Session session = Session.getDefaultInstance(properties, authenticator); try {
// Create a default MimeMessage object.
MimeMessage message = new MimeMessage(session); // Set From: header field of the header.
message.setFrom(new InternetAddress(from)); // Set To: header field of the header.
for (String to : toList) {
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));
} // Set Subject: header field
message.setSubject(getSubject(), "utf-8"); // Create the message part
BodyPart messageBodyPart = new MimeBodyPart(); // Fill the message
messageBodyPart.setContent(getContent(), "text/html;charset=utf-8"); // Create a multipar message
Multipart multipart = new MimeMultipart(); // Set text message part
multipart.addBodyPart(messageBodyPart); // add attachment
List<File> attchments = getAttachments();
if (attchments != null && attchments.size() > 0) {
for (File attachment : attchments) {
messageBodyPart = new MimeBodyPart();
DataSource source = new FileDataSource(attachment);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(attachment.getName());
multipart.addBodyPart(messageBodyPart);
}
} // Send the complete message parts
message.setContent(multipart); // Send message
Transport.send(message);
System.out.println("Sent message successfully....");
} catch (MessagingException mex) {
mex.printStackTrace(); return false;
} return true;
} /**
* 获取邮件主题,支持html格式。
*
* @return
*/
protected abstract String getSubject(); /**
* 获取邮件内容,支持html格式。
*
* @return
*/
protected abstract String getContent(); /**
* 获取附件列表,若不需要发送附件,请返回null或长度为0的List<File>列表.<br />
*
* @return
*/
protected abstract List<File> getAttachments(); }

与邮件发送服务器相关信息存储在properties.xml文件中,文件结构如下:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>邮件系统配置文件</comment> <entry key="EMAIL_HOST">smtp.126.com</entry> <entry key="EMAIL_HOST_PORT">25</entry> <entry key="EMAIL_USER_NAME"><username>@126.com</entry> <entry key="EMAIL_PASSWORD"><password></entry> <entry key="EMAIL_SENDER"><username>@126.com</entry>
</properties>

PropertiesUtil类用于读取properties.xml文件中的属性,代码如下:

/**
*
*/
package com.iot.common.email; import java.io.IOException;
import java.io.InputStream;
import java.util.InvalidPropertiesFormatException;
import java.util.Properties; /**
* @author Sam <br />
* 读取properties信息 <br />
*
*/
public class PropertiesUtil { /**
* Get property by name
*
* @param name
* @return
*/
public static String getProperty(String name) {
return properties.getProperty(name);
} private static Properties properties; /****
* Initialize properties
*/
static {
String filePath = "properties.xml";
InputStream stream = PropertiesUtil.class.getClassLoader()
.getResourceAsStream(filePath); properties = new Properties(); try {
properties.loadFromXML(stream);
} catch (InvalidPropertiesFormatException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

静态常量类Contanst代码如下:

package com.iot.common.email;

/**
*
* @author Lynn
*
* Store all constant field
*
*/
public class Constant { /* email sending information */
public static final String EMAIL_HOST = "EMAIL_HOST";
public static final String EMAIL_HOST_PORT = "EMAIL_HOST_PORT";
public static final String EMAIL_USER_NAME = "EMAIL_USER_NAME";
public static final String EMAIL_PASSWORD = "EMAIL_PASSWORD";
public static final String EMAIL_SENDER = "EMAIL_SENDER"; }

测试代码如下:

 package com.iot.common.email;

 import java.io.File;

 import java.util.ArrayList;

 import java.util.List;

 public class EmailTest {

     /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub EmailSender sender = new EmailSender() { @Override
protected String getSubject() {
// TODO Auto-generated method stub
return "测试邮件,请不要回复";
} @Override
protected String getContent() {
// TODO Auto-generated method stub
return "<h1>尊敬的用户:</h1><br /><p>这是一封测试邮件,请不要恢复改邮件!</p>";
} @Override
protected List<File> getAttachments() {
// TODO Auto-generated method stub List<File> files=new ArrayList<>();
files.add(new File("d:/district.txt"));
files.add(new File("d:/test2.jar")); return files;
}
}; List<String> to = new ArrayList<>();
to.add("409253645@qq.com");
to.add("sam@steperp.com");
to.add("hui@126.com"); sender.send(to); } }

使用JavaMail API发送邮件的更多相关文章

  1. JavaMail应用--通过javamail API实现在代码中发送邮件功能

    JavaMail应用   在日常开发中,可能会引用到发邮件功能,例如在持续集成中,自动化测试运行完毕,自动将测试结果以报表的形式发送邮件给相关人.那么在Java中如何实现发邮件呢? 在java EE ...

  2. JavaMail API 详细分解

    在使用Spring框架的过程中,它的优势之一就是在于跟其他一些技术的整合,如JavaMail .任务调度.缓存策略等技术.今天就Java Mail详细阐述.JavaMail API是被设计为与协议无关 ...

  3. javamail模拟邮箱功能发送电子邮件-基础实战篇(javamail API电子邮件实例)

    引言: JavaMail 是一种可选的.能用于读取.编写和发送电子消息的包 JavaMail jar包下载地址:http://java.sun.com/products/javamail/downlo ...

  4. javamail模拟邮箱功能发送电子邮件-中级实战篇【新增附件发送方法】(javamail API电子邮件实例)

    引言: JavaMail jar包下载地址:http://java.sun.com/products/javamail/downloads/index.html 此篇是紧随上篇文章而封装出来的,阅读本 ...

  5. JavaMail API 1.4.7邮件发送

    下载oracle javaMail API: http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive- ...

  6. JavaMail API

    JavaMail API的核心类:会话.消息.地址.验证程序.传输,存储和文件夹.所有这些类都可以在JavaMail API即javax.mail的顶层包中找到,尽管你将频繁地发现你自己使用的子类是在 ...

  7. javamail模拟邮箱功能--邮件回复-中级实战篇【邮件回复方法】(javamail API电子邮件实例)

    引言: JavaMai下载地址l jar包:http://java.sun.com/products/javamail/downloads/index.html 此篇是紧随上篇文章而封装出来的,阅读本 ...

  8. javamail模拟邮箱功能获取邮件内容-中级实战篇【内容|附件下载方法】(javamail API电子邮件实例)

    引言: JavaMail jar包下载地址:http://java.sun.com/products/javamail/downloads/index.html 此篇是紧随上篇文章而封装出来的,阅读本 ...

  9. JavaMail API的应用

    JavaMail API 是一个用于阅读.编写和发送电子消息的可选包(标准扩展),用来创建邮件用户代理(Mail User Agent,MUA)类型程序. JavaMail API 需要 JavaBe ...

随机推荐

  1. Linux音频编程指南

    Linux音频编程指南 虽然目前Linux的优势主要体现在网络服务方面,但事实上同样也有着非常丰富的媒体功能,本文就是以多媒体应用中最基本的声音为对象,介绍如何在Linux平台下开发实际的音频应用程序 ...

  2. iPhone 已停用

    如果你的iPhone上出现了如下的显示,你可以参考苹果官网上的  iOS设备已停用 如果你看到了这篇文章,你比我幸运多了. 参考这一个条目,你也许就不会丢失里面的数据了. 可怜的我,出现这个问题时还没 ...

  3. Html 修改placeholder的颜色属性css样式

    项目需求需要修改文本框的placeholder 的文本颜色, 百度下, 备忘,我使用的是这种方法, ::-webkit-input-placeholder { /* WebKit browsers * ...

  4. 使用SqlTransaction回滚事务

    https://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqltransaction(v=vs.110).aspx private ...

  5. 基于Linux的oracle数据库管理 part1( 准备及linux基础 )

    主要内容 1. 安装VMware tools (好处, 显示效果增强, 从虚拟机出来不需要alt+ctrl 切换) 2. Linux 启动过程, 方便以后oracle 自动启动与关闭 3. Linux ...

  6. MFC弹出菜单隐藏解决

    http://social.msdn.microsoft.com/Forums/en-US/5482103e-272b-4c9f-bac4-be15f14782bd/cmfcmenubar-remov ...

  7. Windows 下搭建LDAP服务器

    五一闲来没事,加上项目正在进行UAT.抽空研究了一下LDAP相关知识.随手做一个记录. 为了方便阅读还是先介绍一下什么是LDAP? 前言.Lightweight Directory Access Pr ...

  8. MoreLinq和Linq

    MoreLinq里的Batch和Partition不知道什么区别. var ints =Enumerable.Range(1,10); var result = ints.Batch(3); var ...

  9. UVa 537 Artificial Intelligence?

    题目大意:输入一个字符串,根据物理公式P=U*I,已知其中两个量,求第三个量,结果保留两位小数.   Artificial Intelligence?  Physics teachers in hig ...

  10. 2016年4月TIOBE编程语言排行榜 Visual Basic正渐行渐远

    COBOL, BASIC 和 FORTRAN 很长一段时间作为主力开发语言被使用.有很多软件使用这些语言来编写,并且发展的不亦乐乎.然而经过多年的发展,COBOL和FORTRAN逐渐被抛弃, 而得益于 ...