java 多人发送邮件_Java写邮件多人发送及附件

maven导入jar包

4.0.0

MailTest

MailTest

WAR

0.0.1-SNAPSHOT

MailTest Maven Webapp

http://maven.apache.org

1.2

junit

junit

4.11

javax.mail

mail

1.4.7

jstl

jstl

${jstl.version}

taglibs

standard

1.1.2

javax.servlet

javax.servlet-api

3.0.1

provided

javax.servlet

jstl

1.1.2

provided

javax.servlet.jsp

javax.servlet.jsp-api

2.3.1

provided

org.apache.commons

commons-lang3

3.3.2

org.slf4j

log4j-over-slf4j

1.6.2

commons-lang

commons-lang

2.6

commons-lang

commons-lang

2.6

org.apache.maven.plugins

maven-war-plugin

3.0.0

false

创建项目

528c3bfd253264dde55d7cc81f269701.png

编辑MailInfo

package util;

import java.util.List;

import java.util.Properties;

public class MailInfo {

private String mailServerHost; // 发送邮件的服务器的IP

private String mailServerPort = "587"; // 发送邮件的服务器端口

private String userName; // 登陆邮件发送服务器的用户名

private String userPassword; // 登陆邮件发送服务器的密码

private String fromAddress; // 邮件发送者的地址

private String toAddress; // 邮件接收者的地址管控

private String ccAddress; // 邮件抄送者的地址

private String fromUserName = "邮件测试"; // 邮件发送者的名称,显示在他人邮件的发件人

private String mailSubject; // 邮件主题

private String mailContent;// 邮件的文本内容

private String filename;//文件路径

private boolean authValidate = true; // 是否需要身份验证

private Properties properties; // 邮件会话属性

public String getFilename() {

return filename;

}

public void setFilename(String filename) {

this.filename = filename;

}

public MailInfo() {

}

public MailInfo(String serverHost, String user, String password, String fromAddress, String title, String content, List receiver, List ccList, String filename) {

this.mailServerHost = serverHost;

this.userName = user;

this.userPassword = password;

this.fromAddress = fromAddress;

this.toAddress = listToStringFormat(receiver);

this.ccAddress = ccList == null ? "" : listToStringFormat(ccList);

this.mailSubject = title;

this.mailContent = content;

this.filename = filename;

}

private synchronized String listToStringFormat(List list) {

StringBuilder stringBuilder = new StringBuilder();

for (int i = 0; i < list.size(); i++) {

if (i == list.size() - 1) {

stringBuilder.append(list.get(i));

} else {

stringBuilder.append(list.get(i)).append(",");

}

}

return stringBuilder.toString();

}

public String getMailServerHost() {

return mailServerHost;

}

public void setMailServerHost(String mailServerHost) {

this.mailServerHost = mailServerHost;

}

public String getMailServerPort() {

return mailServerPort;

}

public void setMailServerPort(String mailServerPort) {

this.mailServerPort = mailServerPort;

}

public String getUserName() {

return userName;

}

public void setUserName(String userName) {

this.userName = userName;

}

public String getUserPassword() {

return userPassword;

}

public void setUserPassword(String userPassword) {

this.userPassword = userPassword;

}

public String getFromAddress() {

return fromAddress;

}

public void setFromAddress(String fromAddress) {

this.fromAddress = fromAddress;

}

public String getToAddress() {

return toAddress;

}

public void setToAddress(String toAddress) {

this.toAddress = toAddress;

}

public String getCcAddress() {

return ccAddress;

}

public void setCcAddress(String ccAddress) {

this.ccAddress = ccAddress;

}

public String getMailSubject() {

return mailSubject;

}

public void setMailSubject(String mailSubject) {

this.mailSubject = mailSubject;

}

public String getMailContent() {

return mailContent;

}

public void setMailContent(String mailContent) {

this.mailContent = mailContent;

}

public String getFromUserName() {

return fromUserName;

}

public void setFromUserName(String fromUserName) {

this.fromUserName = fromUserName;

}

public boolean isAuthValidate() {

return authValidate;

}

public void setAuthValidate(boolean authValidate) {

this.authValidate = authValidate;

}

public Properties getProperties() {

Properties p = new Properties();

p.put("mail.smtp.host", this.mailServerHost);

p.put("mail.smtp.port", this.mailServerPort);

p.put("mail.smtp.auth", authValidate ? "true" : "false");

p.put("mail.smtp.starttls.enable", "true");

return p;

}

public void setProperties(Properties properties) {

this.properties = properties;

}

}

编辑MessageSender

package util;

import org.apache.commons.lang.StringUtils;

import org.apache.log4j.Logger;

import javax.activation.DataHandler;

import javax.activation.DataSource;

import javax.activation.FileDataSource;

import javax.mail.*;

import javax.mail.internet.*;

import java.io.UnsupportedEncodingException;

import java.util.ArrayList;

import java.util.Date;

import java.util.List;

import java.util.Properties;

/**

*发送邮件工具类

*/

public class MessageSender {

private static final Logger logger = Logger.getLogger(MessageSender.class);

/**

*

* 发送邮件-邮件内容为文本格式

* @param mailInfo

* @return

*/

public static boolean sendMail(MailInfo mailInfo) {

try {

Message mailMessage = generateBaseInfo(mailInfo);

// 创建消息部分

BodyPart messageBodyPart = new MimeBodyPart();

messageBodyPart.setText(mailInfo.getMailContent());

// 创建多重消息

Multipart multipart = new MimeMultipart();

// 设置文本消息部分

multipart.addBodyPart(messageBodyPart);

// 附件部分

messageBodyPart = new MimeBodyPart();

// 设置要发送附件的文件路径

DataSource source = new FileDataSource(mailInfo.getFilename());

messageBodyPart.setDataHandler(new DataHandler(source));

// messageBodyPart.setFileName(filename);

// 处理附件名称中文(附带文件路径)乱码问题

messageBodyPart.setFileName(MimeUtility.encodeText(mailInfo.getFilename()));

multipart.addBodyPart(messageBodyPart);

// 发送完整消息

mailMessage.setContent(multipart);

// mailMessage.setText(mailInfo.getMailContent());// 设置邮件消息的主要内容

Transport.send(mailMessage); // 发送邮件

System.out.println("【 TEXT 邮件发送完毕,成功时间: " + System.currentTimeMillis()+ " 】");

return true;

} catch (MessagingException ex) {

ex.printStackTrace();

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

return false;

}

/**

* 邮件内容为html格式

* @param mailInfo

* @return

*/

public static boolean sendHtmlMail(MailInfo mailInfo) {

try {

Message mailMessage = generateBaseInfo(mailInfo);

Multipart mainPart = new MimeMultipart();// MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象

BodyPart html = new MimeBodyPart();// 创建一个包含HTML内容的MimeBodyPart

html.setContent(mailInfo.getMailContent(), "text/html; charset=utf-8");// 设置HTML内容

mainPart.addBodyPart(html);

mailMessage.setContent(mainPart);// 将MiniMultipart对象设置为邮件内容

Transport.send(mailMessage);// 发送邮件

System.out.println("【 HTML 邮件发送完毕,成功时间: " + System.currentTimeMillis() + " 】");

System.out.println("send ok!");

return true;

} catch (MessagingException e) {

e.printStackTrace();

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

return false;

}

/**

* 邮件信息安全转换

* @param mailInfo

* @return

* @throws UnsupportedEncodingException

* @throws MessagingException

*/

public static Message generateBaseInfo(MailInfo mailInfo) throws UnsupportedEncodingException, MessagingException {

// 判断是否需要身份认证

MailAuthenticator authenticator = null;

Properties pro = mailInfo.getProperties();

// pro.getProperty()

// 如果需要身份认证,则创建一个密码验证器

if (mailInfo.isAuthValidate()) {

authenticator = new MailAuthenticator(mailInfo.getUserName(),

mailInfo.getUserPassword());

}

// 根据邮件会话属性和密码验证器构造一个发送邮件的session

Session sendMailSession = Session.getInstance(pro, authenticator);

Message mailMessage = null;

mailMessage = new MimeMessage(sendMailSession); // 根据session创建一个邮件消息

Address from = new InternetAddress(mailInfo.getFromAddress(), mailInfo.getFromUserName()); // 创建邮件发送者地址

mailMessage.setFrom(from); // 设置邮件消息的发送者

if (mailInfo.getToAddress() != null && mailInfo.getToAddress().contains(",")) {

mailMessage.setRecipients(Message.RecipientType.TO, InternetAddress.parse(mailInfo.getToAddress()));// Message.RecipientType.TO属性表示接收者的类型为TO

} else {

Address to = new InternetAddress(mailInfo.getToAddress()); // 创建邮件的接收者地址,并设置到邮件消息中

mailMessage.setRecipient(Message.RecipientType.TO, to);// Message.RecipientType.TO属性表示接收者的类型为TO

}

if (StringUtils.isNotBlank(mailInfo.getCcAddress())) {

if (mailInfo.getCcAddress().contains(",")) {

mailMessage.setRecipients(Message.RecipientType.CC, InternetAddress.parse(mailInfo.getCcAddress())); // Message.RecipientType.CC属性表示接收者的类型为CC

} else {

Address cc = new InternetAddress(mailInfo.getCcAddress()); // 创建邮件的抄送者地址,并设置到邮件消息中

mailMessage.setRecipient(Message.RecipientType.CC, cc); // Message.RecipientType.CC属性表示接收者的类型为CC

}

}

mailMessage.setSubject(mailInfo.getMailSubject());// 设置邮件消息的主题

mailMessage.setSentDate(new Date());// 设置邮件消息发送的时间

return mailMessage;

}

}

编辑MailAuthenticator

package util;

import javax.mail.Authenticator;

import javax.mail.PasswordAuthentication;

/**

* 邮件安全认证

*/

public class MailAuthenticator extends Authenticator {

String userName;

String userPassword;

public MailAuthenticator() {

super();

}

public MailAuthenticator(String user, String pwd) {

super();

userName = user;

userPassword = pwd;

}

public PasswordAuthentication getPasswordAuthentication() {

return new PasswordAuthentication(userName, userPassword);

}

}

写一个MailDemo进行测试

package test;

import java.util.ArrayList;

import java.util.List;

import util.MailInfo;

import util.MessageSender;

public class MailDemo {

public static void main(String[] args) {

mail();

}

public static void mail(){

String serverHost="smtp.qq.com";

String user="417028634@qq.com"; //用户名

String password="chcvuocdaffbbhfh"; //密码

String fromAddress=user; //邮件地址

String title="邮件测试Demo";

String content="邮件测试成功";

String fileName="E:\\a.txt";

List receiver=new ArrayList();

receiver.add("1141561145@qq.com");

List ccReceiver=new ArrayList();

//添加抄送人

ccReceiver.add("1942499853@qq.com");

ccReceiver.add("15136179776@163.com");

MailInfo mailInfo = new MailInfo(serverHost,user,password,fromAddress,title,content,receiver,ccReceiver, fileName);

MessageSender.sendMail(mailInfo);

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值