java 给多人发送、抄送
关键技术:
1、MimeMessage的setRecipients方法设置邮件的收件人,其中Message.RecipientType.TO常量表示收件人类型是邮件接收者,Message.RecipientType.
CC常量表示收件人类型是抄送者,Message.RecipientType.BCC常量表示收件人的类型是密送着。
2、在调用MimeMessage的setRecipients方法时,除了可以指定收件人的类型外,还可以传入一个数组,指定多个收件人的地址。
SourceCode: import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
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; public class MultiMailsender { /**
* 发送邮件给多个接收者
* @param mailInfo 带发送邮件的信息
* @return
*/
public static boolean sendMailtoMultiReceiver(MultiMailSenderInfo mailInfo){
MyAuthenticator authenticator = null;
if (mailInfo.isValidate()) {
authenticator = new MyAuthenticator(mailInfo.getUserName(),
mailInfo.getPassword());
}
Session sendMailSession = Session.getInstance(mailInfo
.getProperties(), authenticator);
try {
Message mailMessage = new MimeMessage(sendMailSession);
// 创建邮件发送者地址
Address from = new InternetAddress(mailInfo.getFromAddress());
mailMessage.setFrom(from);
// 创建邮件的接收者地址,并设置到邮件消息中
Address[] tos = null;
String[] receivers = mailInfo.getReceivers();
if (receivers != null){
// 为每个邮件接收者创建一个地址
tos = new InternetAddress[receivers.length + 1];
tos[0] = new InternetAddress(mailInfo.getToAddress());
for (int i=0; i<receivers.length; i++){
tos[i+1] = new InternetAddress(receivers[i]);
}
} else {
tos = new InternetAddress[1];
tos[0] = new InternetAddress(mailInfo.getToAddress());
}
// 将所有接收者地址都添加到邮件接收者属性中
mailMessage.setRecipients(Message.RecipientType.TO, tos); mailMessage.setSubject(mailInfo.getSubject());
mailMessage.setSentDate(new Date());
// 设置邮件内容
Multipart mainPart = new MimeMultipart();
BodyPart html = new MimeBodyPart();
html.setContent(mailInfo.getContent(), "text/html; charset=GBK");
mainPart.addBodyPart(html);
mailMessage.setContent(mainPart);
// 发送邮件
Transport.send(mailMessage);
return true;
} catch (MessagingException ex) {
ex.printStackTrace();
}
return false;
} /**
* 发送带抄送的邮件
* @param mailInfo 待发送邮件的消息
* @return
*/
public static boolean sendMailtoMultiCC(MultiMailSenderInfo mailInfo){
MyAuthenticator authenticator = null;
if (mailInfo.isValidate()) {
authenticator = new MyAuthenticator(mailInfo.getUserName(),
mailInfo.getPassword());
}
Session sendMailSession = Session.getInstance(mailInfo
.getProperties(), authenticator);
try {
Message mailMessage = new MimeMessage(sendMailSession);
// 创建邮件发送者地址
Address from = new InternetAddress(mailInfo.getFromAddress());
mailMessage.setFrom(from);
// 创建邮件的接收者地址,并设置到邮件消息中
Address to = new InternetAddress(mailInfo.getToAddress());
mailMessage.setRecipient(Message.RecipientType.TO, to); // 获取抄送者信息
String[] ccs = mailInfo.getCcs();
if (ccs != null){
// 为每个邮件接收者创建一个地址
Address[] ccAdresses = new InternetAddress[ccs.length];
for (int i=0; i<ccs.length; i++){
ccAdresses[i] = new InternetAddress(ccs[i]);
}
// 将抄送者信息设置到邮件信息中,注意类型为Message.RecipientType.CC
mailMessage.setRecipients(Message.RecipientType.CC, ccAdresses);
} mailMessage.setSubject(mailInfo.getSubject());
mailMessage.setSentDate(new Date());
// 设置邮件内容
Multipart mainPart = new MimeMultipart();
BodyPart html = new MimeBodyPart();
html.setContent(mailInfo.getContent(), "text/html; charset=GBK");
mainPart.addBodyPart(html);
mailMessage.setContent(mainPart);
// 发送邮件
Transport.send(mailMessage);
return true;
} catch (MessagingException ex) {
ex.printStackTrace();
}
return false;
} public static void main(String[] args) {
// 创建邮件信息
MultiMailSenderInfo mailInfo = new MultiMailSenderInfo();
mailInfo.setMailServerHost("smtp.sina.com.cn");
mailInfo.setMailServerPort("25");
mailInfo.setValidate(true);
mailInfo.setUserName("***");
mailInfo.setPassword("***");
mailInfo.setFromAddress("***@sina.com");
mailInfo.setToAddress("***@163.com");
mailInfo.setSubject("MyMail测试");
mailInfo.setContent("我的邮件测试/n/rMy test mail/n/r"); String[] receivers = new String[]{"***@163.com", "***@tom.com"};
String[] ccs = receivers;
mailInfo.setReceivers(receivers);
mailInfo.setCcs(ccs); MultiMailsender.sendMailtoMultiReceiver(mailInfo);
MultiMailsender.sendMailtoMultiCC(mailInfo);
} /**
* 发送多接收者类型邮件的基本信息
*/
public static class MultiMailSenderInfo extends MailSenderInfo{
// 邮件的接收者,可以有多个
private String[] receivers;
// 邮件的抄送者,可以有多个
private String[] ccs; public String[] getCcs() {
return ccs;
}
public void setCcs(String[] ccs) {
this.ccs = ccs;
}
public String[] getReceivers() {
return receivers;
}
public void setReceivers(String[] receivers) {
this.receivers = receivers;
}
}
}
java 给多人发送、抄送的更多相关文章
- JAVA 实现 QQ 邮箱发送验证码功能(不局限于框架)
JAVA 实现 QQ 邮箱发送验证码功能(不局限于框架) 本来想实现 QQ 登录,有域名一直没用过,还得备案,好麻烦,只能过几天再更新啦. 先把实现的发送邮箱验证码更能更新了. 老规矩,更多内容在注释 ...
- Java 实现邮件的发送
Java 实现邮件的发送 开发邮箱发送功能必须看邮箱方面的资料 改一些东西 (我的是qq 邮箱哟 开通 POP3 ...
- Android Java使用JavaMail API发送和接收邮件的代码示例
JavaMail是Oracle甲骨文开发的Java邮件类API,支持多种邮件协议,这里我们就来看一下Java使用JavaMail API发送和接收邮件的代码示例 使用Javamail发送邮件,必需的j ...
- Java实现QQ邮件发送
首先我们需要两个jar包,点击下面即可下载这两个包: JavaMail mail.jar 1.4.5 JAF(版本 1.1.1) activation.jar 我们这里采用QQ邮箱发送邮件为例,代码如 ...
- System.Net.Mail邮件发送抄送附件(多个)
/// <summary> /// 邮件发送抄送附件 /// </summary> /// <param name="mailTo">收件人(可 ...
- 谈谈Java利用原始HttpURLConnection发送POST数据
这篇文章主要给大家介绍java利用原始httpUrlConnection发送post数据,设计到httpUrlConnection类的相关知识,感兴趣的朋友跟着小编一起学习吧 URLConnectio ...
- 利用java实现的一个发送手机短信的小例子
今天闲来无事,在微博上看到一个关于用java实现的一个发送手机短信的程序,看了看,写的不太相信,闲的没事,把他整理下来,以后可能用得着 JAVA发送手机短信,流传有几种方法:(1)使用webservi ...
- 转:Java开发牛人十大必备网站
原文来自于:http://www.importnew.com/7980.html 以下是我收集的Java开发牛人必备的网站.这些网站可以提供信息,以及一些很棒的讲座, 还能解答一般问题.面试问题等.质 ...
- Java开发牛人十大必备网站
以下是我收集的Java开发牛人必备的网站.这些网站可以提供信息,以及一些很棒的讲座, 还能解答一般问题.面试问题等.质量是衡量一个网站的关键因素,我个人认为这些网站质量都很好.接下来,我会跟大家分享我 ...
随机推荐
- Java使用apache的开源数据处理框架commons-dbutils完成查询结果集的各种处理输出(8种方式)
package demo; /* * QueryRunner数据查询操作: * 调用QueryRunner类方法query(Connection con,String sql,ResultSetHan ...
- nodejs Centos环境搭建
使用二进制文件安装: node 环境下载 https://nodejs.org/en/download/ 下载里面的windows 安装包 和 linux 安装包 1)windows安装 window ...
- java 修改字体大小
在Windows->Preferences->General->Appearance->Colors and Fonts->Java->Java Editor Te ...
- 使用 Jmeter 做 Web 接口测试-详解
接口测试概述 定义 WIKI定义:接口测试作为集成测 试的一部分,通过直接控制API来判断系统的功能性,可靠性,性能与安全性.API测试是没有界面的,执行在通讯 层.API 测试在自动化测试中有着重要 ...
- Difference between a Hard Link and Soft (Symbolic) Link
Within the Unix/Linux file system, linking lets you create file shortcuts to link one or more files. ...
- retain和copy还有assign的区别
1. 接触过C,那么假设你用malloc分配了一块内存,并且把它的地址赋值给了指针a,后来你希望指针b也共享这块内存,于是你又把a赋值给 (assign)了b.此时a和b指向同一块内存,请问当a不再需 ...
- VS2010 MFC中 窗口分割的实现
分割窗口概述 分割窗口,顾名思义,就是将一个窗口分割成多个窗格,在每个窗格中都包含有视图,或者是同一类型的视图,或者是不同类型的视图. MFC分割窗口的方式有两种,动态分割和静态分割. 动态分割窗口通 ...
- LeetCode 290 Word Pattern(单词模式)(istringstream、vector、map)(*)
翻译 给定一个模式,和一个字符串str.返回str是否符合同样的模式. 这里的符合意味着全然的匹配,所以这是一个一对多的映射,在pattern中是一个字母.在str中是一个为空的单词. 比如: pat ...
- 工程管理,用网页就够了!——Wish3D Earth在线三维地球强势上线
大型工程涉及到众多的施工队.管理单位和相关部门,相互之间需要传递的数据.文件的数量是惊人的,必须建立起有效的信息管理方法,使管理者及时把握工程的信息,全面准确地控制工程施工情况. 现代化的建筑工程管理 ...
- Codis的安装
其他环境准备: 安装JDK,安装Zookeeper 1.创建codis账户 useradd codis passwd codis 2.解压codis3.1.3-go1.7.4-linux.tar.gz ...