我最近在学习Javamail,初学就用了一个书上的例子进行调试,可运行结果问题很多,望师兄师姐能帮忙看看,下面是所有的代码:import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.io.*;
public class UseSMTPMail extends JFrame {
   JButton sendButton=new JButton("发信");
   JLabel hostLabel=new JLabel("SMTP服务器");
   JLabel usernameLabel=new JLabel("用户名:");
   JLabel passwordLabel=new JLabel("密码:");
   JLabel fromLabel=new JLabel("发件人:");
   JLabel toLabel=new JLabel("收件人:");
   JLabel subjectLabel=new JLabel("主题:");
   JTextField usernameField=new JTextField(40);
   JPasswordField passwordField=new JPasswordField(40);
   JTextField hostField=new JTextField(40);
   JTextField fromField=new JTextField(40);
   JTextField toField=new JTextField(40);
   JTextField subjectField=new JTextField(40);
   JTextArea message=new JTextArea(10,10);
   JScrollPane jsp=new JScrollPane(message);
   public UseSMTPMail(){
     Container contentPane=this.getContentPane();
     JPanel labels=new JPanel(new GridLayout(6,1));
     JPanel fields=new JPanel(new GridLayout(6,1));
     labels.add(hostLabel);fields.add(hostField);
     labels.add(usernameLabel);fields.add(usernameField);
     labels.add(passwordLabel);fields.add(passwordField);
     labels.add(toLabel);fields.add(toField);
     labels.add(fromLabel);fields.add(fromField);
     labels.add(subjectLabel);fields.add(subjectField);
     Box north=Box.createHorizontalBox();
     north.add(labels);north.add(fields);
     contentPane.add(north,"North");contentPane.add(jsp,"Center");
     //JPanel south=new JPanel();
     //south.add(sendButton);
     sendButton.addActionListener(new SendMail());
     contentPane.add(sendButton,"South");
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     setTitle("发送电子邮件");
     setSize(400,400);
     setVisible(true);
   }
   class SendMail implements ActionListener
   {
     public void actionPerformed(ActionEvent evt){
       try{
         Properties props=new Properties();
         props.put("mail.smtp.auth","true");
         Session session=Session.getDefaultInstance(props,new Authenticator(){
           public PasswordAuthentication getPasswordAuthentication(){
             return new PasswordAuthentication(usernameField.getText(),
             passwordField.getText());
          }
  });
  final Message msg=new MimeMessage(session);
  Address to=new InternetAddress(toField.getText());
  Address from=new InternetAddress(fromField.getText());
  msg.setFrom(from);
  msg.setRecipient(Message.RecipientType.TO,to);
  msg.setSentDate(new Date());
  msg.setSubject(transferChinese(subjectField.getText()));
  msg.setContent(message.getText(),"GBK");
  Runnable r=new Runnable(){
    public void run(){
      try{
      Transport.send(msg);
      }catch(Exception e){e.printStackTrace();}
    }
  };
  Thread t=new Thread(r);
  t.start();
  message.setText("");
  }catch(Exception e){e.printStackTrace();}
  }
   }
public String transferChinese(String strText){
try{
    strText=MimeUtility.encodeText(new String(strText.getBytes(),"GB2312"),"GB2312","B");
}catch(Exception e){e.printStackTrace();}
return strText;
}
public static void main(String[] args){
Font font=new Font("JFrame",Font.PLAIN,14);
    Enumeration keys=UIManager.getLookAndFeelDefaults().keys();
    while(keys.hasMoreElements()){
    Object key=keys.nextElement();
    if(UIManager.get(key)instanceof Font)UIManager.put(key,font);
    //UseSMTPMail smail=new UseSMTPMail();
    }
    UseSMTPMail smail=new UseSMTPMail();   //这条语句原来是上面的,运行后会一直弹出邮件发送界面的窗口,很多很多,放到这后,问题解决,但邮件发送还是不成功,我不是很明白
}
}

解决方案 »

  1.   

    public static void main(String[] args){ 
    Font font=new Font("JFrame",Font.PLAIN,14); 
        Enumeration keys=UIManager.getLookAndFeelDefaults().keys(); 
        while(keys.hasMoreElements()){ 
        Object key=keys.nextElement(); 
        if(UIManager.get(key)instanceof Font)UIManager.put(key,font); 
        UseSMTPMail smail=new UseSMTPMail(); 
      

  2.   

    我在前面已经设置了允许认证了
    发送失败报错
    javax.mail.internet.ParseException at javax.mail.internet.ContentType.<init>(ContentType.java:71) at javax.mail.internet.MimeBodyPart.updateHeaders(MimeBodyPart.java:1051) at javax.mail.internet.MimeMessage.updateHeaders(MimeMessage.java:1914) at javax.mail.internet.MimeMessage.saveChanges(MimeMessage.java:1895) at javax.mail.Transport.send(Transport.java:79) at UseSMTPMail$2.run(UseSMTPMail.java:71) at java.lang.Thread.run(Thread.java:536)
      

  3.   

    http://topic.csdn.net/u/20080318/21/161d3490-028d-47df-8902-34cdaf4c4185.html看看是不是和这个一样