java发送邮件的具体实现

 更新时间:2013年09月15日 14:54:53   作者:  
这篇文章介绍了java发送邮件的具体实现,有需要的朋友可以参考一下

首先是继承自javax.mail.Authenticator的一个具体类。getPasswordAuthentication()方法也就是构建一个PasswordAuthentication对象并返回,有点费解JAVA Mail这样的设计意图,可能javax.mail.Authenticator为我们提供了附加的保证安全的验证措施吧。

复制代码 代码如下:

package com.mzule.simplemail;

import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;

/**
* 服务器邮箱登录验证
*
* @author MZULE
*
*/
public class MailAuthenticator extends Authenticator {

/**
* 用户名(登录邮箱)
*/
private String username;
/**
* 密码
*/
private String password;

/**
* 初始化邮箱和密码
*
* @param username 邮箱
* @param password 密码
*/
public MailAuthenticator(String username, String password) {
this.username = username;
this.password = password;
}

String getPassword() {
return password;
}

@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}

String getUsername() {
return username;
}

public void setPassword(String password) {
this.password = password;
}

public void setUsername(String username) {
this.username = username;
}

}

  调用上面的邮箱发送器,可以构建一个工厂类,工厂类可以封装创建的过程,所以通过读配置文件获取邮箱用户名,密码都会变得十分方便。下面的代码是我在写观察者模式的时候写的,只是简单演示了工厂类。

复制代码 代码如下:

package com.mzule.dp.observer.factory;

import com.mzule.dp.observer.constant.MailSenderType;
import com.mzule.simplemail.SimpleMailSender;

/**
* 发件箱工厂
*
* @author MZULE
*
*/
public class MailSenderFactory {

/**
* 服务邮箱
*/
private static SimpleMailSender serviceSms = null;

/**
* 获取邮箱
*
* @param type 邮箱类型
* @return 符合类型的邮箱
*/
public static SimpleMailSender getSender(MailSenderType type) {
if (type == MailSenderType.SERVICE) {
if (serviceSms == null) {
serviceSms = new SimpleMailSender("invisible@126.com",
"hidden");
}
return serviceSms;
}
return null;
}

}

  发送邮件,还是观察者模式DEMO里面的代码,呼呼。

复制代码 代码如下:

package com.mzule.dp.observer.observer;

import java.util.ArrayList;
import java.util.List;
import java.util.Observable;
import java.util.Observer;

import javax.mail.MessagingException;
import javax.mail.internet.AddressException;

import com.mzule.dp.observer.constant.MailSenderType;
import com.mzule.dp.observer.factory.MailSenderFactory;
import com.mzule.dp.observer.po.Product;
import com.mzule.simplemail.SimpleMailSender;

public class ProductPriceObserver implements Observer {

@Override
public void update(Observable obj, Object arg) {
Product product = null;
if (obj instanceof Product) {
product = (Product) obj;
}
if (arg instanceof Float) {
Float price = (Float) arg;
Float decrease = product.getPrice() - price;
if (decrease > 0) {
// 发送邮件
SimpleMailSender sms = MailSenderFactory
.getSender(MailSenderType.SERVICE);
List<String> recipients = new ArrayList<String>();
recipients.add("invisible@qq.com");
recipients.add("invisible@gmail.com");
try {
for (String recipient : recipients) {
sms.send(recipient, "价格变动", "您关注的物品"
+ product.getName() + "降价了,由"
+ product.getPrice() + "元降到" + price + "元,降幅达"
+ decrease + "元人民币。赶快购物吧。");
}
} catch (AddressException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
}

}

相关文章

  • 使用Java实现简单串口通信

    使用Java实现简单串口通信

    这篇文章主要介绍了使用Java实现简单串口通信,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 如何实现Java中一个简单的LinkedList

    如何实现Java中一个简单的LinkedList

    LinkedList与ArrayList都是List接口的具体实现类。下面将介绍如何实现一个简单的LinkedList,具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • 详解Java从工厂方法模式到 IOC/DI思想

    详解Java从工厂方法模式到 IOC/DI思想

    工厂方法(Factory Method)模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口。本文将详细介绍Java从工厂方法模式到 IOC/DI思想。
    2021-06-06
  • JAVA8妙用Optional解决判断Null为空的问题方法

    JAVA8妙用Optional解决判断Null为空的问题方法

    本文主要介绍了JAVA8妙用Optional解决判断Null为空的问题方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • spring mail借助qq邮箱服务器发送邮件

    spring mail借助qq邮箱服务器发送邮件

    这篇文章主要介绍了spring mail借助qq邮箱服务器发送邮件的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • 一文带你彻底剖析Java中Synchronized原理

    一文带你彻底剖析Java中Synchronized原理

    Synchronized是Java中的隐式锁,它的获取锁和释放锁都是隐式的,完全交由JVM帮助我们操作,在了解Synchronized关键字之前,首先要学习的知识点就是Java的对象结构,本文介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • 关于synchronized、volatile、ReentrantLock的区别与对比

    关于synchronized、volatile、ReentrantLock的区别与对比

    这篇文章主要介绍了关于synchronized、volatile、ReentrantLock的区别与对比,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • Mybatis plus的自动填充与乐观锁的实例详解(springboot)

    Mybatis plus的自动填充与乐观锁的实例详解(springboot)

    这篇文章主要介绍了Mybatis plus的自动填充与乐观锁的实例详解(springboot),本文给大家介绍的非常详细对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • 浅谈java封装

    浅谈java封装

    封装封装就是将属性私有化,提供公有的方法访问私有的属性。*实现封装的步骤:(1)修改属性的可见性来限制对属性的访问。(2)为每个属性创建一对赋值方法和取值方法,用于对这些属性的访问。(3)在赋值和取值方法中,加入对属性的存取限制。
    2015-03-03
  • java控制台输出版多人聊天室

    java控制台输出版多人聊天室

    这篇文章主要为大家详细介绍了java控制台输出版多人聊天室,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-09-09

最新评论