`
seachen
  • 浏览: 5988 次
  • 性别: Icon_minigender_2
  • 来自: 广州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

javamail1.5.jar及sample

    博客分类:
  • mail
阅读更多
package com.phoenics.mail;


import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Flags;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Part;
import javax.mail.Session;
import javax.mail.Store;
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;

public class ReceiveMail {

	// 21-30行把本程序所用变量进行定义。 具体在main中对它们赋植。
	private MimeMessage mimeMsg; // MIME邮件对象
	private Session session; // 邮件会话对象
	private Properties props; // 系统属性
	private boolean needAuth = false; // smtp是否需要认证
	private String username = ""; // smtp认证用户名和密码
	private String password = "";
	private Multipart mp; // Multipart对象,邮件内容,标题,附件等内容均添加到其中后再生成//MimeMessage对象
	private MimeMessage mimeMessage = null;
	private String saveAttachPath = ""; // 附件下载后的存放目录
	public ReceiveMail(MimeMessage mimeMessage) {
		this.mimeMessage = mimeMessage;
	}
	public ReceiveMail(String smtp) {
		setSmtpHost(smtp);
		createMimeMessage();
	}

	public ReceiveMail() {
	}

	public void setSmtpHost(String hostName) {
		System.out.println("设置系统属性:mail.smtp.host = " + hostName);
		if (props == null)
			props = System.getProperties(); // 获得系统属性对象
		System.out.println("hostName:"+hostName);
		props.put("mail.smtp.host", hostName);
	}

	public boolean createMimeMessage() {
		boolean flag = false;
		try {
			System.out.println("准备获取邮件会话对象!");
			session = Session.getDefaultInstance(props, null); // 获得邮件会话对象
		} catch (Exception e) {
			System.err.println("获取邮件会话对象时发生错误!" + e);
			flag = false;
		}
		System.out.println("准备创建MIME邮件对象!");
		try {
			mimeMsg = new MimeMessage(session); // 创建MIME邮件对象
			mp = new MimeMultipart(); // mp 一个multipart对象
			flag = true;
		} catch (Exception e) {
			System.err.println("创建MIME邮件对象失败!" + e);
			flag = false;
		}
		return flag;
	}

	public void setNeedAuth(boolean need) {
		System.out.println("设置smtp身份认证:mail.smtp.auth = " + need);
		if (props == null)
			props = System.getProperties();
		if (need) {
			props.put("mail.smtp.auth", "false");
			props.put("mail.smtp.quitwait", "false");
		} else {
			props.put("mail.smtp.auth", "false");
			props.put("mail.smtp.quitwait", "false");
		}
	}

	public void setNamePass(String name, String pass) {
		System.out.println("程序得到用户名与密码");
		username = name;
		password = pass;
	}

	public boolean setSubject(String mailSubject) {
		System.out.println("设置邮件主题!");
		try {
			mimeMsg.setSubject(mailSubject);
			return true;
		} catch (Exception e) {
			System.err.println("设置邮件主题发生错误!");
			return false;
		}
	}

	public boolean setBody(String mailBody) {
		try {
			System.out.println("设置邮件体格式");
			BodyPart bp = new MimeBodyPart();
			bp.setContent(
					"<meta http-equiv=Content-Type content=text/html; charset=gb2312>"
							+ mailBody, "text/html;charset=GB2312");
			mp.addBodyPart(bp);
			return true;
		} catch (Exception e) {
			System.err.println("设置邮件正文时发生错误!" + e);
			return false;
		}
	}

	public boolean addFileAffix(String filename) {
		System.out.println("增加邮件附件:" + filename);
		try {
			BodyPart bp = new MimeBodyPart();
			FileDataSource fileds = new FileDataSource(filename);
			bp.setDataHandler(new DataHandler(fileds));
			bp.setFileName(fileds.getName());
			mp.addBodyPart(bp);
			return true;
		} catch (Exception e) {
			System.err.println("增加邮件附件:" + filename + "发生错误!" + e);
			return false;
		}
	}

	public boolean setFrom(String from) {
		System.out.println("设置发信人!");
		try {
			mimeMsg.setFrom(new InternetAddress(from)); // 设置发信人
			return true;
		} catch (Exception e) {
			return false;
		}
	}

	public boolean setTo(String to) {
		System.out.println("设置收信人");
		if (to == null) {
			return false;
		}
		try {
			mimeMsg.setRecipients(Message.RecipientType.TO,
					InternetAddress.parse(to));
			return true;
		} catch (Exception e) {
			return false;
		}
	}

	public boolean setCopyTo(String copyto) {
		System.out.println("发送附件到");
		if (copyto == null)
			return false;
		try {
			mimeMsg.setRecipients(Message.RecipientType.CC,
					(Address[]) InternetAddress.parse(copyto));
			return true;
		} catch (Exception e) {
			return false;
		}
	}

	// 发送邮件
	public boolean sendout() {
		try {
			mimeMsg.setContent(mp);
			mimeMsg.saveChanges();
			System.out.println("正在发送邮件....");
			Session mailSession = Session.getInstance(props, null);
			Transport transport = mailSession.getTransport("smtp"); // 
			transport.connect((String) props.get("mail.smtp.host"), username,
					password);
			transport.sendMessage(mimeMsg,
					mimeMsg.getRecipients(Message.RecipientType.TO));
			// transport.send(mimeMsg);
			System.out.println("content.." + mimeMsg.toString());
			System.out.println("发送邮件成功!");
			transport.close();
			return true;
		} catch (Exception e) {
			System.err.println("邮件发送失败!" + e);
			return false;
		}
	}

	public void saveAttachment(Part part) {
		try {
			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("gbk") != -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());
			}
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} catch (MessagingException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 获取文件扩展名
	 * 
	 * @param filename
	 * @return
	 */
	public static String getExtensionName(String fileName) {
		String extensionName = "";
		if ((fileName != null) && (fileName.length() > 0)) {
			int dot = fileName.lastIndexOf('.');
			if ((dot > -1) && (dot < (fileName.length() - 1))) {
				extensionName = fileName.substring(dot + 1);
				// excel文件扩展名有两种常用形式.xls和.xlsx,此两种扩展名统一放在xlsx目录下
				if (extensionName.equalsIgnoreCase("pdf")) {
					extensionName = "pdf";
				}
				return extensionName;
			}
		}

		return extensionName;
	}

	/**
	 * 获得附件存放路径
	 */
	public String getAttachPath() {
		return saveAttachPath;
	}
	/**
	 * 真正的保存附件到指定目录里
	 */
	private void saveFile(String fileName, InputStream in) {
		String osName = System.getProperty("os.name");
		String storedir = getAttachPath();
		String separator = "";
		String extensionName = "";
		if (osName == null)
			osName = "";
		if (osName.toLowerCase().indexOf("win") != -1) {
			separator = "//";
			if (storedir == null || storedir.equals("")) {
				storedir = "D://tmp//";
			}
		} else {
			separator = "/";
			storedir = "/tmp";
		}

		// pdf和excel文件分开放在临时目录下
		extensionName = ReceiveMail.getExtensionName(fileName);
		storedir += extensionName;

		// fileName = UIDGenerator.getUID();
		File storefile = null;
		try {
			storefile = new File(MimeUtility.decodeText(storedir)
					+ MimeUtility.decodeText(separator)
					+ MimeUtility.decodeText(fileName));
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		// 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 {
			try {
				bos.close();
				bis.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
	public void sendMail() {
		String mailbody = "测试 1";

		ReceiveMail themail = new ReceiveMail("smtp.163.com");
		themail.setNeedAuth(false);
		if (themail.setSubject("xlsx1") == false)
			return;
		// 邮件内容 支持html 如 <font color=red>欢迎光临</font> <a
		// href=\"http://www.laabc.com\">啦ABC</a>
		if (themail.setBody(mailbody) == false)
			return;
		// 收件人邮箱
		if (themail.setTo("username@163.com") == false)
			return;
		// 发件人邮箱
		if (themail.setFrom("username@163.com") == false)
			return;
		// 设置附件
		themail.addFileAffix("D:\\1.pdf");
		themail.addFileAffix("D:\\2.pdf");
		themail.addFileAffix("D:\\3.pdf");
		
		// if (themail.addFileAffix("D:\\crm2.pdf") == false)
		// return; // 附件在本地机子上的绝对路径
		themail.setNamePass("username", "password"); // 用户名与密码
		themail.sendout();
	}

	public void getMail() {
		try {
			Properties properties = System.getProperties();
			properties.put("mail.store.protocol", "imap");  
            properties.put("mail.imap.host", "imap.163.com");  
			Session session = Session.getDefaultInstance(properties);
			Store store = session.getStore("imap");
			store.connect("imap.163.com", "username", "password");

			Folder folder = store.getDefaultFolder();
			folder = folder.getFolder("INBOX");
			folder.open(Folder.READ_WRITE);
			System.out.println("新邮件:" + folder.getUnreadMessageCount());
			Message[] message = folder.getMessages();

			System.out.println("mail count:" + message.length);

			for (int i = 0; i < message.length; i++) {
				if (!message[i].getFlags().contains(Flags.Flag.SEEN)) {
					message[i].setFlag(Flags.Flag.SEEN, true);
					ReceiveMail receiveMail = new ReceiveMail((MimeMessage) message[i]);
					receiveMail.saveAttachment((Part) message[i]);
				}
			}
			System.out.println("接收完毕");
			folder.close(false);
			store.close();
		} catch (Exception ex) {
			System.out.println(ex);
		}
	}

	public static void main(String[] args) {
		ReceiveMail mail = new ReceiveMail("smtp.163.com");
		//mail.sendMail();
		mail.getMail();
	}
}

 

分享到:
评论

相关推荐

    ant发邮件所需的jar(activation.jar+javax.mail.jar+mail.jar+commons-email-1.2.jar)

    3. **mail.jar**:在某些情况下,javax.mail.jar可能会包含在名为mail.jar的文件中,它是JavaMail API的完整实现,包含了发送邮件所需的所有组件。 4. **commons-email-1.2.jar**:这是Apache Commons Email库,...

    javamail=mail.jar+activation.jar+additionnal.jar

    标题提到的"javamail=mail.jar+activation.jar+additionnal.jar",这实际上是JavaMail API的三个核心组件。 1. **mail.jar**:这是JavaMail的核心库,包含了处理邮件所需的主要类和接口。它提供了与邮件服务器交互...

    ant-javamail.jar.zip

    《Ant-Javamail.jar.zip:Ant与JavaMail的整合应用》 在Java开发中,Ant和JavaMail是两个非常重要的工具。Ant是Apache软件基金会的一个项目,它是一个基于Java的构建工具,用来管理和自动化软件项目的构建过程。而...

    mail.jar、commons-email-1.2.jar 、activation.jar下载

    `mail.jar`包含核心的JavaMail组件,如`javax.mail`包,该包定义了用于邮件操作的基本接口和类,如`Session`(邮件会话)、`Message`(邮件对象)、`Transport`(用于发送邮件)等。 2. **Apache Commons Email**...

    javamail包 mail.jar activation.jar additionnal.jar

    在标题和描述中提到的三个jar文件——mail.jar、activation.jar以及additionnal.jar,是JavaMail实现其功能的关键组件。 1. **mail.jar**: 这是JavaMail的核心库,包含了处理邮件所需的各种类和接口。例如,`javax....

    javamail.jar.zip

    这个压缩包"javamail.jar.zip"包含了几个关键的组件,可以帮助开发者实现在Java环境中发送和接收邮件的功能。让我们详细了解一下这些组件以及它们在JavaMail中的作用。 首先,我们有"mail.jar",这是JavaMail的核心...

    javamail.jar+jaf.jar

    然而,`javamail.jar`本身并不包含处理MIME类型数据的能力,这就是`jaf.jar`(JavaBeans Activation Framework)的作用。JAF是一个用于识别和处理未知数据类型的框架,尤其适用于电子邮件中的复杂MIME结构。它定义了...

    java_mail 1.5.zip

    这个“java_mail 1.5.zip”压缩包包含的是JavaMail 1.5版本的源代码,对于理解其内部工作原理和自定义扩展功能非常有帮助。 JavaMail API的核心组件包括: 1. **JavaMail Session**: 是JavaMail的核心,负责配置...

    ant-javamail-1.6.jar.zip

    This is a test email sent using Ant and JavaMail. ``` 总的来说,ant-javamail-1.6.jar.zip是Java开发者的一个强大工具,它整合了Ant的构建能力与JavaMail的邮件处理功能,使得在自动化流程中处理邮件变得...

    javamail-1.4.5.jar

    mail.jar 来自版本javamail-1.4.5

    javamail1.4.5和javax.mail-1.5.5.jar

    在给定的压缩包文件中,我们有两个关键组件:`javax.mail-1.5.5.jar` 和 `javamail1_4_5.zip`。 `javax.mail-1.5.5.jar` 是JavaMail API的一个版本,版本号为1.5.5。这个API定义了一组接口和类,用于与各种邮件系统...

    ant-javamail-1.6.5.jar

    Jenkins构建结果发送邮件所需jar包,本人发表的文章标题为《使用Jenkins-ant-jmeter发送构建结果到指定邮箱报错的问题》所需jar包

    mail.jar, activation.jar, xerces.jar, xmlsec-1.2.1.jar

    首先,`mail.jar`是JavaMail API的一部分,它提供了处理电子邮件的能力。JavaMail API是一个开源库,允许Java开发者创建、发送和接收邮件。它支持多种协议,如SMTP(简单邮件传输协议)、POP3(邮局协议版本3)和...

    javamail 1.4.3 mail.jar 1.4.3 jar 包+源代码下载 天涯浪子

    这个标题提到的是JavaMail的1.4.3版本,其中包含了mail.jar库文件以及对应的源代码。mail.jar是JavaMail的核心库,包含了处理SMTP(简单邮件传输协议)、POP3(邮局协议)和IMAP(因特网消息访问协议)等邮件协议的...

    mail.jar+activation.jar+additional.jar

    在JavaMail中,`mail.jar`是核心库,它包含了处理邮件发送、接收和管理的基本功能。`activation.jar`则是一个额外的组件,它提供了JAF(JavaBeans Activation Framework),使得程序能够识别和操作不同的数据类型,...

    activation.jar、jsp-api.jar、servlet-api.jar、mail.jar

    1. **activation.jar**: 这个文件包含了JavaBeans Activation Framework (JAF),它是Java平台的一个标准组件,主要用于处理MIME类型的数据,如电子邮件、文件附件等。JAF使得应用程序能够识别和操作不同数据格式,...

    javamail.jar,activation.jar

    Android开发电子邮件操作依赖Jar包:javamail.jar,activation.jar

    activation.jar commons-email-1.2.jar mail.jar免费下载

    JavaMail API依赖于activation.jar来处理MIME类型,而commons-email-1.2.jar则是基于JavaMail提供更高级别的邮件操作接口。 至于压缩包内的文件名称列表,"《大家一起学编程》.jpg"可能是一个编程学习资源的图片,...

    javamail.jar和activation.jar(jaf)

    1. 添加javamail.jar和activation.jar到项目的类路径。 2. 使用Session对象初始化邮件会话,配置邮件服务器的参数,如主机名、端口号、用户名和密码。 3. 创建Message对象,设置发件人、收件人、主题和内容。 4. ...

Global site tag (gtag.js) - Google Analytics