一、调用邮件发送工具类进行邮件发送

			new Thread(){
public void run() {
try {
GMailSender sender = new GMailSender(
"lixeeq19910119@gmail.com",
"ee768lxq");
sender.sendMail("xxxxx注册验证", "验证码:"
+ localNum,
"lixeeq19910119@gmail.com",
email);
} catch (Exception e) {
e.printStackTrace();
}
};
}.start();

将上面的邮箱和密码换成你自己的邮箱和密码。

二、邮件发送工具类

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.security.Security;
import java.util.Properties; import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage; public class GMailSender extends javax.mail.Authenticator {
private String mailhost = "smtp.gmail.com";
private String user;
private String password;
private Session session;
static {
Security.addProvider(new JSSEProvider());
}
public GMailSender(String user, String password) {
this.user = user;
this.password = password;
Properties props = new Properties();
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.host", mailhost);
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", "465");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.fallback", "false"); props.setProperty("mail.smtp.quitwait", "false");
session = Session.getDefaultInstance(props, this);
}
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(user, password);
}
public synchronized void sendMail(String subject, String body, String sender, String recipients) throws Exception {
try{
MimeMessage message = new MimeMessage(session);
DataHandler handler = new DataHandler(new ByteArrayDataSource(body.getBytes(), "text/plain"));
message.setSender(new InternetAddress(sender));
message.setSubject(subject);
message.setDataHandler(handler);
if (recipients.indexOf(',') > 0)
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipients));
else
message.setRecipient(Message.RecipientType.TO, new InternetAddress(recipients));
Transport.send(message);
}catch(Exception e){
}
}
public class ByteArrayDataSource implements DataSource {
private byte[] data;
private String type;
public ByteArrayDataSource(byte[] data, String type) {
super();
this.data = data;
this.type = type;
}
public ByteArrayDataSource(byte[] data) {
super();
this.data = data;
}
public void setType(String type) {
this.type = type;
}
public String getContentType() {
if (type == null)
return "application/octet-stream";
else
return type;
}
public InputStream getInputStream() throws IOException {
return new ByteArrayInputStream(data);
}
public String getName() {
return "ByteArrayDataSource";
}
public OutputStream getOutputStream() throws IOException {
throw new IOException("Not Supported");
}
}
}

三、Provider类

import java.security.AccessController;
import java.security.Provider; public final class JSSEProvider extends Provider {
public JSSEProvider() {
super("HarmonyJSSE", 1.0, "Harmony JSSE Provider");
AccessController.doPrivileged(new java.security.PrivilegedAction<Void>() {
public Void run() {
put("SSLContext.TLS",
"org.apache.harmony.xnet.provider.jsse.SSLContextImpl");
put("Alg.Alias.SSLContext.TLSv1", "TLS");
put("KeyManagerFactory.X509",
"org.apache.harmony.xnet.provider.jsse.KeyManagerFactoryImpl");
put("TrustManagerFactory.X509",
"org.apache.harmony.xnet.provider.jsse.TrustManagerFactoryImpl");
return null;
}
});
}
}

关于Provider请参看:http://www.766.com/doc/java/security/class-use/Provider.html

四、需要的jar包

jar包下载地址:http://download.csdn.net/detail/lxq_xsyu/6543081

最新文章

  1. 使用AWS亚马逊云搭建Gmail转发服务(二)
  2. 最简单的STM32入门教程----闪烁LED
  3. MySQL存储过程调试工具-dbForge Studio for MySQL
  4. 删除ecshop底部共执行个查询Gzip 已禁用,占用内存方法
  5. windows2003下安装apache
  6. ASP.NET MVC之从控制器传递数据到视图四种方式
  7. 很棒的Sketch动画教程
  8. js 取到相同的字符串 返回对应的下标
  9. 不使用ASP.NET服务器端控件(包括form表单不加runat=&quot;server&quot;)来触发.cs里的事件(方法),(适用于有代码洁癖者)。
  10. C#整理3——运算符和语句
  11. activity的生命周期【转】
  12. 小白之微信小程序第一次完成搭建本地服务与页面进行交互
  13. Python 汉诺塔
  14. JS实现数组去重方法整理
  15. java web实现在cookie中保存用户名和密码,用户自动登入
  16. CorelCAD for Mac(绘图设计软件)破解版安装
  17. leetcode-algorithms-3 Longest Substring Without Repeating Characters
  18. 用Eclipse开发Androd应用程序时,自带虚机模拟器太慢了,怎么办
  19. 基于FPGA的线阵CCD实时图像采集系统
  20. ListBox的虚拟可视化技术

热门文章

  1. javascript中的this指向问题总结
  2. iOS开发 非常全的三方库、插件、大牛博客等等
  3. startActivityForResult()方法具体解释
  4. python3中numpy函数tile的用法
  5. Java中关键字throw和throws的区别
  6. Mybatis全面详解——上(学习总结)
  7. Android自定义组件系列【9】——Canvas绘制折线图
  8. ConcurrentHashMap 内部实现分析
  9. sublim课程2 sublim编辑器的使用(敲代码的时候把这个放旁边用)
  10. Colder框架硬核更新(Sharding+IOC)