java邮件发送客户端

基于 java mail包做的邮件发送客户端

[color=green]发送客户端[/color]
package com.gbcom.protocol.mail;

import java.util.Date;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.Properties;
import java.util.Set;
import java.util.Vector;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

import org.apache.log4j.Logger;

/**
* 邮件发送客户端
* @author SYZ
* @date 2016-12-8 下午03:20:54
* @version 1.0.0
* @see com.gbcom.protocol.mail.MailSender
*/
public class MailSender {

public static final Logger logger =Logger.getLogger(MailSender.class);

private final Properties props;//仅构造函数可以赋值,其它只能读取,保证线程安全
private final String MAIL_SENDER_NAME;
private final String MAIL_SENDER_PASSWORD;
private final String MAIL_SENDER_ADDR;
private final Set<String> MAIL_RECEIVER_SET ;

private static final MailSender instance = new MailSender();

private MailSender(){
// 1.0 封装参数,从模板获取
props = new Properties();
props.put("mail.host", "smtp.163.com"); 服务器地址
props.put("mail.smtp.port", "" + 25); // 端口号
props.put("mail.transport.protocol","smtp");// 暂时使用SMTP协议,可去掉
props.put("mail.smtp.auth", "true");

//自定义属性
Set<String> receiver = new HashSet<String>();
receiver.add("receivername@163.com");
MAIL_SENDER_NAME = "username";
MAIL_SENDER_PASSWORD = "passwd";
MAIL_SENDER_ADDR="username@163.com";
MAIL_RECEIVER_SET = receiver;
}

/**
* 获取单例
* @return MailSender
*/
public static MailSender getInstance(){
return instance;
}

public void sendMail(String subject,String content) throws MessagingException{
Message msg = buildDefaultMsg();
msg.setSubject(subject);// 设定信中的主题
msg.setSentDate(new Date());// 设定送信的时间
msg.setContent(content, "text/html;charset=utf-8");
msg.saveChanges();
//4.0发送
Transport.send(msg);

}
private Message buildDefaultMsg() throws MessagingException {
// 2.0 产生新的邮件Session 服务
SmtpAuthentic auth = new SmtpAuthentic(MAIL_SENDER_NAME, MAIL_SENDER_PASSWORD);
Session mailSession = Session.getInstance(props, auth);//带简单鉴权
mailSession.setDebug(true);邮件打印

// 3.0 封装邮件Msg
Message msg = new MimeMessage(mailSession);
msg.setFrom(new InternetAddress(MAIL_SENDER_ADDR));// 设定传送邮件的发信人
InternetAddress address = null;
for (String revAddress : MAIL_RECEIVER_SET) {
address = new InternetAddress(revAddress);
msg.addRecipient(Message.RecipientType.TO, address);
}

msg.setDataHandler(new javax.activation.DataHandler("alarm",
"text/html"));
return msg;
}

public void sendMail(String subject,String context,Set<String> files){

}




/**
* 发送邮件方法
*
*
* @param sendAddress
* : 发件人地址
* @param name
* : 发件人姓名
* @param password
* : 发件人密码
* @param emailServer
* : 发送的邮箱服务器地址 例smtp.163.com
* @param revAddresses
* : 收件箱地址
* @param title
* : 发送邮件的主题
* @param content
* : 发送邮件的内容 可以是超文本标记语言
* @throws MessagingException
* MessagingException
* @throws AddressException
* AddressException
*
*/
public static void sendSmtpEmail(String sendAddress, String name,
String password, String emailServer, String[] revAddresses,
String title, String content) throws AddressException,
MessagingException {
if (revAddresses == null || revAddresses.length == 0) {
return;
}

// 1.0 设置邮件协议属性
Properties props = new Properties();
props.put("mail.host", emailServer); 服务器地址
props.put("mail.smtp.port", "" + 25); // 端口号
props.put("mail.transport.protocol","smtp");// 暂时使用SMTP协议,可去掉
props.put("mail.smtp.auth", "true");

// 2.0 产生新的邮件Session 服务
// Session mailSession = Session.getDefaultInstance(props, auth);//不带鉴权

// 需鉴权,用户名及密码::用户名为@前的部分,如"pujing@gbcom.com.cn",用户名为:pujing
SmtpAuthentic auth = new SmtpAuthentic(name, password);
Session mailSession = Session.getInstance(props, auth);//带简单鉴权
mailSession.setDebug(true);邮件打印

// 3.0 封装邮件Msg
Message msg = new MimeMessage(mailSession);
msg.setFrom(new InternetAddress(sendAddress));// 设定传送邮件的发信人
// 设定传送邮件至收信人的信箱列表
InternetAddress address = null;
for (String revAddress : revAddresses) {
address = new InternetAddress(revAddress);
msg.addRecipient(Message.RecipientType.TO, address);
}


msg.setSubject(title);// 设定信中的主题
msg.setSentDate(new Date());// 设定送信的时间

// 可以发送超文本的邮件 html格式 第一个参数可以指定为任意字符串
// 设定传送信的MIME Type
msg.setDataHandler(new javax.activation.DataHandler("alarm",
"text/html"));

// content为发送的内容
msg.setContent(content, "text/html;charset=utf-8");
msg.saveChanges();
Transport.send(msg);
}

/**
* 发送邮件方法
*
* @param sendAddress
* : 发件人地址
* @param name
* : 发件人姓名
*
*
* @param password
* : 发件人密码
*
*
* @param emailServer
* : 发送的邮箱服务器地址 例smtp.163.com
* @param revAddresses
* : 收件箱地址
* @param title
* : 发送邮件的主题
* @param content
* : 发送邮件的内容 可以是超文本标记语言
* @param file
* : 发送邮件的附件
* @throws MessagingException
* MessagingException
* @throws AddressException
* AddressException
*
*/
public static void sendSmtpEmail(String sendAddress, String name,
String password, String emailServer, String[] revAddresses,
String title, String content, Vector<String> file)
throws AddressException, MessagingException {
if (revAddresses == null || revAddresses.length == 0) {
return;
}
// 设定所要用的Mail 服务器和所使用的传输协议

Properties props = new Properties();
props.put("mail.host", emailServer);
props.put("mail.smtp.auth", "true");
SmtpAuthentic auth = new SmtpAuthentic(name, password);
Session mailSession = Session.getInstance(props, auth);
boolean sessionDebug = false;
mailSession.setDebug(sessionDebug);
Message msg = new MimeMessage(mailSession);
msg.setFrom(new InternetAddress(sendAddress));
InternetAddress address = null;
for (String revAddress : revAddresses) {
address = new InternetAddress(revAddress);
msg.addRecipient(Message.RecipientType.TO, address);
}
msg.setSubject(title);
msg.setSentDate(new Date());
// msg.setDataHandler(new
// javax.activation.DataHandler("alarm","text/html"));
// multipart
Multipart mp = new MimeMultipart();
MimeBodyPart mbpContent = new MimeBodyPart();
mbpContent.setText(content);
mp.addBodyPart(mbpContent);

/* 往邮件中添加附件 */
Enumeration<String> efile = file.elements();
String fileName;
while (efile.hasMoreElements()) {
MimeBodyPart mbpFile = new MimeBodyPart();
fileName = efile.nextElement().toString();
FileDataSource fds = new FileDataSource(fileName);
mbpFile.setDataHandler(new DataHandler(fds));
mbpFile.setFileName((fds.getName()));
mp.addBodyPart(mbpFile);
}
msg.setContent(mp);

msg.saveChanges();
Transport.send(msg);
}

/**
* @param args
*/
public static void main(String[] args) {
try {
for(int i=0;i<10;i++){
MailSender.getInstance().sendMail("hellow", "中国馆");
}
} catch (MessagingException e) {
e.printStackTrace();
}
}

}


用户信息
package com.gbcom.protocol.mail;

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

/**
* 封装邮件用户信息
* @author SYZ
* @date 2016-12-8 下午03:23:08
* @version 1.0.0
* @see com.gbcom.protocol.mail.SmtpAuthentic
*/
public class SmtpAuthentic extends Authenticator {

/** Creates a new instance of Authentic */
public SmtpAuthentic() {

}

/**
*
* TODO description here
*
* @param name
* name
* @param password
* password
*/
public SmtpAuthentic(String name, String password) {
this.setUsername(name);
this.setPwd(password);
}

// username为发送邮箱@前面的部分

private String username = "";

// pwd为发送邮箱的密码
private String pwd = "";

@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(getUsername(), getPwd());
}

/**
*
* TODO description here
*
* @return username
*/
public String getUsername() {
return username;
}

/**
*
* TODO description here
*
* @param username
* username
*/
public void setUsername(String username) {
this.username = username;
}

/**
*
* TODO description here
*
* @return pwd
*/
public String getPwd() {
return pwd;
}

/**
*
* TODO description here
*
* @param pwd
* pwd
*/
public void setPwd(String pwd) {
this.pwd = pwd;
}

}


mail的简单例子
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值