javaEmail邮件发送多人 附件

工具类
MessageTools.java

 
package com.cm.util;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.AuthenticationFailedException;
import javax.mail.Authenticator;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;

import com.cm.dto.EmailDto;


public class MessageTools
{
// 邮件服务器及登录用户、密码,发送邮箱

private static String userName;// 用户名

private static String passWord;// 密码
private static String smtpServer;// 邮件服务器

private static String from;// 发件人

private static String mail_socksProxyHost;// 本地代理host

private static String mail_socksProxyPort;// 本地代理prot

private static String mail_socksProxyUser;// 本地代理用户

private static String mail_socksProxyPassword;// 本地代理密码


// 从配置文件中获取相应的账户信息

static
{
try
{
Properties props = new Properties();
props.load(MessageTools.class.getResourceAsStream("mail.property"));
userName = props.getProperty("mail_username");// 设置发件人用户名
passWord = props.getProperty("mail_password");// 设置发件人密码

smtpServer = props.getProperty("mail.smtp.server");// 设置发件人邮件服务器
from = props.getProperty("mail_from_addr");// 设置发件人邮箱

mail_socksProxyHost = props.getProperty("mail_socksProxyHost");//代理地址
mail_socksProxyPort = props.getProperty("mail_socksProxyPort");//代理端口号
mail_socksProxyUser = props.getProperty("mail_socksProxyUser");//代理用户名
mail_socksProxyPassword = props.getProperty("mail_socksProxyPassword");//代理密码

} catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}

/**
* @发送邮件

* @return 成功-true;失败-false
* @throws CBFException
*/
public static boolean send(List<String> tolist,List<String> cclist,EmailDto dto)
{
try
{

Properties props = System.getProperties();
props.setProperty("proxySet", "true");

if(mail_socksProxyHost!=null && !mail_socksProxyHost.equals(""))
{
props.setProperty("socksProxyHost", mail_socksProxyHost);//代理地址
}

if(mail_socksProxyPort!=null && !mail_socksProxyPort.equals(""))
{
props.setProperty("socksProxyPort", mail_socksProxyPort);//代理端口号

}

if(mail_socksProxyUser!=null && !mail_socksProxyUser.equals(""))
{
props.setProperty("socksProxyUser",mail_socksProxyUser);
}
if(mail_socksProxyPassword!=null && ! mail_socksProxyPassword.equals(""))
{
props.setProperty("socksProxyPassword",mail_socksProxyPassword);
}
props.setProperty("mail.smtp.host", smtpServer);// 设置邮件发送服务器
props.put("mail.smtp.auth", "true");
props.put("mail.debug", "false");

// 使用验证
Session session = Session.getDefaultInstance(props,
new Authenticator()
{
protected javax.mail.PasswordAuthentication getPasswordAuthentication()
{
return new javax.mail.PasswordAuthentication(
from, passWord);
}
});

MimeMessage message = new MimeMessage(session);


if(tolist.size()>0){
for (int i = 0; i < tolist.size(); i++) {

to = tolist.get(i);
}
}

message.setFrom(new InternetAddress(from));// 设置发件人信息

//是否有收件人
if(tolist.size()>0){

Address[] addressTO = new InternetAddress[tolist.size()]; //收件人

for (int i = 0; i < tolist.size(); i++) {
addressTO[i] = new InternetAddress(tolist.get(i));
}

message.setRecipients(Message.RecipientType.TO,addressTO);//设置收件人信息

if(cclist.size()>0){
Address[] addressCC = new InternetAddress[cclist.size()];//抄送人

for (int j = 0; j < cclist.size(); j++) {
addressCC[j] = new InternetAddress(cclist.get(j));
}
message.setRecipients(Message.RecipientType.CC, addressCC);
}

message.setSubject(dto.getSubject());//设置邮件主题
Multipart mm = new MimeMultipart(); // 新建一个MimeMultipart对象用来存放多个BodyPart对象
BodyPart mdp = new MimeBodyPart(); // 新建一个存放信件内容的BodyPart对象
mdp.setContent(dto.getBody(), "text/html;charset=gb2312"); // 给BodyPart对象设置内容和格式/编码方式
mm.addBodyPart(mdp); // 将含有信件内容的BodyPart加入到MimeMultipart对象中

BodyPart mbpf = new MimeBodyPart();

FileDataSource fds = new FileDataSource(dto.getFilename());//附件

mbpf.setDataHandler(new DataHandler(fds));

mbpf.setFileName(MimeUtility.encodeWord(fds.getName(), "GB2312",null));

mm.addBodyPart(mbpf);

message.setContent(mm); // 把mm作为消息对象的内容

message.setSentDate(new Date());//设置发送时间

message.saveChanges();
Transport.send(message);//发送邮件操作

return true;
}

} catch (AuthenticationFailedException afx)
{
afx.printStackTrace();
} catch (Exception ex)
{
ex.printStackTrace();
}
return false;
}


public static void main(String[] args)
{
List<String> tolist = new ArrayList<String>(); // 发件人集合
tolist.add("XXX@163.com");
tolist.add("XXX@163.com");
List<String> cclist = new ArrayList<String>();// 抄送人集合
cclist.add("XXX@126.com");
cclist.add("XXX@126.com");
EmailDto dto = new EmailDto();
dto.setSubject("这是测试邮件");// 设置邮件标题
dto.setBody("<h1>" + "<font color='RED'>" + "邮件测试"
+ ".</font></h1>");// 设置邮件的格式
dto.setFilename("C:\\exp\\test.xls"); // 附件
MessageTools tools = new MessageTools();
tools.send(tolist, cclist, dto);
}
}




EmailDto.java

package com.cm.dto;

import java.io.Serializable;

import com.cm.util.PageInfo;

public class EmailDto extends PageInfo implements Serializable
{
private String id;
private String title; //邮件标题
private String emailAddr;//邮件地址
private String content; //邮件内容
private String type; //邮件类型
private String crtTm; //创建时间
private String remark; //说明
private String stateChar;//状态

private String sendNum; //发送次数

private String updTm; //发送时间

private String crtCde; //发件人

private String from; //发件人

private String to; //收件人

private String subject; //设置邮件主题
private String body; //设置邮件信息内容
private String server; //发送邮件服务器
private String socksProxyHost;//设置代理服务器地址
private String socksProxyPort;//设置代理服务器端口号
private String socksProxyUser;//设置代理服务器用户

private String socksProxyPassword;//设置代理服务器密码

private String passWord;//发送者账户密码

private String userName;//发送者账户名称

private String filename;//附件


public String getPassWord()
{
return passWord;
}
public void setPassWord(String passWord)
{
this.passWord = passWord;
}
public String getUserName()
{
return userName;
}
public void setUserName(String userName)
{
this.userName = userName;
}
public String getSocksProxyHost()
{
return socksProxyHost;
}
public void setSocksProxyHost(String socksProxyHost)
{
this.socksProxyHost = socksProxyHost;
}
public String getSocksProxyPort()
{
return socksProxyPort;
}
public void setSocksProxyPort(String socksProxyPort)
{
this.socksProxyPort = socksProxyPort;
}
public String getSocksProxyUser()
{
return socksProxyUser;
}
public void setSocksProxyUser(String socksProxyUser)
{
this.socksProxyUser = socksProxyUser;
}
public String getSocksProxyPassword()
{
return socksProxyPassword;
}
public void setSocksProxyPassword(String socksProxyPassword)
{
this.socksProxyPassword = socksProxyPassword;
}
public String getBody()
{
return body;
}
public void setBody(String body)
{
this.body = body;
}
public String getSubject()
{
return subject;
}
public void setSubject(String subject)
{
this.subject = subject;
}
public String getFrom()
{
return from;
}
public void setFrom(String from)
{
this.from = from;
}
public String getTo()
{
return to;
}
public void setTo(String to)
{
this.to = to;
}
public String getTitle()
{
return title;
}
public void setTitle(String title)
{
this.title = title;
}
public String getEmailAddr()
{
return emailAddr;
}
public void setEmailAddr(String emailAddr)
{
this.emailAddr = emailAddr;
}
public String getContent()
{
return content;
}
public void setContent(String content)
{
this.content = content;
}
public String getType()
{
return type;
}
public void setType(String type)
{
this.type = type;
}
public String getCrtTm()
{
return crtTm;
}
public void setCrtTm(String crtTm)
{
this.crtTm = crtTm;
}
public String getRemark()
{
return remark;
}
public void setRemark(String remark)
{
this.remark = remark;
}
public String getStateChar()
{
return stateChar;
}
public void setStateChar(String stateChar)
{
this.stateChar = stateChar;
}
public String getSendNum()
{
return sendNum;
}
public void setSendNum(String sendNum)
{
this.sendNum = sendNum;
}
public String getUpdTm()
{
return updTm;
}
public void setUpdTm(String updTm)
{
this.updTm = updTm;
}
public String getCrtCde()
{
return crtCde;
}
public void setCrtCde(String crtCde)
{
this.crtCde = crtCde;
}
public void setServer(String server)
{
this.server = server;
}
public String getServer()
{
return server;
}
public void setId(String id)
{
this.id = id;
}
public String getId()
{
return id;
}
public String getFilename() {
return filename;
}
public void setFilename(String filename) {
this.filename = filename;
}

}



property文件中配置系统邮箱信息 和 代理信息
mail.property

mail.smtp.server = smtp.163.com
mail_from_addr = XXX@163.com
mail_username = XXX
mail_password = XXX

mail_socksProxyHost =
mail_socksProxyPort =
mail_socksProxyUser =
mail_socksProxyPassword =
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值