java 邮件服务

本文介绍了一个JavaMail类的实现,该类能够完成邮件的发送与接收功能。发送邮件支持纯文本内容及附件,并可通过SMTP服务器进行身份验证;接收邮件则利用POP3协议从指定邮箱中获取邮件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.dtb.comment;



import java.util.Properties; 

import javax.mail.*; 

import javax.mail.internet.*;

import javax.activation.*;

import java.util.Date;

import com.dtb.utils.*;

import java.io.*;



public class JavaMail {



	public String sendhost;

	public String receivehost;

	public String from;

	public String passwd;

	public String to;

	

	public JavaMail(){

		this.sendhost="发送服务器";

		this.receivehost="接收服务器";

		this.from="帐户";

		this.passwd="密码";

	}

	/**

	 * 设置发邮件信息

	 *

	 */

	public void setSendMail(String to){

		if(StringUtil.isFine(to))

			this.to=to;

	}



	/**

	 * 发送email

	 * @param from 发件人

	 * @param to 收件人

	 * @param title 标题

	 * @param mailcontent 内容

	 * @param host 发送邮件服务器(SMTP)

	 */

	public void sendMail(String title,String mailcontent){



		Properties props = System.getProperties();//得到系统属性

		

		props.put("mail.smtp.host",sendhost);//压入发送邮件服务器(SMTP)

		

		props.put("mail.smtp.auth", "true"); //这样才能通过验证

		

		MyAuthenticator myauth = new MyAuthenticator(from,passwd);

		

	    Session session = Session.getDefaultInstance(props, myauth); // Get session

	    

		try{//Define message



			MimeMessage message = new MimeMessage(session);

			

			message.setFrom(new InternetAddress(from));

			

			String mailList[] = to.split(";");

			

			for(int i=0;i<mailList.length;i++){

				message.addRecipient(Message.RecipientType.TO, new InternetAddress(mailList[i]));

			}

			

			message.setSubject(title);//加入邮件标题

			

			message.setText(mailcontent);//加入邮件内容

			

			Transport.send(message);// 发送邮件

		}

		catch (Exception e){e.printStackTrace();}

		

	}

	/**

	 * 发送附件

	 * @param title 标题

	 * @param mailconent 文体内容

	 * @param filenames 本地文件

	 */

	public void sendAppendix(String title,String mailconent,String filenames){

		

		Properties props = System.getProperties();//得到系统属性

		

		props.put("mail.smtp.host",sendhost);//压入发送邮件服务器(SMTP)

		

		props.put("mail.smtp.auth", "true"); //这样才能通过验证

		

		MyAuthenticator myauth = new MyAuthenticator(from,passwd);

		

	    Session session = Session.getDefaultInstance(props, myauth);//获取默认会话

	    

	    try{

	    	MimeMessage msg = new MimeMessage(session);//建立邮件

	    	msg.setFrom(new InternetAddress(from));

	    	InternetAddress[] address = {new InternetAddress(to)};

	    	msg.setRecipients(Message.RecipientType.TO, address);

	    	msg.setSubject(title);



	    	MimeBodyPart mbp1 = new MimeBodyPart();//用于存放文本内容

	    	mbp1.setText(mailconent);

	    	

	    	MimeMultipart   mimemultipart   =   new   MimeMultipart();

	    	mimemultipart.addBodyPart(mbp1);//加入文字内容   



	    	if(!StringUtil.isFine(filenames))

	    		return;

	    	String[] filelist=filenames.split(",");

	    	

	    	MimeBodyPart mbp2;//用于存放附件内容

            FileDataSource   filedatasource;   



            for(int i=0;i<filelist.length;i++){

            	//逐个加入附件内容

            	mbp2=new MimeBodyPart();   

                filedatasource=new FileDataSource(filelist[i]);   

                mbp2.setDataHandler(new DataHandler(filedatasource));   

                mbp2.setFileName(filedatasource.getName());   

                mimemultipart.addBodyPart(mbp2);   

            }



	    	//压入附件内容

	    	msg.setContent(mimemultipart);



	    	//压入当前时间

	    	msg.setSentDate(new Date());



	    	//发送邮件

	    	Transport.send(msg);



	    } 

    	catch (MessagingException mex) {

	    	mex.printStackTrace();

    	}

	}



	/**

	 * 接收邮件

	 * @param popServer

	 * @param popUser

	 * @param popPwd

	 */

	public void receiveMail(){

		Store store=null;

        Folder folder=null;

        try{

            

            Properties props = System.getProperties();//得到系统属性

            

            Session session = Session.getDefaultInstance(props, null);//获取默认会话

            

            store = session.getStore("pop3");//使用POP3会话机制,连接服务器

            

            store.connect(receivehost, from, passwd);//压入接收邮件服务器,用户,密码

            

            folder = store.getDefaultFolder();//获取默认文件夹

            

            if (folder == null) throw new Exception("No default folder");

            

            folder = folder.getFolder("INBOX");//链接收件箱

            

            if (folder == null) throw new Exception("No POP3 INBOX");

            

            folder.open(Folder.READ_ONLY);//使用只读方式打开收件箱

            

            Message[] msgs = folder.getMessages();//得到文件夹信息,获取邮件列表

            

            for (int msgNum = 0; msgNum < msgs.length; msgNum++){

                printMessage(msgs[msgNum]);

            }

        }

        catch (Exception ex){

            ex.printStackTrace();

        }

        finally{//释放资源

        	try{

                if (folder!=null) folder.close(false);

                if (store!=null) store.close();

            }

        	catch (Exception ex2){

                ex2.printStackTrace();

            }

        }

	}

	/**

	 * 打印邮件内容

	 * @param message

	 */

	public void printMessage(Message message){

		try{

            String from=((InternetAddress)message.getFrom()[0]).getPersonal();//获得发送邮件地址

            

            if (from==null) from=((InternetAddress)message.getFrom()[0]).getAddress();

            

            System.out.println("FROM: "+from);

            

            String subject=message.getSubject();//获取标题

            

            System.out.println("SUBJECT: "+subject);

            

            Part messagePart=message;//获取信息对象

            

            Object content=messagePart.getContent();//附件

            

            if (content instanceof Multipart){

                messagePart=((Multipart)content).getBodyPart(0);

                System.out.println("[ Multipart Message ]");

            }

            

            String contentType=messagePart.getContentType();//获取content类型

            

            System.out.println("CONTENT:"+contentType);

            

            //如果邮件内容是纯文本或者是HTML,那么打印出信息

            if (contentType.startsWith("text/plain") || contentType.startsWith("text/html")){

                InputStream is = messagePart.getInputStream();

                BufferedReader br=new BufferedReader(new InputStreamReader(is));

                String thisLine="";

                while ((thisLine=br.readLine())!=null){

                    System.out.println(thisLine);

                    thisLine=br.readLine();

                }

            }

            System.out.println("-------------- END ---------------");

        }

		catch (Exception ex){

            ex.printStackTrace();

        }

    }



	public static void main(String[] args){		

		JavaMail mymail=new JavaMail();

	}

}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值