我最近在学习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(); //这条语句原来是上面的,运行后会一直弹出邮件发送界面的窗口,很多很多,放到这后,问题解决,但邮件发送还是不成功,我不是很明白
}
}
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(); //这条语句原来是上面的,运行后会一直弹出邮件发送界面的窗口,很多很多,放到这后,问题解决,但邮件发送还是不成功,我不是很明白
}
}
解决方案 »
- 需要为class,interface或enum package(紧急)
- 简单Java程序改错
- 关于jTable中放JComboBox的问题
- java下有没有类似.net那种propertygrid属性框控件可用?
- 帮忙看看这个多线程程序?
- 我用drawLine,drawRect画图时不想用forground的颜色,想用自己的颜色该怎么办?
- 为什么在JBuild9.0中,Jlist控件的valueChanged事件会执行两次,这是JBuild9.0的BUg吗?
- Struts里FormFile作文件上传下载时编码问题
- 怎样通过Applet上传多个文件到服务器??
- 我是初学者,一个很奇怪的问题,请教大家~~
- Java Swing,急。。。。
- 记事本问题
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();
发送失败报错
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)