java 邮件发送 多人_java 发送邮件(可发送多人,抄送多人,可带附件)

该博客详细介绍了如何使用Java编程发送邮件,包括设置SMTP主机、发件人信息,创建MIME邮件对象,设置邮件主题、正文和附件,同时支持发送给多人并抄送给指定收件人。代码示例中包含了配置文件读取,以实现动态配置邮件服务器信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

邮件发送器

import java.io.File;

import java.io.UnsupportedEncodingException;

import java.security.GeneralSecurityException;

import java.util.List;

import java.util.Properties;

import javax.activation.DataHandler;

import javax.activation.DataSource;

import javax.activation.FileDataSource;

import javax.mail.Address;

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 javax.mail.internet.MimeUtility;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

/**

* @Description: 邮件发送器

* @author zk

import java.io.IOException;

import java.io.InputStream;

import java.util.Properties;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

/**

* @Description: 邮件发送配置信息加载类

* @author zk

* @date 2017年1月3日 上午10:52:12

* @version V1.0

*/

public class ConfigLoader {

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

// 配置文件路径

private static String mailPath = "mail.properties";

// 邮件发送SMTP主机

private static String server;

// 发件人邮箱地址

private static String sender;

// 发件人邮箱用户名

private static String username;

// 发件人邮箱密码

private static String password;

// 发件人显示昵称

private static String nickname;

private static String cc;

static {

// 类初始化后加载配置文件

InputStream in = ConfigLoader.class.getClassLoader()

.getResourceAsStream(mailPath);

Properties props = new Properties();

try {

props.load(in);

} catch (IOException e) {

logger.error("load mail setting error,pleace check the file path:"

+ mailPath);

logger.error(e.toString(), e);

}

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

server = props.getProperty("mail.server");

sender = props.getProperty("mail.sender");

username = props.getProperty("mail.username");

password = props.getProperty("mail.password");

nickname = props.getProperty("mail.nickname");

cc = props.getProperty("mail.cc");

props.put("mail.smtp.ssl.trust", server);

logger.debug("load mail setting success,file path:" + mailPath);

}

public static String getMailPath() {

return mailPath;

}

public static String getServer() {

return server;

}

public static String getSender() {

return sender;

}

public static String getUsername() {

return username;

}

public static String getPassword() {

return password;

}

public static String getNickname() {

return nickname;

}

public static void setMailPath(String mailPath) {

ConfigLoader.mailPath = mailPath;

}

public static String getCc() {

return cc;

}

public static void setCc(String cc) {

ConfigLoader.cc = cc;

}

}

package ibp.ioc.service.aml.job.mailsend.bo;

import java.io.IOException;

import java.io.InputStream;

import java.util.Properties;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

/**

* @Description: 邮件发送配置信息加载类

* @author zk

* @date 2017年1月3日 上午10:52:12

* @version V1.0

*/

public class ConfigLoader {

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

// 配置文件路径

private static String mailPath = "mail.properties";

// 邮件发送SMTP主机

private static String server;

// 发件人邮箱地址

private static String sender;

// 发件人邮箱用户名

private static String username;

// 发件人邮箱密码

private static String password;

// 发件人显示昵称

private static String nickname;

private static String cc;

static {

// 类初始化后加载配置文件

InputStream in = ConfigLoader.class.getClassLoader()

.getResourceAsStream(mailPath);

Properties props = new Properties();

try {

props.load(in);

} catch (IOException e) {

logger.error("load mail setting error,pleace check the file path:"

+ mailPath);

logger.error(e.toString(), e);

}

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

server = props.getProperty("mail.server");

sender = props.getProperty("mail.sender");

username = props.getProperty("mail.username");

password = props.getProperty("mail.password");

nickname = props.getProperty("mail.nickname");

cc = props.getProperty("mail.cc");

props.put("mail.smtp.ssl.trust", server);

logger.debug("load mail setting success,file path:" + mailPath);

}

public static String getMailPath() {

return mailPath;

}

public static String getServer() {

return server;

}

public static String getSender() {

return sender;

}

public static String getUsername() {

return username;

}

public static String getPassword() {

return password;

}

public static String getNickname() {

return nickname;

}

public static void setMailPath(String mailPath) {

ConfigLoader.mailPath = mailPath;

}

public static String getCc() {

return cc;

}

public static void setCc(String cc) {

ConfigLoader.cc = cc;

}

}

* @date 2017年1月3日 下午1:44:46

* @version V1.0

*/

public class MailSender {

private MimeMessage mimeMsg; // MIME邮件对象

private Session session; // 邮件会话对象

private Properties props; // 系统属性

private Multipart mp; // Multipart对象,邮件内容,标题,附件等内容均添加到其中后再生成

private String username;// 发件人的用户名

private String password;// 发件人的密码

private String nickname;// 发件人的昵称

private static Logger logger = LoggerFactory.getLogger(MailSender.class);

/**

* 有参构造器

*

* @param smtp

* @throws GeneralSecurityException

*/

public MailSender() {

setSmtpHost(ConfigLoader.getServer());

createMimeMessage();

}

/**

* 设置邮件发送的SMTP主机

*

* @param hostName

* @throws GeneralSecurityException

*/

public void setSmtpHost(String hostName) {

if (props == null)

props = System.getProperties();

props.put("mail.smtp.host", hostName);

props.put("mail.smtp.port", "25");

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

logger.debug("set system properties success :mail.smtp.host= "

+ hostName);

}

/**

* 创建邮件对象

*/

public void createMimeMessage() {

// 获得邮件会话对象

session = Session.getDefaultInstance(props, null);

// 创建MIME邮件对象

mimeMsg = new MimeMessage(session);

mp = new MimeMultipart("mixed");

logger.debug(" create session and mimeMessage success");

}

/**

* 设置权限鉴定配置

*

* @param need

* 是否需要权限 true:需要 ,false:不需要

*/

public void setNeedAuth(boolean need) {

if (props == null)

props = System.getProperties();

if (need) {

props.put("mail.smtp.auth", "true");

} else {

props.put("mail.smtp.auth", "false");

}

logger.debug("set smtp auth success:mail.smtp.auth= " + need);

}

/**

* 设置发送邮件的主题

*

* @param subject

* @throws UnsupportedEncodingException

* @throws MessagingException

*/

public void setSubject(String subject) throws UnsupportedEncodingException,

MessagingException {

mimeMsg.setSubject(MimeUtility.encodeText(subject, "utf-8", "B"));

logger.debug("set mail subject success, subject= " + subject);

}

/**

* 设置邮件的正文内容

*

* @param mailBody

* @throws MessagingException

*/

public void setBody(String mailBody) throws MessagingException {

MimeBodyPart content = new MimeBodyPart();

content.setContent("" + mailBody, "text/html;charset=utf-8");

mp.addBodyPart(content);

// mimeMsg.setContent(mp);

}

/*

* public void setBody(String mailBody) throws MessagingException {

*

* mimeMsg.setContent("" + mailBody, "text/html;charset=utf-8");

* logger.debug("set mail body content success,mailBody= " + mailBody);

*

* }

*/

/**

* 添加邮件附件

*

* @param filePath

* 附件的绝对路径

* @throws MessagingException

* @throws UnsupportedEncodingException

*/

public void addFileAffix(String filePath, String fileName)

throws MessagingException, UnsupportedEncodingException {

MimeBodyPart bp = new MimeBodyPart();

DataSource ds1 = new FileDataSource(new File(filePath));

DataHandler dh1 = new DataHandler(ds1);

bp.setDataHandler(dh1);

// bp.setFileName(new String(fileName.getBytes("UTF-8"), "UTF-8"));

bp.setFileName(MimeUtility.encodeWord(fileName));

mp.addBodyPart(bp);

// 整封邮件的MINE消息体

logger.debug("mail add file success,filename= " + filePath);

}

/*

* public void addFileAffix(String filePath) throws MessagingException,

* UnsupportedEncodingException { BodyPart bp = new MimeBodyPart();

* FileDataSource fileds = new FileDataSource(filePath);

* bp.setDataHandler(new DataHandler(fileds)); bp.setFileName(new

* String(fileds.getName().getBytes("UTF-8"), "ISO8859-1"));

* mp.addBodyPart(bp); logger.debug("mail add file success,filename= " +

* filePath); }

*/

public void setCc(String cc) throws AddressException, MessagingException {

mimeMsg.setRecipients(Message.RecipientType.CC,

InternetAddress.parse(cc));

}

/**

* 设置发件人邮箱地址

*

* @param sender

* @throws UnsupportedEncodingException

* @throws AddressException

* @throws MessagingException

*/

public void setSender(String sender) throws UnsupportedEncodingException,

AddressException, MessagingException {

nickname = MimeUtility.encodeText(nickname, "utf-8", "B");

mimeMsg.setFrom(new InternetAddress(nickname + " "));

logger.debug(" set mail sender and nickname success , sender= "

+ sender + ",nickname=" + nickname);

}

/**

* 设置收件人邮箱地址

*

* @param receiver

* @throws AddressException

* @throws MessagingException

*/

public void setReceiver(String receiver) throws AddressException,

MessagingException {

mimeMsg.setRecipients(Message.RecipientType.TO,

InternetAddress.parse(receiver));

logger.debug("set mail receiver success,receiver = " + receiver);

}

/**

* 设置多个收件人

*

* @param toAddress

* @throws MessagingException

*/

public void setReceivers(List toAddress) throws MessagingException {

Address[] address = new InternetAddress[toAddress.size()];

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

address[i] = new InternetAddress(toAddress.get(i));

}

mimeMsg.setRecipients(Message.RecipientType.TO, address);

}

/**

* 设置抄送人的邮箱地址

*

* @param copyto

* @throws AddressException

* @throws MessagingException

*/

public void setCopyTo(String copyto) throws AddressException,

MessagingException {

mimeMsg.setRecipients(Message.RecipientType.CC,

InternetAddress.parse(copyto));

logger.debug("set mail copyto receiver success,copyto = " + copyto);

}

/**

* 设置多个抄送人的邮箱

*

* @param toCopys

* @throws AddressException

* @throws MessagingException

*/

public void setCopyTos(List toCopys) throws AddressException,

MessagingException {

Address[] address = new InternetAddress[toCopys.size()];

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

address[i] = new InternetAddress(toCopys.get(i));

}

mimeMsg.setRecipients(Message.RecipientType.CC, address);

}

/**

* 设置发件人用户名密码,并进行发送邮件操作

*

* @throws MessagingException

*/

public void sendout() throws MessagingException {

Transport transport = null;

try {

this.setNeedAuth(true);

this.setNamePass(ConfigLoader.getUsername(), ConfigLoader.getPassword(), ConfigLoader.getNickname());

this.setSender(ConfigLoader.getSender());

mimeMsg.setContent(mp);

mimeMsg.saveChanges();

Session mailSession = Session.getInstance(props, null);

transport = mailSession.getTransport("smtp");

transport.connect((String) props.get("mail.smtp.host"), username,password);

//收件人发送

if(null != mimeMsg.getRecipients(Message.RecipientType.TO) && mimeMsg.getRecipients(Message.RecipientType.TO).length > 0 ){

transport.sendMessage(mimeMsg,

mimeMsg.getRecipients(Message.RecipientType.TO));

}

//抄送人 发送

if(null != mimeMsg.getRecipients(Message.RecipientType.CC) && mimeMsg.getRecipients(Message.RecipientType.CC).length > 0 ){

transport.sendMessage(mimeMsg,

mimeMsg.getRecipients(Message.RecipientType.CC));

}

logger.debug(" send mail success");

}catch(Exception e){

logger.error("发送邮件发生错误", e);

}finally{

if(transport != null){

transport.close();

}

}

}

/**

* 注入发件人用户名 ,密码 ,昵称

*

* @param username

* 发件人邮箱用户名

* @param password

* 密码

* @param nickname

* 昵称

*/

public void setNamePass(String username, String password, String nickname) {

this.username = username;

this.password = password;

this.nickname = nickname;

}

/**

*

* @param body 內容 :文字 或 html

* @param subject 主题

* @param recievers List 收件人

* @param filePath 附件地址

* @param fileName附件名称

* @throws UnsupportedEncodingException

* @throws MessagingException

* 有附件的

*/

public void sendProjrctEmail(String body, String subject,

List recievers,List cc, String filePath, String fileName)

throws UnsupportedEncodingException, MessagingException {

this.setBody(body);

if (!"".equals(filePath)) {

this.addFileAffix(filePath, fileName);

}

this.setCopyTos(cc);

this.setSubject(subject);

this.setReceivers(recievers);

this.sendout();

}

/**

*

* @param body

* @param subject

* @param recievers

* @param copys

* @throws UnsupportedEncodingException

* @throws MessagingException

* 无附件的

*/

public void sendProjrctEmail(String body, String subject,List recievers,List copys)

throws UnsupportedEncodingException, MessagingException {

this.setBody(body);

this.setSubject(subject);

//收件人

this.setReceivers(recievers);

//抄送

this.setCopyTos(copys);

this.sendout();

}

}

邮件发送配置信息加载类

import java.io.IOException;

import java.io.InputStream;

import java.util.Properties;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

/**

* @Description: 邮件发送配置信息加载类

* @author zk

* @date 2017年1月3日 上午10:52:12

* @version V1.0

*/

public class ConfigLoader {

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

// 配置文件路径

private static String mailPath = "mail.properties";

// 邮件发送SMTP主机

private static String server;

// 发件人邮箱地址

private static String sender;

// 发件人邮箱用户名

private static String username;

// 发件人邮箱密码

private static String password;

// 发件人显示昵称

private static String nickname;

private static String cc;

static {

// 类初始化后加载配置文件

InputStream in = ConfigLoader.class.getClassLoader()

.getResourceAsStream(mailPath);

Properties props = new Properties();

try {

props.load(in);

} catch (IOException e) {

logger.error("load mail setting error,pleace check the file path:"

+ mailPath);

logger.error(e.toString(), e);

}

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

server = props.getProperty("mail.server");

sender = props.getProperty("mail.sender");

username = props.getProperty("mail.username");

password = props.getProperty("mail.password");

nickname = props.getProperty("mail.nickname");

cc = props.getProperty("mail.cc");

props.put("mail.smtp.ssl.trust", server);

logger.debug("load mail setting success,file path:" + mailPath);

}

public static String getMailPath() {

return mailPath;

}

public static String getServer() {

return server;

}

public static String getSender() {

return sender;

}

public static String getUsername() {

return username;

}

public static String getPassword() {

return password;

}

public static String getNickname() {

return nickname;

}

public static void setMailPath(String mailPath) {

ConfigLoader.mailPath = mailPath;

}

public static String getCc() {

return cc;

}

public static void setCc(String cc) {

ConfigLoader.cc = cc;

}

}

配置文件

mail.server=********

mail.sender=********

mail.nickname=********

mail.username=********@qq.com

mail.password=********

mail.cc=********@qq.com,********@qq.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值