能否给出例子程序,如果有以做好的程序当然最好!

解决方案 »

  1.   

    1。送信
    import java.util.Properties;
    import java.util.Date;
    import javax.mail.Session;
    import javax.mail.Message;
    import javax.mail.Transport;
    import javax.mail.internet.MimeMessage;
    import javax.mail.internet.InternetAddress;public class HelloWorldJavaMail {
      public static void main(String[] args) {
        try {
          Properties props = System.getProperties();
          props.put("mail.smtp.host","xxx.xxx.xxx.xxx");
          Session session=Session.getDefaultInstance(props,null);
          MimeMessage mimeMessage=new MimeMessage(session);
          mimeMessage.setFrom(new InternetAddress("[email protected]","姓名","gb2312"));
          mimeMessage.setRecipients(Message.RecipientType.TO,"[email protected]");
          mimeMessage.setSubject("Hello World JavaMail","gb2312");
          mimeMessage.setText("<h1>Hello World JavaMail</h1>","gb2312");
          mimeMessage.setHeader("Content-Type","text/html");
          mimeMessage.setSentDate(new Date());
          Transport.send(mimeMessage);
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
    }2。收信
    import javax.mail.*;
    import javax.mail.internet.*;
    import java.util.*;public class HelloWorldPOP {
      public static void main(String args[]) {
        try {
          String host="xxx.xxx.xxx.xxx"; 
          String user="xxxxxx"; 
          String password="xxxxxx";       Session session = Session.getDefaultInstance(System.getProperties(), null);
          Store store = session.getStore("pop3");
          store.connect(host, -1, user, password);      Folder folder = store.getFolder("INBOX");
          folder.open(Folder.READ_ONLY);      int totalMessages = folder.getMessageCount();
          if (totalMessages == 0) {
              System.out.println("没有邮件");
              folder.close(false);
              store.close();
              return;
          }      Message[] messages = folder.getMessages();
          for (int i = 0; i < messages.length; i++) {
            showMessage(messages[i]);
          }      folder.close(false);
          store.close();
        } catch (Exception e) {
          e.printStackTrace();
        }
      }  public static void showMessage(Message m) throws Exception {
        Address[] a;
        if ((a = m.getFrom())!=null) {
          for (int j = 0; j < a.length; j++) {
            System.out.println("送信人: " + MimeUtility.decodeText(a[j].toString()));
          }
        }    if ((a = m.getRecipients(Message.RecipientType.TO))!=null) {
          for (int j = 0; j < a.length; j++) {
            System.out.println("收信人: " + MimeUtility.decodeText(a[j].toString()));
          }
        }    System.out.println("主体: " + m.getSubject());
        Date d = m.getSentDate();
        System.out.println("日期: " + (d!= null ? d.toString() : "不明"));
        System.out.println("大小: " + m.getSize());
        System.out.println("内容:\n" + m.getContent());
      }
    }
    用JAVAMAIL很容易实现的。参照:
    http://java.sun.com/products/javamail/
      

  2.   

    附件的例子:邮件的大小,和你的JAVA环境以及MAIL环境有关系。import java.util.*;
    import java.io.*;
    import javax.mail.*;
    import javax.mail.internet.*;
    import javax.activation.*;public class HelloWorldSendFile {
      public static void main(String[] args) {
        try {
          Properties props = System.getProperties();
          props.put("mail.smtp.host", "xxx.xxx.xxx.xxx");
          Session session = Session.getDefaultInstance(props, null);
          MimeMessage mimeMessage = new MimeMessage(session);
          mimeMessage.setFrom(new InternetAddress("[email protected]","姓名","gb2312"));
          mimeMessage.setRecipients(Message.RecipientType.TO, "[email protected]");
          mimeMessage.setSubject("SendMail附件!" , "gb2312");      MimeBodyPart mbp1 = new MimeBodyPart();
          mbp1.setText("SendMail追加附件" , "gb2312");      MimeBodyPart mbp2 = new MimeBodyPart();
          FileDataSource fds = new FileDataSource("helloworld.txt");
          mbp2.setDataHandler(new DataHandler(fds));
          mbp2.setFileName(MimeUtility.encodeWord(fds.getName()));      Multipart mp = new MimeMultipart();
          mp.addBodyPart(mbp1);
          mp.addBodyPart(mbp2);      mimeMessage.setContent(mp);      mimeMessage.setSentDate(new Date());
          Transport.send(mimeMessage);
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
    }
      

  3.   

    带附件的收信的例子:import javax.mail.*;
    import javax.mail.internet.*;
    import java.io.*;
    import java.util.*;public class HelloWorldPOPA {
      static int attachnum = 1;  public static void main(String args[]) {
        try {
          String host="xxx.xxx.xxx.xxx";
          String user="xxxxxx";
          String password="xxxxxx";      Session session = Session.getDefaultInstance(System.getProperties(), null);
          Store store = session.getStore("pop3");
          store.connect(host, -1, user, password);      Folder folder = store.getFolder("INBOX");
          folder.open(Folder.READ_ONLY);      int totalMessages = folder.getMessageCount();
          if (totalMessages == 0) {
              System.out.println("没有邮件");
              folder.close(false);
              store.close();
              return;
          }      Message[] messages = folder.getMessages();
          for (int i = 0; i < messages.length; i++) {
            dumpPart(messages[i]);
          }      folder.close(false);
          store.close();
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
      public static void dumpPart(Part p) throws Exception {
        String html = "";
        boolean attachment = false;    if (p instanceof Message) {
          showMessage((Message)p);
        }    if (p.isMimeType("text/plain")) {
          System.out.println("内容:\n" + p.getContent());
        } else if (p.isMimeType("multipart/*")) {
          Multipart mp = (Multipart)p.getContent();
          int count = mp.getCount();
          for (int i = 0; i < count; i++) {
            dumpPart(mp.getBodyPart(i));
          }
        } else if (p.isMimeType("message/rfc822")) {
          dumpPart((Part)p.getContent());
        } else if (p.isMimeType("text/html")) {
          html = ".html";
          attachment = true;
        } else {
          attachment = true;
        }    if (attachment) {
          String disp = p.getDisposition();
          if (disp == null || disp.equalsIgnoreCase(Part.ATTACHMENT)) {
            String filename = p.getFileName();
            if (filename!=null) {
              filename =  MimeUtility.decodeText(filename);
            } else {
              filename = "附件" + attachnum++ + html;
            }
            try {
              File f = new File(filename);
              if (f.exists()) {
                throw new IOException("有同名的文件存在");
              }
              OutputStream os = new BufferedOutputStream(new FileOutputStream(f));
              InputStream is = p.getInputStream();
              int c;
              while ((c = is.read()) != -1) {
                os.write(c);
              }
              os.close();
              System.out.println("保存为" + filename + "。");
            } catch (IOException e) {
              System.out.println("附件保存失败" + e);
            }
          }
        }
      }  public static void showMessage(Message m) throws Exception {
        Address[] a;
        if ((a = m.getFrom())!=null) {
          for (int j = 0; j < a.length; j++) {
            System.out.println("送信人: " + MimeUtility.decodeText(a[j].toString()));
          }
        }    if ((a = m.getRecipients(Message.RecipientType.TO))!=null) {
          for (int j = 0; j < a.length; j++) {
            System.out.println("收信人: " + MimeUtility.decodeText(a[j].toString()));
          }
        }    System.out.println("主体: " + m.getSubject());
        Date d = m.getSentDate();
        System.out.println("日期: " + (d!= null ? d.toString() : "不明"));
        System.out.println("大小: " + m.getSize());
      }
    }
      

  4.   

    TO Croatia(Croatia)
    还有一个问题,邮件我想直接进行转发?怎么做?
    我又开了一个帖子,你可以去那里回答,200分都给你!
      

  5.   

    TO  Croatia(Croatia)
    1.用你的接收邮件程序
    Message[] messages = folder.getMessages();
    for (int i = 0; i < messages.length; i++) {
      messages[i]是每一封邮件的内容
    }
    2.发邮件的时候是用MimeMessage类
    所以我就把messages转换成MimeMessage然后进行转发
    Message[] messages = folder.getMessages();
    for (int i = 0; i < messages.length; i++) {
    MimeMessage mimeMessage = (MimeMessage)messages[i];
    mimeMessage.setRecipients(Message.RecipientType.TO,"[email protected]");
    Transport.send(mimeMessage);
    }
    但是总报错
    javax.mail.IllegalWriteException: POP3 messages are read-only
    at com.sun.mail.pop3.POP3Message.saveChanges(POP3Message.java:380)
    at javax.mail.Transport.send(Transport.java:80)
    at Tenso.<init>(Tenso.java:53)
    at Tenso.main(Tenso.java:8)
      

  6.   

    Croatia(Croatia)真的很coolynli2002(阿男) 最少给Croatia(Croatia) 200 分,要不也太不仗义了
      

  7.   

    然后我把
    folder.open(Folder.READ_WRITE);
    也改成可读写了,还是不可以阿
      

  8.   

    我的想法是 得到Message之后不想把它拆开
    直接转发,不知道能不能做到?
      

  9.   

    转发的话,可能需要把Mail读出来,然后,发出去.你的问题,我看一下.
      

  10.   

    第一个问题:
    是呀,所以我用了For循环,一个一个的解析呀。第二个问题:
    我明白你的意思了.假如你想通过Java程序来转发的话,就应该读到原来的Mail,然后发出去.应该有两个过程,解析Mail,送信。
    我觉得可以做到的。但是我认为应该用2个Session可能比较好。一个解析,一个送信。
    手头没有测试环境,你需要自己测试了。还不行的话,告诉我一下,我再来看一下。你这样的要求们有意思的。一般的情况下,我肯定是设置Mail系统的。
      

  11.   

    顺便提醒你一下另外一个事情,就是Mail的删除。
    用POP3,删除的时候,messages.setFlag(Flags.Flag.DELETED,true);
    //messages.saveChanges();这句话不需要,直接关闭就可以了.有这句话,反而有错.
    folder.close(true);还有,假如出错的话,改成folder.open(Folder.READ_WRITE);就可以了。我看了我原来写的,就是这个样子的。
      

  12.   

    结账  Croatia(Croatia) 接分!