- 浏览: 331126 次
- 性别:
- 来自: 北京
最新评论
-
sjzcmlt:
谢谢,学习了!
mysql中GROUP BY结合GROUP_CONCAT的使用 -
Einsdan:
看了这篇文章豁然开朗,谢谢分享!
struts2采用convention-plugin实现零配置 -
hachorse:
楼主,请问有没有什么办法可以在Activator中获取你第二步 ...
RCP中采用actionSet配置菜单的方法总结 -
l4d_fire:
动态方法貌似只能用!不能使用其他的么
struts2采用convention-plugin实现零配置 -
morigin:
拜谢!~
struts2启动报错com/opensymphony/xwork2/spring/SpringObjectFactory.java:220:-1
javamail是大家都知道的一个邮件收发api,最近出于兴趣爱好,在网上收集了部分关于javamail的使用方法,整理后把源码贴于下。
很抱歉当时没有记住源码的出处,还望前辈们海涵啊。
运行需求:mail.jar,activation.jar 可以在http://java.sun.com上搜索javamail和jaf分别下载上述的包。
1、ReceiveMail.java
作用是接收邮件。具体不多说,看代码就可以。
2、SendMail.java
作用是邮件发送的示例代码,可完成多个附件的发送
恩,就这些了,其他的大家自己去挖掘吧。代码在eclipse下调试通过,请放心使用
好人做到底,我把两个jar包一起附上,大家多顶啊。
很抱歉当时没有记住源码的出处,还望前辈们海涵啊。
运行需求:mail.jar,activation.jar 可以在http://java.sun.com上搜索javamail和jaf分别下载上述的包。
1、ReceiveMail.java
作用是接收邮件。具体不多说,看代码就可以。
package org.mail.core; import java.io.*; import java.text.*; import java.util.*; import javax.mail.*; import javax.mail.internet.*; public class ReceiveMail { private MimeMessage mimeMessage = null; private String saveAttachPath = ""; // 附件下载后的存放目录 private StringBuffer bodytext = new StringBuffer(); // 存放邮件内容的StringBuffer对象 private String dateformat = "yy-MM-dd HH:mm"; // 默认的日前显示格式 /** * 构造函数,初始化一个MimeMessage对象 */ public ReceiveMail() { } public ReceiveMail(MimeMessage mimeMessage) { this.mimeMessage = mimeMessage; System.out.println("create a ReceiveMail object........"); } public void setMimeMessage(MimeMessage mimeMessage) { this.mimeMessage = mimeMessage; } /** * * 获得发件人的地址和姓名 */ public String getFrom() throws Exception { InternetAddress address[] = (InternetAddress[]) mimeMessage.getFrom(); String from = address[0].getAddress(); if (from == null) from = ""; String personal = address[0].getPersonal(); if (personal == null) personal = ""; String fromaddr = personal + "<" + from + ">"; return fromaddr; } /** * * 获得邮件的收件人,抄送,和密送的地址和姓名,根据所传递的参数的不同 * "to"----收件人 "cc"---抄送人地址 * "bcc"---密送人地址 */ public String getMailAddress(String type) throws Exception { String mailaddr = ""; String addtype = type.toUpperCase(); InternetAddress[] address = null; if (addtype.equals("TO") || addtype.equals("CC") || addtype.equals("BCC")) { if (addtype.equals("TO")) { address = (InternetAddress[]) mimeMessage .getRecipients(Message.RecipientType.TO); } else if (addtype.equals("CC")) { address = (InternetAddress[]) mimeMessage .getRecipients(Message.RecipientType.CC); } else { address = (InternetAddress[]) mimeMessage .getRecipients(Message.RecipientType.BCC); } if (address != null) { for (int i = 0; i < address.length; i++) { String email = address[i].getAddress(); if (email == null) email = ""; else { email = MimeUtility.decodeText(email); } String personal = address[i].getPersonal(); if (personal == null) personal = ""; else { personal = MimeUtility.decodeText(personal); } String compositeto = personal + "<" + email + ">"; mailaddr += "," + compositeto; } mailaddr = mailaddr.substring(1); } } else { throw new Exception("Error emailaddr type!"); } return mailaddr; } /** * * 获得邮件主题 */ public String getSubject() throws MessagingException { String subject = ""; try { subject = MimeUtility.decodeText(mimeMessage.getSubject()); if (subject == null) subject = ""; } catch (Exception exce) { } return subject; } /** * * 获得邮件发送日期 */ public String getSentDate() throws Exception { Date sentdate = mimeMessage.getSentDate(); SimpleDateFormat format = new SimpleDateFormat(dateformat); return format.format(sentdate); } /** * * 获得邮件正文内容 */ public String getBodyText() { return bodytext.toString(); } /** * * 解析邮件,把得到的邮件内容保存到一个StringBuffer对象中,解析邮件 * * 主要是根据MimeType类型的不同执行不同的操作,一步一步的解析 */ public void getMailContent(Part part) throws Exception { String contenttype = part.getContentType(); int nameindex = contenttype.indexOf("name"); boolean conname = false; if (nameindex != -1) conname = true; System.out.println("CONTENTTYPE: " + contenttype); if (part.isMimeType("text/plain") && !conname) { bodytext.append((String) part.getContent()); } else if (part.isMimeType("text/html") && !conname) { bodytext.append((String) part.getContent()); } else if (part.isMimeType("multipart/*")) { Multipart multipart = (Multipart) part.getContent(); int counts = multipart.getCount(); for (int i = 0; i < counts; i++) { getMailContent(multipart.getBodyPart(i)); } } else if (part.isMimeType("message/rfc822")) { getMailContent((Part) part.getContent()); } else { } } /** * * 判断此邮件是否需要回执,如果需要回执返回"true",否则返回"false" */ public boolean getReplySign() throws MessagingException { boolean replysign = false; String needreply[] = mimeMessage .getHeader("Disposition-Notification-To"); if (needreply != null) { replysign = true; } return replysign; } /** * * 获得此邮件的Message-ID */ public String getMessageId() throws MessagingException { return mimeMessage.getMessageID(); } /** * * 【判断此邮件是否已读,如果未读返回返回false,反之返回true】 */ public boolean isNew() throws MessagingException { boolean isnew = false; Flags flags = ((Message) mimeMessage).getFlags(); Flags.Flag[] flag = flags.getSystemFlags(); System.out.println("flags's length: " + flag.length); for (int i = 0; i < flag.length; i++) { if (flag[i] == Flags.Flag.SEEN) { isnew = true; System.out.println("seen Message......."); break; } } return isnew; } /** * * 判断此邮件是否包含附件 */ public boolean isContainAttach(Part part) throws Exception { boolean attachflag = false; String contentType = part.getContentType(); if (part.isMimeType("multipart/*")) { Multipart mp = (Multipart) part.getContent(); for (int i = 0; i < mp.getCount(); i++) { BodyPart mpart = mp.getBodyPart(i); String disposition = mpart.getDisposition(); if ((disposition != null) && ((disposition.equals(Part.ATTACHMENT)) || (disposition .equals(Part.INLINE)))) attachflag = true; else if (mpart.isMimeType("multipart/*")) { attachflag = isContainAttach((Part) mpart); } else { String contype = mpart.getContentType(); if (contype.toLowerCase().indexOf("application") != -1) attachflag = true; if (contype.toLowerCase().indexOf("name") != -1) attachflag = true; } } } else if (part.isMimeType("message/rfc822")) { attachflag = isContainAttach((Part) part.getContent()); } return attachflag; } /** * * 【保存附件】 */ public void saveAttachMent(Part part) throws Exception { String fileName = ""; if (part.isMimeType("multipart/*")) { Multipart mp = (Multipart) part.getContent(); for (int i = 0; i < mp.getCount(); i++) { BodyPart mpart = mp.getBodyPart(i); String disposition = mpart.getDisposition(); if ((disposition != null) && ((disposition.equals(Part.ATTACHMENT)) || (disposition .equals(Part.INLINE)))) { fileName = mpart.getFileName(); if (fileName.toLowerCase().indexOf("gb2312") != -1) { fileName = MimeUtility.decodeText(fileName); } saveFile(fileName, mpart.getInputStream()); } else if (mpart.isMimeType("multipart/*")) { saveAttachMent(mpart); } else { fileName = mpart.getFileName(); if ((fileName != null) && (fileName.toLowerCase().indexOf("GB2312") != -1)) { fileName = MimeUtility.decodeText(fileName); saveFile(fileName, mpart.getInputStream()); } } } } else if (part.isMimeType("message/rfc822")) { saveAttachMent((Part) part.getContent()); } } /** * * 【设置附件存放路径】 */ public void setAttachPath(String attachpath) { this.saveAttachPath = attachpath; } /** * * 【设置日期显示格式】 */ public void setDateFormat(String format) throws Exception { this.dateformat = format; } /** * * 【获得附件存放路径】 */ public String getAttachPath() { return saveAttachPath; } /** * * 【真正的保存附件到指定目录里】 */ private void saveFile(String fileName, InputStream in) throws Exception { String osName = System.getProperty("os.name"); String storedir = getAttachPath(); String separator = ""; if (osName == null) osName = ""; if (osName.toLowerCase().indexOf("win") != -1) { separator = "\\"; if (storedir == null || storedir.equals("")) storedir = "c:\\tmp"; } else { separator = "/"; storedir = "/tmp"; } File storefile = new File(storedir + separator + fileName); System.out.println("storefile's path: " + storefile.toString()); // for(int i=0;storefile.exists();i++){ // storefile = new File(storedir+separator+fileName+i); // } BufferedOutputStream bos = null; BufferedInputStream bis = null; try { bos = new BufferedOutputStream(new FileOutputStream(storefile)); bis = new BufferedInputStream(in); int c; while ((c = bis.read()) != -1) { bos.write(c); bos.flush(); } } catch (Exception exception) { exception.printStackTrace(); throw new Exception("文件保存失败!"); } finally { bos.close(); bis.close(); } } /** * * ReceiveMail类测试 */ public static void main(String args[]) throws Exception { String host = "pop.163.com"; String username = "demo";//您的邮箱用户名 String password = "******";//您的邮箱密码 Properties props = new Properties(); Session session = Session.getDefaultInstance(props, null); Store store = session.getStore("pop3"); store.connect(host, username, password); Folder folder = store.getFolder("INBOX"); folder.open(Folder.READ_ONLY); Message message[] = folder.getMessages(); System.out.println("Messages's length: " + message.length); ReceiveMail pmm = null; for (int i = 0; i < message.length; i++) { pmm = new ReceiveMail((MimeMessage) message[i]); System.out .println("Message " + i + " subject: " + pmm.getSubject()); System.out.println("Message " + i + " sentdate: " + pmm.getSentDate()); System.out.println("Message " + i + " replysign: " + pmm.getReplySign()); System.out.println("Message " + i + " hasRead: " + pmm.isNew()); System.out.println("Message " + i + " containAttachment: " + pmm.isContainAttach((Part) message[i])); System.out.println("Message " + i + " form: " + pmm.getFrom()); System.out.println("Message " + i + " to: " + pmm.getMailAddress("to")); System.out.println("Message " + i + " cc: " + pmm.getMailAddress("cc")); System.out.println("Message " + i + " bcc: " + pmm.getMailAddress("bcc")); pmm.setDateFormat("yy年MM月dd日 HH:mm"); System.out.println("Message " + i + " sentdate: " + pmm.getSentDate()); System.out.println("Message " + i + " Message-ID: " + pmm.getMessageId()); pmm.getMailContent((Part) message[i]); System.out.println("Message " + i + " bodycontent: \r\n" + pmm.getBodyText()); pmm.setAttachPath("c:\\tmp\\coffeecat1124"); pmm.saveAttachMent((Part) message[i]); } } }
2、SendMail.java
作用是邮件发送的示例代码,可完成多个附件的发送
package org.mail.core; import java.util.Date; import java.util.Enumeration; import java.util.Properties; import java.util.Vector; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart; import javax.mail.PasswordAuthentication; 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; /** * Title: 使用javamail发送邮件 * Description: 演示如何使用javamail包发送电子邮件。这个实例可发送多附件 * @version 1.0 */ public class SendMail { String to = "";// 收件人 String from = "";// 发件人 String host = "";// smtp主机 String username = ""; String password = ""; String filename = "";// 附件文件名 String subject = "";// 邮件主题 String content = "";// 邮件正文 Vector file = new Vector();// 附件文件集合 /** * <br> * 方法说明:默认构造器 <br> * 输入参数: <br> * 返回类型: */ public SendMail() { } /** * <br> * 方法说明:构造器,提供直接的参数传入 <br> * 输入参数: <br> * 返回类型: */ public SendMail(String to, String from, String smtpServer, String username, String password, String subject, String content) { this.to = to; this.from = from; this.host = smtpServer; this.username = username; this.password = password; this.subject = subject; this.content = content; } /** * <br> * 方法说明:设置邮件服务器地址 <br> * 输入参数:String host 邮件服务器地址名称 <br> * 返回类型: */ public void setHost(String host) { this.host = host; } /** * <br> * 方法说明:设置登录服务器校验密码 <br> * 输入参数: <br> * 返回类型: */ public void setPassWord(String pwd) { this.password = pwd; } /** * <br> * 方法说明:设置登录服务器校验用户 <br> * 输入参数: <br> * 返回类型: */ public void setUserName(String usn) { this.username = usn; } /** * <br> * 方法说明:设置邮件发送目的邮箱 <br> * 输入参数: <br> * 返回类型: */ public void setTo(String to) { this.to = to; } /** * <br> * 方法说明:设置邮件发送源邮箱 <br> * 输入参数: <br> * 返回类型: */ public void setFrom(String from) { this.from = from; } /** * <br> * 方法说明:设置邮件主题 <br> * 输入参数: <br> * 返回类型: */ public void setSubject(String subject) { this.subject = subject; } /** * <br> * 方法说明:设置邮件内容 <br> * 输入参数: <br> * 返回类型: */ public void setContent(String content) { this.content = content; } /** * <br> * 方法说明:把主题转换为中文 <br> * 输入参数:String strText <br> * 返回类型: */ public String transferChinese(String strText) { try { strText = MimeUtility.encodeText(new String(strText.getBytes(), "GB2312"), "GB2312", "B"); } catch (Exception e) { e.printStackTrace(); } return strText; } /** * <br> * 方法说明:往附件组合中添加附件 <br> * 输入参数: <br> * 返回类型: */ public void attachfile(String fname) { file.addElement(fname); } /** * <br> * 方法说明:发送邮件 <br> * 输入参数: <br> * 返回类型:boolean 成功为true,反之为false */ public boolean sendMail() { // 构造mail session Properties props = System.getProperties(); props.put("mail.smtp.host", host); props.put("mail.smtp.auth", "true"); Session session = Session.getDefaultInstance(props, new Authenticator() { public PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } }); try { // 构造MimeMessage 并设定基本的值 MimeMessage msg = new MimeMessage(session); msg.setFrom(new InternetAddress(from)); InternetAddress[] address = { new InternetAddress(to) }; msg.setRecipients(Message.RecipientType.TO, address); subject = transferChinese(subject); msg.setSubject(subject); // 构造Multipart Multipart mp = new MimeMultipart(); // 向Multipart添加正文 MimeBodyPart mbpContent = new MimeBodyPart(); mbpContent.setText(content); // 向MimeMessage添加(Multipart代表正文) mp.addBodyPart(mbpContent); // 向Multipart添加附件 Enumeration efile = file.elements(); while (efile.hasMoreElements()) { MimeBodyPart mbpFile = new MimeBodyPart(); filename = efile.nextElement().toString(); FileDataSource fds = new FileDataSource(filename); mbpFile.setDataHandler(new DataHandler(fds)); mbpFile.setFileName(fds.getName()); // 向MimeMessage添加(Multipart代表附件) mp.addBodyPart(mbpFile); } file.removeAllElements(); // 向Multipart添加MimeMessage msg.setContent(mp); msg.setSentDate(new Date()); // 发送邮件 Transport.send(msg); } catch (MessagingException mex) { mex.printStackTrace(); Exception ex = null; if ((ex = mex.getNextException()) != null) { ex.printStackTrace(); } return false; } return true; } /** * <br> * 方法说明:主方法,用于测试 <br> * 输入参数: <br> * 返回类型: */ public static void main(String[] args) { SendMail sendmail = new SendMail(); sendmail.setHost("smtp.163.com");//smtp.mail.yahoo.com.cn sendmail.setUserName("demo");//您的邮箱用户名 sendmail.setPassWord("******");//您的邮箱密码 sendmail.setTo("someone@yahoo.com.cn");//接收者 sendmail.setFrom("demo@163.com");//发送者 sendmail.setSubject("你好,这是测试2!"); sendmail.setContent("你好这是一个带多附件的测试2!"); sendmail.attachfile("c:/attachment1.txt"); sendmail.attachfile("c:/attachment2.txt"); sendmail.sendMail(); } }// end
恩,就这些了,其他的大家自己去挖掘吧。代码在eclipse下调试通过,请放心使用
好人做到底,我把两个jar包一起附上,大家多顶啊。
- mail.zip (381.3 KB)
- 描述: javamail所需要的两个jar包。mail.jar,activation.jar
- 下载次数: 48
相关推荐
在提供的压缩包文件"java实现邮件发送与接收"中,应该包含示例代码,帮助你更好地理解上述过程。通过运行这些代码,你可以快速测试邮件的发送和接收功能,并根据自己的需求进行定制。 请注意,对于Gmail等服务,...
JavaMail 是一个强大的 Java 库,它允许开发者在应用程序中实现电子邮件的发送和接收功能。这个库支持多种邮件协议,如 SMTP(简单邮件传输协议)用于发送邮件,POP3(邮局协议)和 IMAP(因特网消息访问协议)用于...
在使用JavaMail进行邮件发送的过程中,可能会遇到以下几种常见问题:发送成功但收件方未收到邮件、邮件收到后无主题或无收件人信息以及邮件内容出现乱码等情况。本文将详细探讨这些问题的原因及相应的解决方案。 ##...
### 实现邮件发送功能 接下来是文件中给出的部分代码示例。我们将基于这段代码进一步讲解如何发送邮件。 ```java public void senderEmailForPhone(TblEmailInfo mailInfo) { try { // 解码密码 BASE64Decoder ...
在本文中,我们将深入探讨如何使用 JavaMail 收取邮件,包括了解 POP3 和 IMAP 协议以及如何通过 JavaMail API 实现邮件的接收。 首先,我们需要知道发送邮件通常使用 SMTP(简单邮件传输协议),而接收邮件则涉及...
JavaMail 是一个用于处理电子邮件的开源库,它提供了发送和接收邮件的功能。本文将详细讲解如何使用JavaMail API来实现邮件的收取。 首先,我们需要了解一些基本配置。在示例代码中,创建了一个名为 `Config` 的...
JavaMail 是一个开源的 Java API,它允许开发者在 Java 应用程序中添加电子邮件功能,包括发送、接收邮件以及管理邮箱。在这个主题中,我们将深入探讨如何使用 JavaMail 实现邮件的加密和解密,以及如何进行邮件的...
### JavaMail收发Gmail邮件知识点详解 ...通过以上步骤,我们可以使用JavaMail实现对Gmail邮件的收发功能,并且通过SSL加密技术确保了数据的安全传输。这对于开发涉及邮件处理的应用程序非常有用。
总结一下,JavaMail是一个强大的库,提供了对POP3和IMAP协议的支持,使得在Java应用程序中收取邮件变得简单。通过配置邮件服务器的相关参数,连接到服务器,然后打开邮箱并遍历邮件,可以方便地获取邮件信息和附件。...
1、打开javamailsystem文件夹,找到javamail.jar可执行文件,双击该执行文件,即可打开Javamail邮件收发系统客户端软件。进入该系统后,首先选择“POP3/SMTP设置”按钮,对收发邮件所需的邮件服务器主机、收发邮件...
JavaMail是一种开源的Java库,它允许开发人员在Java应用程序中发送和接收电子邮件。IMAP(Internet Message Access Protocol)是一种标准的邮件访问协议,用于从邮件服务器检索邮件。Exchange 2007是微软的企业级...
JavaMail邮件上传发送的成功的小demo是一个实用的程序示例,它展示了如何利用JavaMail API在Java应用程序中实现邮件的上传和发送功能。JavaMail是一个开源的Java库,它提供了丰富的API,使得开发者能够轻松地处理...
很好的邮件处理代码,1.5版本,作为build path放在eclipse里面,就可以用啦! oracle官方推的,很好!jdk1.6版本以上用起来很方便。
在这个“email客户端-实现发送邮件-纯java实现-包括所需要的库文件”的主题中,我们将深入探讨如何使用 JavaMail API 实现一个简单的电子邮件客户端,以及必要的库文件。 首先,JavaMail API 提供了 javax.mail 包...
通常,邮件发送涉及以下步骤: 1. **配置Properties对象**:设置SMTP服务器地址、端口、用户名和密码等信息。 2. **创建Session对象**:使用Properties对象初始化Session,这是与邮件服务器交互的会话。 3. **创建...
基于Javamail的邮件收发系统是一款简单、方便、快捷的邮件系统。它能实现邮件的接收与发送,并能完成附件的传输,具有较好的人机交互性,易于使用。 开发环境:JDK1.6 + Windows平台 开发技术:Javamail 开发工具:...
JavaMail 是一个开源库,用于在Java应用程序中发送和接收电子邮件。...在"javamail附件从流中获取"这个主题中,我们将深入探讨如何使用...在实际开发中,我们还需要注意错误处理和异常捕获,确保邮件发送的健壮性。