天使漫步IT工作室

java使用javamail发送和接受邮件代码示例(适用于android)


经过三天时间,这个收发邮件的程序终于做出来了,编译成功,执行也成功。只是尚不具备收附件(但可以成功发送)及显示超链接的功能,容以后慢慢琢磨。

这两个类主要要引入这么几个包:javax.mail.,javax.mail.internet.,java.util.,javax.activation.;

其中javax.mail,javax.mail.internet两个包在J2SE中是没有的,需要去sun公司的官方网站下载(如果不能成功下载,请给我留言)。下下来后粘贴到你的j2se安装目录中,我粘贴在d:jdk1.4.6jrelibext(就是通常粘贴数据库驱动程序包的地方)下,否则将不能成功编译。

一、邮件发送。

当我们要发送邮件时,最基本的参数要求有这么四个:收信人地址、主题、内通、发信人地址。因此我们应该把这四个参数作为主要参数在程序中使用。

import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
import java.io.File;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.activation.DataHandler;
public class SimpleSender{

public static void main(String[] args){

    String serverhost=args[0];
    String touser=args[1];
    String fromuser=args[2];
    String subject=args[3];
    String content=args[4]; 
    String filename=args[5];

    send(serverhost,touser,fromuser,subject,content,filename);
    
     System.exit(0);
}

   public static void send(String serverhost,String touser,String fromuser,String subject, String content,String filename){ 
          try{
                 Properties props=System.getProperties();
                 props.put("mail.smtp.host",serverhost);
                 Session session=Session.getDefaultInstance(props,null);
                  
                 Message ms=new MimeMessage(session);
                 ms.setFrom(new InternetAddress(fromuser));
                 ms.setRecipients(Message.RecipientType.TO,InternetAddress.parse(touser,false));
                 //if(cc!=null)
                  //ms.setRecipients(Message.RecipientType.CC,InternetAddress.parse(cc,false));
                 ms.setSubject(subject);
                 
                 MimeMultipart mp=new MimeMultipart();
                 DataSource ds=new FileDataSource(new File(filename));//将文件变为datasoucer
                 BodyPart bpt=new MimeBodyPart();
                 bpt.setContent(content,"text/plain;charset=UTF-8");//将正文存入bodypart1中
                 mp.addBodyPart(bpt);//将bodypart1存入multipart中
                 BodyPart bp=new MimeBodyPart();
                 bp.setDataHandler(new DataHandler(ds));//将附件内容存入bodypart2中
                 bp.setFileName(filename);//将附件名称存入bodypart2中
                 mp.addBodyPart(bp);
                 ms.setContent(mp);
                   
                 ms.setHeader("X-Mailer","LOTONtechEmail");
                 ms.setSentDate(new Date());
                 Transport.send(ms);
                  System.out.println("message is delivered!");
         } 
          catch(Exception ex){ex.printStackTrace();}

   }
}

ok,看起来似乎很简单。

这是通过servlet的方式编写而且使用了javax.mail包的结果,也许是掌握不熟练的原因吧。那我们用stmp包的话,情况又如何呢?且看:

<%@page import="sun.net.smtp.SmtpClient,java.io.*"%>
<%
  String from=String.valueOf(request.getParameter("from")).toString();
  String to=String.valueOf(request.getParameter("to")).toString();
  String sub=String.valueOf(request.getParameter("sub")).toString();
  String mess=String.valueOf(request.getParameter("mess")).toString();
  try{
     SmtpClient client=new SmtpClient("linuxaid.com.cn");

     //括号中的参数可以是服务器的IP地址
    client.from(from);
    client.to(to);
    PrintStream message=client.startMessage();
    message.println("To:"+to);
    message.println("Subject:"+sub);
    message.println(mess);
    client.closeServer();
    out.println("邮件发送成功");
   }catch(Exception e){}
%>

二、接收邮件

package com.lotontech.mail;

import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
import java.io.*;

public class SimpleAccept{

      public static void main(String[] args){
            String host=args[0];
            String user=args[1];
            String password=args[2];
              accept(host,user,password);
      }

      private static void accept(String host,String user,String password){
                 try{
              Properties props=new Properties();
              Session session=Session.getDefaultInstance(props,null);
              Store store=session.getStore("pop3");
              store.connect(host,user,password);
              Folder folder=store.getFolder("INBOX");
              folder.open(Folder.READ_ONLY);
              BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
              Message message[]=folder.getMessages();
              for(int i=0;i<=message.length;i++){
                    System.out.println(i+":"+message[i].getFrom()+"\t"+
                      "subject:"+message[i].getSubject());
   
                    System.out.println("Do you want to read the message?[yes/no]");
                    String want=reader.readLine();
                       if(want.equals("yes"))                  
                                System.out.println("message content:"+"\t"+message[i].getContent());
                        else continue;
             }

             folder.close(false);
             store.close();
          }catch(Exception e){e.getStackTrace();}
       }

}

至此收发的示例代码结束,以上经过测试并通过。

当前页面是本站的「Baidu MIP」版。查看和发表评论请点击:完整版 »