`
canofy
  • 浏览: 831436 次
  • 性别: Icon_minigender_1
  • 来自: 北京、四川
社区版块
存档分类
最新评论

javaMail基本应用

    博客分类:
  • j2EE
阅读更多
仅仅实现了基本功能,如果需要有复杂的逻辑,在这个类的基础上进行扩展就行了,比如:邮件内容,邮箱,密码等基本信息放在配置文件里;实现群发引用该类,隔几秒发送一封邮箱灯等
package cn.test;

import java.util.Date;
import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
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;

/** 
 * Nov 26, 2008 
 */

public class SendMail {
	
	/**
	 * 授权,可以理解为用户登录吧
	 *
	 */
	public class MyAuthenticator extends Authenticator{
		String username=null;
		String password=null;
		public MyAuthenticator(){}
		
		public PasswordAuthentication check(String userName,String pwd){
			username=userName;
			password=pwd;
			return getPasswordAuthentication();
		}
		
		protected PasswordAuthentication getPasswordAuthentication(){
			return new PasswordAuthentication(username, password);
		}
	}

	
	public boolean send(){
		boolean result=false;
		Properties props = new Properties();	
		String smtpUser="qinshuangping@163.cn";
		String smtpPwd="****";
		String to="shuangping2003@163.com";
		props.put("mail.smtp.host", "smtp.canofy.cn");
		props.put("mail.smtp.user", smtpUser);
		props.put("mail.smtp.password", smtpPwd);
		//有了这条语句才能通过验证,否则会出错
		props.put("mail.smtp.auth", "true"); 
		
		MyAuthenticator auth=new MyAuthenticator();
		PasswordAuthentication pop=auth.check(smtpUser, smtpPwd);		
		
		Session mailSession=Session.getDefaultInstance(props,auth);
		
		MimeMessage mimeMessage=new MimeMessage(mailSession);
		try {
			//发件人
			mimeMessage.setFrom(this.getInternetAddress(smtpUser));
			//收件人 Message.RecipientType.TO 发送,Message.RecipientType.CC 抄送,Message.RecipientType.BCC 暗送
			mimeMessage.setRecipient(Message.RecipientType.TO,new InternetAddress(to));
			//标题
			mimeMessage.setSubject("title");
			//时间
			mimeMessage.setSentDate(new Date());
			//设置内容显示
			BodyPart mdp=new MimeBodyPart();			
			mdp.setText(this.getContent());
			//内容以text/html形式发送
//			mdp.setContent(this.getContent(), "text/html;charset=gb2312");
			Multipart mp=new MimeMultipart();
			mp.addBodyPart(mdp);
			mimeMessage.setContent(mp);
			mimeMessage.saveChanges();			
			//发送邮件
			Transport transport=mailSession.getTransport("smtp");
			transport.send(mimeMessage);
//			Transport.send(mimeMessage);
			result=true;
			
		} catch (Exception e) {
//			System.out.println(e.getMessage());
			e.printStackTrace();
		} 
		
		return result;
	}
	
	public InternetAddress getInternetAddress(String mail) throws Exception{
		return new InternetAddress(mail);
	}
	
	/**
	 * 获取邮件内容
	 * @return
	 */
	public String getContent(){
		String result="";
		result="content";
		return result;
	}
	
	/**
	 * 获取邮件地址
	 * @return
	 */
	public String getMainAddr(){
		String result="";
		return result;
	}
	/**
	 * 获取邮件标题
	 * @return
	 */
	public String getMailTitle(){
		String result="";
		return result;
	}
	
	public static void main(String[] args){
		SendMail sm=new SendMail();
		if(sm.send()){
			System.out.println("发送成功");
		}else{
			System.out.println("发送失败");
		}
	}
	
}



下面是一个应用,这只是部分代码:
package cn.mail;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

import org.apache.log4j.Logger;

import jp.mail.SendMail;

/**

 * Sep 28, 2008 
 */

public class TaskSend extends  Thread {
	private Logger logger=Logger.getLogger(TaskSend.class);
	private List mailList = new ArrayList();//发邮件列表
	private HashMap sendedMailMap = new HashMap();//已发送的邮件列表
	private HashMap errorMailMap = new HashMap();//已发错了的邮件列表
	
	public void run() {		
		String currentPath = System.getProperty("user.dir");  // 当前路径		
		String path_content = currentPath + "/mailContent.txt";//邮件内容
		String path_title   = currentPath + "/mailTitle.txt";//邮件主题		
		String path1        = currentPath + "/mailList.txt";	  //发邮件列表	
		String path2        = currentPath + "/sendedList.txt"; //已发送的邮件列表		
		String path_error   = currentPath + "/errorMail.txt"; //失败的邮件列表	
		//读邮件列表
		this.getSendMailList(path1, path2, path_error);
		
		String title  = this.getFileContent(path_title);
		String content= this.getFileContent(path_content);
		
		//logger.info("邮件主题:" + title);
		//logger.info("邮件内容:" + content);
		
		long begin = System.currentTimeMillis();
		
		String userName="";
		String mail="";
		boolean isresult = true;
		int len=mailList.size();
		int errCount = 0;
		String line = "";				
		try{
			SendMail send = null;
			logger.info("begin.......");
			for(int i=0;i<len;i++){
				logger.error("total=" + len + " current=" + (i+1));
				line = mailList.get(i).toString();			
				String temp[] = line.split("\t");
				if(temp.length<2)
					continue;				
				userName = temp[0];
				mail 	 = temp[1];
				
				logger.info("stop=" + i);
				 sleep(1 * 1000 );
				
//				if(i!=0 && i%200==0){
//					logger.info("stop=" + i);
//					 sleep(10 * 1000 );
//				}
	
				
		        send = new SendMail();
		        send.setContent(content.replaceAll("###USERNAME###", userName));
		        send.setTitle(title);
		        send.setRecipients(mail);
		        logger.info(line);
		        if(send.send()){					
		            //发送成功
		        	this.writeFile(path2, line+"\r\n");
		        }else{
		        	errCount++;
		        	//发送10次失败了
		        	if(errCount==3){
		        		 errCount=0;
//		        		 return 0;
		        		 sleep(5 * 1000 );
		        	}
		        	//发送失败
		        	this.writeFile(path_error, line+"\r\n");
		        }	        
			}
			logger.info("end.......");
		}catch(Exception e){
		    logger.error("发邮件失败:" + line, e);
		}
		
		long end = System.currentTimeMillis();
		logger.error("全部发送完毕,共用时:"+(end-begin));
		
//		return 9;
	}
	
	/**
	 * 获取发邮件列表
	 * @param path1
	 * @param path2
	 */
	public void getSendMailList(String path1, String path2, String path3){
		//读发邮件列表
		this.readMailList(path1);
		//读已成功发送的邮件列表
		this.readSendedMailList(path2);
		//读已出错的邮件列表
		this.readErrorMailList(path3);
		
		
		//如果已发送了的邮件就不再发送了
		String key="";
		if(this.sendedMailMap!=null && sendedMailMap.size()>0){
			int i = 0;
			while(i < mailList.size()){
				//查找如果有则去掉已发邮件项
				key = mailList.get(i).toString();
				if(sendedMailMap.containsKey(key)){
					mailList.remove(i);
					//System.out.println(i+"="+key);
				} else i++;
			}
		}
		
		//处理错误的邮件列表不再发送
		key="";
        if(this.errorMailMap!=null && this.errorMailMap.size()>0){
			int i = 0;
			while(i < mailList.size()){
				//查找如果有则去掉已发邮件项
				key = mailList.get(i).toString();
				if(errorMailMap.containsKey(key)){
					mailList.remove(i);
					//System.out.println(i+"="+key);
				} else i++;
			}        	
        }
		
				
	}	
	
	/**
	 * 读发邮件列表
	 * @param path
	 * @return
	 */
	public boolean readMailList(String path){
		boolean isresult=true;
		InputStream   is      = null;
		InputStreamReader isr = null;
		BufferedReader bf =null;
		try{	
		   is  = new   FileInputStream(path); 
		   isr = new   InputStreamReader(is);   
		    bf  = new BufferedReader(isr);
		 	String line = "";
			while((line=bf.readLine())!=null){
				//String temp[] = line.split("\t");				 
				mailList.add(line);			
			}	
			bf.close();
			isr.close();
			is.close();	
		}catch(Exception e){
			logger.error("读邮件列表出错:" + path, e);
			isresult=false;
			//
		}
		return isresult;
	}	
	
	
	/**
	 * 读已成功发送的邮件列表
	 * @param path
	 * @return
	 */
	public boolean readSendedMailList(String path){
		boolean isresult=true;
		InputStream   is      = null;
		InputStreamReader isr = null;
		BufferedReader bf =null;
		try{	
		   is  = new   FileInputStream(path); 
		   isr = new   InputStreamReader(is);   
		    bf  = new BufferedReader(isr);
		 	String line = "";
			while((line=bf.readLine())!=null){
				//String temp[] = line.split("\t");				 
				sendedMailMap.put(line, line);	
			}	
			bf.close();
			isr.close();
			is.close();	
		}catch(Exception e){
			logger.error("读邮件列表出错:" + path, e);
			isresult=false;
			//
		}
		return isresult;
	}		
	
	
	/**
	 * 出错误发送的邮件列表
	 * @param path
	 * @return
	 */
	public boolean readErrorMailList(String path){
		boolean isresult=true;
		InputStream   is      = null;
		InputStreamReader isr = null;
		BufferedReader bf =null;
		try{	
		   is  = new   FileInputStream(path); 
		   isr = new   InputStreamReader(is);   
		    bf  = new BufferedReader(isr);
		 	String line = "";
			while((line=bf.readLine())!=null){
				//String temp[] = line.split("\t");				 
				this.errorMailMap.put(line, line);	
			}	
			bf.close();
			isr.close();
			is.close();	
		}catch(Exception e){
			logger.error("读邮件列表出错:" + path, e);
			isresult=false;
			//
		}
		return isresult;
	}		
	

	/**
	 * 获取文件内容
	 * @param path
	 * @return
	 */
	public String getFileContent(String path){
		String context = "";
		InputStream   is      = null;
		InputStreamReader isr = null;
		BufferedReader bf =null;
		try{	
		   is  = new   FileInputStream(path); 
		   isr = new   InputStreamReader(is,"utf-8");   
		    bf  = new BufferedReader(isr);
		 	String line = "";
			while((line=bf.readLine())!=null){
				context += line;
			}	
			bf.close();
			isr.close();
			is.close();	
		}catch(Exception e){
			logger.error("读邮件内容出错:" + path, e);
		}
		return context;
	}	
	
	
	/**
	 * 写文件
	 * @param path
	 * @param content
	 * @return
	 */
	public boolean writeFile(String path, String content){
		 File file = null;
        try{
             file = new File(path);
          //   System.out.println("文件的路径是:" + file);
             BufferedWriter fileout = new BufferedWriter(new FileWriter(file, true));
             fileout.write(content);
             fileout.flush();
             fileout.close();
         }
         catch(Exception e){
             logger.error("写文件失败:" + file, e);
         }
      //   System.out.println("写文件完毕");
        return true;
     } 

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		TaskSend task=new TaskSend();
		task.start();

	}

	
}

分享到:
评论
2 楼 mniz 2009-05-08  
看了你的文章,我有几个疑问想问下

1、你发送的邮件到了服务器上面,看到你有读取已经发送成功的,在这里你是用什么来判断的?

2、看到你分了好几个类别
        String currentPath = System.getProperty("user.dir");  // 当前路径          
        String path_content = currentPath + "/mailContent.txt";//邮件内容   
        String path_title   = currentPath + "/mailTitle.txt";//邮件主题        
        String path1        = currentPath + "/mailList.txt";      //发邮件列表      
        String path2        = currentPath + "/sendedList.txt"; //已发送的邮件列表          
        String path_error   = currentPath + "/errorMail.txt"; //失败的邮件列表 


这些东西路径怎么不对? 这是什么,你详细说明下吗。看到你下面用这个东西去查找邮件能,File(path1) ?你确定这个path 对了?

能详细的解释下吗 ?如果可以的话,希望在QQ上请教下

793270160
1 楼 mniz 2009-05-08  
实现群发引用该类,隔几秒发送一封邮箱灯等 

相关推荐

    JavaMail组件简单应用

    对于初学者来说,理解和掌握JavaMail组件的基本应用是至关重要的,因为这将帮助他们构建出能够处理邮件交互的系统。本文将深入探讨JavaMail的核心概念、主要组件以及如何在实际项目中进行简单应用。 1. **JavaMail ...

    JavaMail_API基本原理

    JavaMail API 是Java平台上的一个标准扩展库,用于开发能够读写和发送电子邮件的应用程序。这个API的设计目标是实现与邮件服务提供商和具体协议无关的邮件操作,使得开发者可以轻松地在不同邮件系统间进行交互。...

    javamail(带界面的javamail)

    首先,我们要了解JavaMail的基本概念。JavaMail API 提供了 javax.mail 包,其中包含了许多类和接口,如 Session、Store、Folder、Message 和 Transport 等,它们分别代表邮件会话、邮件存储、邮件文件夹、邮件信息...

    javamail的jar包:javamail-1.6

    7. **认证机制**:JavaMail 支持多种身份验证机制,包括基本认证、NTLM、DIGEST-MD5等,以适应各种安全需求。 8. **邮件会话和属性**:邮件会话是JavaMail的核心概念,它封装了与邮件服务器交互所需的所有配置信息...

    javamail 所有jar包

    JavaMail 是一个开源的 Java API,它为开发者提供了在 Java 应用程序中发送和接收电子邮件的功能。这个API包括了多种协议的支持,如SMTP(简单邮件传输协议)、POP3(邮局协议)和IMAP(因特网消息访问协议)。在...

    javamail 视频源码 第一部分

    1. **JavaMail 基本概念**:首先,我们会了解 JavaMail 的基本架构和组件,如 Session、Message、Store 和 Transport。Session 是 JavaMail 的核心,用于设置配置信息和提供全局访问点。Message 表示电子邮件,Store...

    JavaMail相关Jar包

    在Java应用程序中发送电子邮件,通常需要依赖特定的库,JavaMail 就是其中之一。本主题将详细介绍JavaMail以及与之相关的`javamail1_4_5`和`jaf-1_1_1`这两个Jar包。 `javamail1_4_5.jar`是JavaMail的核心库,包含...

    javamail.jar,javamail资源包

    使用JavaMail发送邮件的基本步骤如下: 1. 创建一个`Properties`对象,设置SMTP服务器的属性,如主机名、端口、身份验证等。 2. 使用`Session.getInstance()`创建一个`Session`对象,传入上面的属性。 3. 创建一个`...

    JavaMail相关jar包

    首先,让我们了解JavaMail的基本组件: 1. **JavaMail API**:这是JavaMail的核心部分,提供了一组接口和类,使得开发者能够与邮件服务器进行交互,包括发送、接收邮件,以及处理附件、MIME类型等内容。 2. **Java...

    JavaMail邮件发送源码 非常简单

    JavaMail是一种在Java应用程序中发送和接收电子邮件的标准API,它为开发者提供了强大的功能,使得处理邮件变得简单而高效。在JavaMail中,我们主要利用 javax.mail 和 javax.mail.internet 这两个包中的类来实现邮件...

    javaMail代码

    最后,`2008美河原创视频.JavaMail系列讲座1` 可能是一系列视频教程的第一部分,这些教程可能通过实际操作进一步解释 JavaMail 的使用,包括基本概念的演示和复杂场景的处理。 总之,JavaMail 是 Java 平台上强大的...

    JavaMail 1.6.0 的官方例子

    通过对这些官方示例的深入学习和实践,开发者不仅可以掌握 JavaMail 的基本用法,还能了解如何解决实际开发中遇到的各种邮件处理问题。在使用 JavaMail 1.6.0 的过程中,理解并应用这些知识点将大大提高开发效率和...

    JavaMail文档

    在实际应用中,开发者通常会结合 JavaMail API 与 JavaEE 中的 JavaMail Session 组件,或者 Spring Framework 中的 JavaMailSender 接口来集成邮件发送功能。JavaMail 1.4.7 版本虽然较旧,但依然广泛使用,因为其...

    javamail依赖的包.

    JavaMail 是一个开源库,用于在Java应用程序中处理电子邮件。它提供了一组API,使得开发者可以方便地发送、接收和管理邮件。JavaMail API 支持SMTP、POP3、IMAP等多种邮件传输协议,同时也支持MIME标准,能处理复杂...

    javamail应用

    `Session` 类是JavaMail的核心,它定义了一个基本的邮件会话。所有的邮件操作都需要通过`Session`实例来完成。`Session`对象通过`java.util.Properties`获取配置信息,如邮件服务器地址、用户名、密码等。通常,我们...

    JavaMail javamail java电子邮件客户端

    JavaMail 是一个强大的开源库,专门用于在Java应用程序中实现电子邮件的发送和接收。它提供了对各种邮件协议的支持,如 Simple Mail Transfer Protocol (SMTP)、Post Office Protocol (POP3) 和 Internet Message ...

    JavaMail1.4.0正式版

    在JavaMail 1.4.0版本中,除了基本的SMTP、IMAP和POP3支持外,还可能包含了一些增强功能和错误修复,比如对SSL/TLS加密的支持,这使得邮件通信更加安全。此外,可能还有对MIME(多用途互联网邮件扩展)的支持,MIME...

    javamail使用demo示例

    这个"javamail使用demo示例"是JavaMail官方提供的一个实例集合,旨在帮助开发者更好地理解和应用JavaMail库。下面我们将深入探讨JavaMail的核心概念、主要功能以及如何使用这些示例代码。 一、JavaMail核心概念 1....

Global site tag (gtag.js) - Google Analytics