就80分问这么多东西,你真会过,其实你可以看看这些。
这些是我搜集的。
本文章对:
发送普通邮件,接受普通邮件
发送带有附件的邮件,接收带有附件的邮件
发送html形式的邮件,接受html形式的邮件
发送带有图片的邮件等做了一个总结。
------------------------------------------------------------
/*注意点:
1。开发环境:jbuilder5,jdk1.2.2,javamail and javabeans activation framework.
Task 1:Download the latest version of the JavaMail API implementation from Sun.
Task 2:Download the latest version of the JavaBeans Activation Framework from Sun.
Task 3:Unzip the downloaded packages. You get a ZIP file for all platforms for both packages.You can use the jar tool to unzip the packages.
Task 4:Add the mail.jar file from the JavaMail 1.2 download and the activation.jar file from the JavaBeans Activation Framework download to your CLASSPATH.Copy the files to your extension library directory. For Microsoft Windows, and using the default installation copy, the command might look like the following:
cd \javamail-1.2
copy mail.jar \jdk1.3\jre\lib\ext
cd \jaf-1.0.1
copy activation.jar \jdk1.3\jre\lib\ext
If you don't like copying the files to the exention library directory, detailed instructions are available from Sun for setting your CLASSPATH on Windows NT.
Task 5:Go into the demo directory that comes with the JavaMail API implementation and compile the msgsend program to send a test message.
Task 6:Execute the program passing in a from address with the -o option, your SMTP server with the -M option, and the to address (with no option). You'll then enter the subject, the text of your message, and the end-of-file character (CTRL-Z) to signal the end of the message input.
Be sure to replace the from address, SMTP server, and to address.java msgsend -o from@address -M SMTP.Server to@address
If you are not sure of your SMTP server, contact your system adminstrator or check with your Internet Service Provider.
Task 7:Check to make sure you received the message with your normal mail reader (Eudora, Outlook Express, pine, ...).
*/package mail_send_rec_byjm;import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import com.borland.jbcl.layout.*;
import javax.mail.*;
import java.util.*;
import javax.mail.internet.*;
import java.io.*;
import javax.activation.*;
  public   String host="smtp.163.com";
  public   String username="abcdefg";
  public   String password="abcdefg";
  public   String mail_head_name="this is head of this mail";
  public   String mail_head_value="this is head of this mail";
  public   String mail_to="[email protected]";
  public   String mail_from="[email protected]";
  public   String mail_subject="this is the subject of this test mail";
  public   String mail_body="this is the mail_body of this test mail";
  void jButton1_actionPerformed(ActionEvent e) {
       try
         {//此段代码用来发送普通电子邮件
            Properties props = new Properties();//获取系统环境
            Authenticator auth = new Email_Autherticator();//进行邮件服务器用户认证            props.put("mail.smtp.host",host);
            props.put("mail.smtp.auth","true");
            Session session = Session.getDefaultInstance(props,auth);
           //设置session,和邮件服务器进行通讯。
            MimeMessage message = new MimeMessage(session);
            message.setContent("Hello","text/plain");//设置邮件格式
            message.setSubject(mail_subject);//设置邮件主题
            message.setText(mail_body);//设置邮件正文
            message.setHeader(mail_head_name,mail_head_value);//设置邮件标题
            message.setSentDate(new Date());//设置邮件发送日期            Address address = new InternetAddress(mail_from,"sunxiaoming");
            message.setFrom(address); //设置邮件发送者的地址         //如果要对邮件发送者进行多个参数的设置,可以用以下语句
         // Address address[] = {new InternetAddress("[email protected]","sunxmatoaklet"),new InternetAddress("[email protected]","sunxmathotmail")};
        //  message.addFrom(address);            Address toAddress = new InternetAddress(mail_to);//设置邮件接收方的地址
            message.addRecipient(Message.RecipientType.TO,toAddress);
        //  Address ccAddress = new InternetAddress("[email protected]");//设置邮件抄送者的地址
       //   message.addRecipient(Message.RecipientType.CC,ccAddress);
            Transport.send(message);//发送邮件
     /*    // to get a specific instance from the session for your protocol.pass along the username and password
         // (blank if unnecessary).send the message,and close the connection;
            message.saveChanges();
            Transport transport = session.getTransport("smtp");
            transport.connect(host,username,password);
            transport.sendMessage(message,message.getAllRecipients());
            transport.close();
*/
            System.out.println("send ok!");
         }
       catch(Exception ex)
         {
            System.out.println("faild"+ex);
         }
  }

解决方案 »

  1.   

    public class Email_Autherticator extends Authenticator
      {//此段代码用来进行服务器对用户的认证
           public Email_Autherticator()
             {
                super();
             }
           public PasswordAuthentication getPasswordAuthentication()
             {
                 return new PasswordAuthentication(username,password);
             }
      }  void jButton2_actionPerformed(ActionEvent e) {
        try
         {//该程序为接收邮件
           Properties props = System.getProperties(); //获取系统变量
           Authenticator auth = new Email_Autherticator();  
           props.put("mail.smtp.host",host);
           props.put("mail.smtp.auth","true");
           Session session = Session.getDefaultInstance(props,auth); //建立session
           Store store = session.getStore("pop3");
           store.connect(host,username,password);    //After connecting to the Store,you can get a Folder,which must be opened before you can read messages from it:
           Folder folder = store.getFolder("INBOX");//连接到Store后,取得一个文件夹,一般默认的是INDEX
           folder.open(Folder.READ_WRITE);//READ_ONLY为打开方式
           Message message[] = folder.getMessages();//从文件夹获取邮件信息    //可以用两种方式去获得邮件信息,getContent()用来获得邮件的主体信息。而WriteTo()可以用来获得邮件的全部信息,包括头部信息
        //   System.out.println(((MimeMessage)message).getContent());
           for (int i=0,n=message.length;i<n;i++)
             {
                
                String out_from_person = ((InternetAddress)message[i].getFrom()[0]).getPersonal();
                String out_from_address = ((InternetAddress)message[i].getFrom()[0]).getAddress();
                System.out.println("From:"+out_from_person+"\t");
                System.out.println("Address:"+out_from_address+"\t");            String out_subject = message[i].getSubject();
                System.out.println("Subject:"+out_subject+"\t");            //以下代码用来获得邮件的正文信息
                Part messagePart = message[i];
                Object out_content = messagePart.getContent();
                if (out_content instanceof Multipart)
                  {
                     messagePart = ((Multipart)out_content).getBodyPart(0);
                     System.out.println("[ Multipart Message ]");
                  }
                String out_content_type = messagePart.getContentType();
                System.out.println("CONTENT:"+out_content_type);            if (out_content_type.startsWith("text/plain") || out_content_type.startsWith("text/html"))
                  {
                      InputStream ipstm = messagePart.getInputStream();
                      BufferedReader bufreader = new BufferedReader(new InputStreamReader(ipstm));
                      String thisLine = bufreader.readLine();
                      while (thisLine != null)
                        {
                            System.out.println("thisLine: "+thisLine);
                            thisLine = bufreader.readLine();
                        }
                  }
                System.out.println("------------------------------------------------------------");
                message[i].setFlag(Flags.Flag.DELETED,true);//最后删除服务器端的邮件
             }
                  //DELETED,ANSWERED,DRAFT,FLAGGED,RECENT,SEEN,USER
           folder.close(true);//true的话,彻底删除已经标记为DELETE的邮件,如果为false的话,就不删除
           store.close();//关闭
         }
        catch(Exception ej2)
         {
            System.out.println(ej2);
         }
      }  void jButton4_actionPerformed(ActionEvent e) {
        try
         {//该程序为回复邮件
           Properties props = System.getProperties(); //获取系统变量
           Authenticator auth = new Email_Autherticator();  //取得穃uFFFD衿魅现?
           props.put("mail.smtp.host",host);
           props.put("mail.smtp.auth","true");
           Session session = Session.getDefaultInstance(props,auth); //建立session
           Store store = session.getStore("pop3");
           store.connect(host,username,password);       Folder folder = store.getFolder("INBOX");
           folder.open(Folder.READ_WRITE);
           Message message[] = folder.getMessages();       for (int i=0,n=message.length;i<n;i++)
             {
      //        String out_from_person = ((InternetAddress)message[i].getFrom()[0]).getPersonal();//获取邮件发信人的署名
      
                String out_from_address = ((InternetAddress)message[i].getFrom()[0]).getAddress();
                System.out.println(out_from_address);            Message forward = new MimeMessage(session);
                forward.setSubject("Fwd:"+message[i].getSubject());
                forward.setFrom(new InternetAddress(mail_to));
                forward.addRecipient(Message.RecipientType.TO,new InternetAddress(out_from_address));            BodyPart messageBodyPart = new MimeBodyPart();
                messageBodyPart.setText("Here you go with the original message:\n\n");            Multipart multipart = new MimeMultipart();
                multipart.addBodyPart(messageBodyPart);            messageBodyPart = new MimeBodyPart();
                messageBodyPart.setDataHandler(message[i].getDataHandler());            multipart.addBodyPart(messageBodyPart);
                forward.setContent(multipart);            Transport.send(forward);
                message[i].setFlag(Flags.Flag.DELETED,true);//DELETED,ANSWERED,DRAFT,FLAGGED,RECENT,SEEN,USER
             }
           folder.close(true);
           store.close();//关闭
         }
        catch(Exception ej2)
         {
            System.out.println(ej2);
         }  }
      

  2.   

    void jButton6_actionPerformed(ActionEvent e) {
        try
         {//该程序为接受带有附件的邮件的代码
           Properties props = System.getProperties(); 
           Authenticator auth = new Email_Autherticator();  
           props.put("mail.smtp.host",host);
           props.put("mail.smtp.auth","true");
           Session session = Session.getDefaultInstance(props,auth); //建立session
           Store store = session.getStore("pop3");
           store.connect(host,username,password);    //After connecting to the Store,you can get a Folder,which must be opened before you can read messages from it:
           Folder folder = store.getFolder("INBOX");
           folder.open(Folder.READ_WRITE);
           Message message[] = folder.getMessages();       for (int i=0,n=message.length;i<n;i++)//可能有多个邮件,所以用循环
             {
                //获得邮件的部分信息,如头部信息,送信人的署名,送信人的邮件地址
                String out_from_person = ((InternetAddress)message[i].getFrom()[0]).getPersonal();
                String out_from_address = ((InternetAddress)message[i].getFrom()[0]).getAddress();
                System.out.println("From:"+out_from_person+"\t");
                System.out.println("Address:"+out_from_address+"\t");
                String out_subject = message[i].getSubject();
                System.out.println("Subject:"+out_subject+"\t");            //以下代码用来获取邮件的主体信息
                Part messagePart = message[i];
                Object out_content = messagePart.getContent();
                if (out_content instanceof Multipart)
                  {
                     messagePart = ((Multipart)out_content).getBodyPart(0);
                     System.out.println("[ Multipart Message ]");
                  }
                String out_content_type = messagePart.getContentType();
                System.out.println("CONTENT:"+out_content_type);            if (out_content_type.startsWith("text/plain") || out_content_type.startsWith("text/html"))
                  {
                      InputStream ipstm = messagePart.getInputStream();
                      BufferedReader bufreader = new BufferedReader(new InputStreamReader(ipstm));
                      String thisLine = bufreader.readLine();
                      while (thisLine != null)
                        {
                            System.out.println("thisLine: "+thisLine);
                            thisLine = bufreader.readLine();
                        }
                  }
                //获取附件
                Multipart mp = (Multipart)message[i].getContent();
                for (int j=0,m=mp.getCount();j<m;j++)
                  {
                     System.out.println("***"+m+"***");
                     Part part = mp.getBodyPart(j);
                     String disposition = part.getDisposition();
                     if ((disposition != null) && ((disposition.equals(part.ATTACHMENT)) || (disposition.equals(part.INLINE))))
                       {                   //以下代码将获得的附件保存到当前目录下,以part.getFileName()为文件名,也既是附件的名称。
                           File filename = new File(part.getFileName());
                           for (int k=0;filename.exists();k++)
                             {
                                  filename = new File(part.getFileName()+k);
                             }
                           FileOutputStream myFileoutputstream = new FileOutputStream(filename);
                           int chunk = part.getSize();//获得附件的大小,不一定很准确。                       byte [] buffer = new byte[chunk];
                           InputStream instream = part.getInputStream();
                           instream.read(buffer,0,chunk);
                           myFileoutputstream.write(buffer,0,chunk);
                           instream.close();
                           myFileoutputstream.close();
                       }
                  }
                System.out.println("------------------------------------------------------------");
                message[i].setFlag(Flags.Flag.DELETED,true);
             }
           folder.close(true);
           store.close();//关闭
         }
        catch(Exception ej2)
         {
            System.out.println(ej2);
         }
      }
      

  3.   

    我的做法是点附件的时候直接从附件存储的地方,比如数据库读取附件,然后判断附件类型,修改response的头部分,以流的形式返回浏览器。
    在浏览器看来就是一个下载对话框。
      

  4.   

    这是个好方法,你的箱件是存在数据库里的?你是用什么MAIL服务器?