「javamail抄送」邮件发送抄送
本篇文章给大家谈谈javamail抄送,以及邮件发送抄送对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
关于Java中的JavaMail问题
给你个例子吧
/**
* @author EX-QINCIDONG001
* 验证
*/
public class MailAuthorization extends Authenticator {
private String username;
private String password;
public MailAuthorization(String username,String password) {
this.username = username;
this.password = password;
}
@Override
protected PasswordAuthentication getPasswordAuthentication() {
// TODO Auto-generated method stub
return new PasswordAuthentication(username,password);
}
}
public class MailInfo {
// 服务器地址
private String hostName;
// 端口
private String hostPort;
// 用户名
private String userName;
private String password;
public String getUserName() {
return this.userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return this.password;
}
public void setPassword(String password) {
this.password = password;
}
// 是否需要验证
private boolean validate = false;
// 发件人
private String sender;
// 收件人
private String[] recvers = {};
// 抄送给哪些人
private String[] ccs = {};
// 邮件主题
private String subject;
// 邮件内容
private String content;
// 附件
private ListFile attaches;
public String getHostName() {
return this.hostName;
}
public void setHostName(String hostName) {
this.hostName = hostName;
}
public String getHostPort() {
return this.hostPort;
}
public void setHostPort(String hostPort) {
this.hostPort = hostPort;
}
public boolean isValidate() {
return this.validate;
}
public void setValidate(boolean validate) {
this.validate = validate;
}
public String getSender() {
return this.sender;
}
public void setSender(String sender) {
this.sender = sender;
}
public String[] getRecvers() {
return this.recvers;
}
public void setRecvers(String[] recvers) {
this.recvers = recvers;
}
public String[] getCcs() {
return this.ccs;
}
public void setCcs(String[] ccs) {
this.ccs = ccs;
}
public String getSubject() {
return this.subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getContent() {
return this.content;
}
public void setContent(String content) {
this.content = content;
}
public ListFile getAttaches() {
return this.attaches;
}
public void setAttaches(ListFile attaches) {
this.attaches = attaches;
}
}
public class MailSender {
private MailInfo mailInfo;
public MailSender(MailInfo mailInfo) {
this.mailInfo = mailInfo;
}
// 发送邮件方法
public void sendMail() throws MessagingException {
Properties props = System.getProperties();
props.setProperty("mail.transport.protocol", "smtp"); // smtp协议
props.put("mail.smtp.host", mailInfo.getHostName());
props.put("mail.smtp.port", mailInfo.getHostPort());
props.put("mail.smtp.auth", mailInfo.isValidate()?"true":"false");
Authenticator authenticator = new MailAuthorization(mailInfo.getUserName(),mailInfo.getPassword());
Session session = Session.getDefaultInstance(props, authenticator);
MimeMessage msg = new MimeMessage(session);
msg.setSubject(mailInfo.getSubject(), "utf-8");
Address address = new InternetAddress(mailInfo.getSender());
msg.setFrom(address);
// 收信人
Address[] recvs = new Address[mailInfo.getRecvers().length];
int index = 0;
if (mailInfo.getRecvers() != null) {
for (String s : mailInfo.getRecvers()) {
Address addr = new InternetAddress(s);
recvs[index] = addr;
index++;
}
}
msg.setRecipients(RecipientType.TO,recvs);
index = 0;
// 抄送
Address[] ccs = new Address[mailInfo.getCcs().length];
if (mailInfo.getCcs() != null) {
for (String s:mailInfo.getCcs()) {
Address addr = new InternetAddress(s);
ccs[index] = addr;
index++;
}
}
msg.setRecipients(RecipientType.CC, ccs);
Multipart mp = new MimeMultipart();
BodyPart part = new MimeBodyPart();
part.setContent(mailInfo.getContent(), "text/html;charset=utf-8");
// 增加附件
if (mailInfo.getAttaches() != null mailInfo.getAttaches().size() 0) { // 有附件
for (int i=0;imailInfo.getAttaches().size();i++) {
BodyPart bp = new MimeBodyPart();
FileDataSource fds = new FileDataSource((File) mailInfo.getAttaches().get(i));
bp.setDataHandler(new DataHandler(fds));
mp.addBodyPart(bp);
}
}
mp.addBodyPart(part);
msg.setContent(mp);
// Transport transport = session.getTransport();
Transport.send(msg);
}
}
public class TestMailSender {
/**
* @param args
*/
public static void main(String[] args) {
MailInfo mi = new MailInfo();
mi.setValidate(true);
mi.setUserName("ex-qincidong001@pingan.com.cn");
mi.setPassword("*******");
mi.setSubject("测试邮件发送");
mi.setSender("qincidong@163.com");
mi.setRecvers(new String[]{"ex-qincidong001@pingan.com.cn","qincidong@qq.com"});
mi.setHostPort("25");
mi.setHostName("smtp.163.com");
mi.setContent("a href=''百度/a百度知道");
// 添加附件
ListFile attaches = new ArrayListFile();
attaches.add(new File("D:\\qincidong\\资料\\Ejb\\EJB3.0入门经典-weblogic.pdf"));
attaches.add(new File("D:\\qincidong\\资料\\Ejb\\编写第一个EJB应用程序.doc"));
mi.setAttaches(attaches);
MailSender sender = new MailSender(mi);
try {
sender.sendMail();
System.out.println("邮件发送成功。");
} catch (MessagingException e) {
System.err.println("邮件发送失败");
e.printStackTrace();
}
}
}
如何用javamail定时发送邮件 详细03
Java 计时器框架的本身在这里不作过多的介绍,详细信息在IBM developerWorks 中国网站。 我们主要讨论如何利用Java 计时器框架在Solaris 平台来实现邮件的定时发送、JavaMail 发送邮件的实现以及在Solaris 平台上如何以后台方式运行整个邮件定时发送的应用。 下载本文的源代码,参考具体实现。 1.1 形成schedule.jar 包 schedule.jar 包中的目录结构如下: 我们将数据库的连接、日志、邮件和计划框架的通用类形成一个与具体应用要求无关的schedule.jar 包。利用 javac 将编译生成的目标 class 文件存在当前目录的 classes 文件夹下,然后通过 jar -cvf schedule.jar ./*命令生成schedule.jar 包。 1.1.1 Oracle 数据库连接的建立 位于db 目录下,通过thin 方式建立与Oracle 的数据库连接,具体的实现参见《J2EE 应用中与Oracle 数据库的连接》一文。 1.1.2 日志 以后台方式定时运行的应用应特别注意日志的功能,因为只有通过分析详细的日志信息才能准确掌握应用的执行情况。在logs 目录下为Logs.java 文件,代码如下: package com.j2ee.logs; import java.io.*; import java.util.*; import java.text.SimpleDateFormat; public class Logs { private String logType=""; private String server="/schedule/logs/server.log"; private String task="/schedule/implements/nohup.out"; private SimpleDateFormat dateFormat = new SimpleDateFormat("【 yyyy 年MM月dd 日 E a HH:mm:ss 】"); /** * @param logType server task */ public Logs(String logType) { this.logType=logType; } public void print(String msg) { try { String path=""; if (logType.equals("server")) path=server; if (logType.equals("task")) path=task; // BufferedWriter out = new BufferedWriter(new FileWriter(path,true)); String str=dateFormat.format(new Date()); if (logType.equals("task")) out.newLine(); out.write(str,0,str.length()); out.write(msg,0,msg.length()); out.newLine(); out.close(); } catch(Exception e) { System.out.println("Logs.print:"+e.getMessage()); } } }; 通过类中的构造器,可以生成两个日志文件:server.log 和nohup.out。server.log 用来记录计时器框架本身定时调度的日志信息,通过它来判断定时调度服务每天是否正常运行;nohup.out 用来记录在具体应用中的调试信息,例如:在应用中通过System.out.println()输出的信息将记录在nohup.out 文件中。 1.1.3 邮件 位于mail 目录下,包括以下一些文件: 1)Debug.java 发送邮件时的调试信息 2)EMailContents.java 邮件的正文,为了使邮件接受者对收到的邮件有一个好的视觉效果,可以先写一个统一的HTML 邮件模板,在模板中填充相应的内容。EmailContents 类完成这一功能。效果如下: 3)Mailer.java 发送邮件的主方法。它调用MailThread 类中的方法创建一个发送邮件的线程。 4)MailThread.java 发送邮件线程类。它调用MailHelper 中的方法来完成发送邮件的工作。 5)MailHelper.java 发送邮件的实现类。在类的createAndSendMail 方法中包括了发送邮件一系列必须的过程,它可以完成一些邮件的正文、附件、抄送、回执等功能。在邮件的实现中用到了两个jar 包:mail.jar 和activation.jar。 1.1.4 计划框架 计划框架的详细内容可以通过本文前面提供的连接去详细了解,本文该部分的代码也出自IBM网站。 1.2 邮件定时发送的实现 这部分主要用到前面schedule.jar 中的类来实现与具体应用要求相适应的应用。在implements 目录下有三个类: 1)ScheduleTask.java 包含一个main 方法,在本例中"每天计划3 点开始执行计划好的任务"。 2)ScheduleThread.java 线程类,在该类的 run 方法中,可以添加不同类型的计划定时执行的任务类来完成不同的定时执行的任务,在本例中调用了Mails 类中的sendMail 方法来定时发送邮件。 3)Mails.java 按照一定的业务逻辑规则实现邮件的发送。 1.3 邮件定时发送应用的运行 包括应用的启动和停止,在Solaris 上我们可以编写两个脚本:start 和stop 来完成该工作。 1.3.1 Start 脚本 Start 脚本内容如下: echo '************************************************************' CLASSPATH=.:/schedule/implements/jar/schedule.jar: /schedule/implements/jar/classes12.zip: /schedule/implements/jar/mail.jar:/schedule/implements/jar/activation.jar export CLASSPATH echo 'set schedule running environment success.' nohup java com.j2ee.implement.ScheduleTask echo 'start schedule task success.' echo 'view logs:' echo ' /schedule/implements/nohup.out' echo ' /schedule/logs/server.log' date /schedule/logs/server.log echo '计划框架成功启动' /schedule/logs/server.log echo '************************************************************' 这里有两个关键点:CLASSPATH 的设置和 nohup 运行方式。在 CLASSPATH 中必须提供用到的所有 jar 包,多个jar 包用":"分隔;""表示以后台方式运行,"nohup"使应用的运行不依赖于当前的会话,如果不以"nohup"方式的话,即" java com.j2ee.implement.ScheduleTask ",当你关闭你当前的会话时,应用将终止运行。可以使用"ps -ef | grep java"来查看应用运行的进程号。 当然也可以通过手工交互的方式完成上述步骤来运行应用。 1.3.2 Stop 脚本 Stop 脚本内容如下: echo '************************************************************' ps -e | grep java ps.out kill -9 `cut -c 2-6 ps.out` rm ps.out date /schedule/logs/server.log echo '计划框架成功停止' /schedule/logs/server.log echo 'stop schedule task success.' echo '************************************************************' 该脚本中主要通过" ps -e | grep java"命令将输出信息重定向到"ps.out"文件中,在从文件中获得进程号,然后将它kill 掉。同样也可以通过手工的方式将它kill。 一般的问题在SUN 中国的技术社区都能找的到的 建议你去看看. 这篇是切过来的 你可以去SUN 中国技术社区下载具体实例 使用JSP开发WebMail 系统 电子邮件(E-mail)是Internet 上使用最广泛的服务之一,传统的Email 应用模式基于C/S 结构,即用户使用客户端的邮件收发工具(如Outlook、Foxmail 等)与提供邮件服务的服务器(如163.net、263.net、 371.net)通信,在使用客户端邮件工具之前,用户要进行一些必要的设置,如指定邮件服务器的主机地址和通信端口等,这些工作对刚开始上网的用户会有一定的困难,如果把E-mail 和Web 结合在一起,即通过Web 编程和适当的系统设置,使用户仅仅以访问Web 的方式就可以得到和使用完整的邮件服务,这样将极大地方便上网用户,这种系统称为WebMail。WebMail 是目前Internet 上最受欢迎的服务之一,也是很多网站必备功能之一。另外WebMail 同样也适用于企业或校园网的应用。 通常在后台服务器的搭建和设置完成后实现WebMail 系统,而前台的开发工作主要是开发工具与后台数据库和邮件服务器的交互问题。在Linux 平台上运行的各种服务器软件稳定性和可靠性一直很好,而且选择跨平台的Java 开发工具使系统更稳定,具有更高的伸缩性。 JSP性能 尽管JSP 提供强大的功能是建立在Servlet 之上,但JSP 的性能和Servlet 相差无几。JSP 首先要编译成Servlet,这只会增加少量的代码,仅需编译一次且可以预编译,这就消除了运行时花费不必要的负担。JSP 与Servlet 性能上的差异仅仅表现在返回的数据是二进制的。这是因为JSP 返回时用的是 PrintWriter,而Servlet 可以应用于速度更快的OutputStream。 JSP 自定义的标签库可以封装大量的、复杂的Java 操作在一个Form里面,这些预先定义好的标签可以很容易的被那些没有Java 知识的人调用。因此,JSP 自定义的标签库可以有效地实现Java 程序员和 Web 设计人员工作的划分。然而,在页面上应用的每一个标签,Web 容器都必须创建一个新的标签句柄对象或从标签缓冲中提取它。因此,过多的应用自定义的标签将会带来不必要的资源浪费。 BodyTags 是一种特殊的定制标签,可以提取在它之间封装的内容或者替换那些内容。BodyTags 之间的内容一般会备份在内存中。由于BodyTags 之间能够嵌套和重复,因此,在程序中应用了多级的 BodyTags 会占用大量宝贵的内存和系统资源。 实现WebMail 的主要功能 该系统提供了获取、阅读、书写、转发、回复、打印、删除及用户管理的功能。考虑到系统的跨平台性,采用Java 及相关技术产品为开发工具,特别是采用JSP 作为服务程序,这样对客户端也没有其它要求,同时系统的性能在高负荷下得到进一步提高。整个WebMail 系统全部采用纯Java 代码,服务器端每响应一个服务请求启动一个线程,而不像CGI 那样启动一个进程。这样能够节省系统资源,提高系统性能。
javamail抄送人收不到邮件
你在发送邮件的地方加上 transport.sendMessage(msg, msg.getRecipients(Message.RecipientType.CC)); 应该都是漏了这个的原因
怎么样使用JavaMail发送和接收邮件
public class MailTest {
//发送的邮箱 内部代码只适用qq邮箱
private static final String USER = "xxxxx@qq.com";
//授权密码 通过QQ邮箱设置-账户-POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务-开启POP3/SMTP服务获取
private static final String PWD = "xxxxx";
private String[] to;
private String[] cc;//抄送
private String[] bcc;//密送
private String[] fileList;//附件
private String subject;//主题
private String content;//内容,可以用html语言写
public void sendMessage() throws Exception {
// 配置发送邮件的环境属性
final Properties props = new Properties();
//下面两段代码是设置ssl和端口,不设置发送不出去。
props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
//props.setProperty("mail.smtp.port", "465");
props.setProperty("mail.smtp.socketFactory.port", "465");
// 表示SMTP发送邮件,需要进行身份验证
props.setProperty("mail.transport.protocol", "smtp");// 设置传输协议
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.host", "smtp.qq.com");//QQ邮箱的服务器 如果是企业邮箱或者其他邮箱得更换该服务器地址
// 发件人的账号
props.put("mail.user", USER);
// 访问SMTP服务时需要提供的密码
props.put("mail.password", PWD);
// 构建授权信息,用于进行SMTP进行身份验证
Authenticator authenticator = new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
// 用户名、密码
String userName = props.getProperty("mail.user");
String password = props.getProperty("mail.password");
return new PasswordAuthentication(userName, password);
}
};
// 使用环境属性和授权信息,创建邮件会话
Session mailSession = Session.getInstance(props, authenticator);
// 创建邮件消息
MimeMessage message = new MimeMessage(mailSession);
BodyPart messageBodyPart = new MimeBodyPart();
Multipart multipart = new MimeMultipart();
// 设置发件人
InternetAddress form = new InternetAddress(
props.getProperty("mail.user"));
message.setFrom(form);
//发送
if (to != null) {
String toList = getMailList(to);
InternetAddress[] iaToList = new InternetAddress().parse(toList);
message.setRecipients(RecipientType.TO, iaToList); // 收件人
}
//抄送
if (cc != null) {
String toListcc = getMailList(cc);
InternetAddress[] iaToListcc = new InternetAddress().parse(toListcc);
message.setRecipients(RecipientType.CC, iaToListcc); // 抄送人
}
//密送
if (bcc != null) {
String toListbcc = getMailList(bcc);
InternetAddress[] iaToListbcc = new InternetAddress().parse(toListbcc);
message.setRecipients(RecipientType.BCC, iaToListbcc); // 密送人
}
message.setSentDate(new Date()); // 发送日期 该日期可以随意写,你可以写上昨天的日期(效果很特别,亲测,有兴趣可以试试),或者抽象出来形成一个参数。
message.setSubject(subject); // 主题
message.setText(content); // 内容
//显示以html格式的文本内容
messageBodyPart.setContent(content,"text/html;charset=utf-8");
multipart.addBodyPart(messageBodyPart);
//保存多个附件
if(fileList!=null){
addTach(fileList, multipart);
}
message.setContent(multipart);
// 发送邮件
Transport.send(message);
}
public void setTo(String[] to) {
this.to = to;
}
public void setCc(String[] cc) {
this.cc = cc;
}
public void setBcc(String[] bcc) {
this.bcc = bcc;
}
public void setSubject(String subject) {
this.subject = subject;
}
public void setContent(String content) {
this.content = content;
}
public void setFileList(String[] fileList) {
this.fileList = fileList;
}
private String getMailList(String[] mailArray) {
StringBuffer toList = new StringBuffer();
int length = mailArray.length;
if (mailArray != null length 2) {
toList.append(mailArray[0]);
} else {
for (int i = 0; i length; i++) {
toList.append(mailArray[i]);
if (i != (length - 1)) {
toList.append(",");
}
}
}
return toList.toString();
}
//添加多个附件
public void addTach(String fileList[], Multipart multipart) throws Exception {
for (int index = 0; index fileList.length; index++) {
MimeBodyPart mailArchieve = new MimeBodyPart();
FileDataSource fds = new FileDataSource(fileList[index]);
mailArchieve.setDataHandler(new DataHandler(fds));
mailArchieve.setFileName(MimeUtility.encodeText(fds.getName(),"UTF-8","B"));
multipart.addBodyPart(mailArchieve);
}
}
//以下是演示demo
public static void main(String args[]) {
MailTest mail = new MailTest();
mail.setSubject("java邮件");
mail.setContent("你好 这是第一个java 程序发送邮件");
//收件人 可以发给其他邮箱(163等) 下同
mail.setTo(new String[] {"xxxxx@qq.com"});
//抄送
// mail.setCc(new String[] {"xxxxx@qq.com","xxxxx@qq.com"});
//密送
//mail.setBcc(new String[] {"xxxxx@qq.com","xxxxx@qq.com"});
//发送附件列表 可以写绝对路径 也可以写相对路径(起点是项目根目录)
// mail.setFileList(new String[] {"D:\\aa.txt"});
//发送邮件
try {
mail.sendMessage();
System.out.println("发送邮件成功!");
} catch (Exception e) {
System.out.println("发送邮件失败!");
e.printStackTrace();
}
}
}
关于javamail抄送和邮件发送抄送的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-11-24,除非注明,否则均为
原创文章,转载请注明出处。