package JavaMail;import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;public class Mail extends JFrame{
JButton sendButton = new JButton("发送邮件");
JLabel usernameLab = new JLabel("用户名: ");
JLabel passwordLab = new JLabel("密     码: ");
JLabel hostLab = new JLabel("服务器: ");
JLabel fromLab = new JLabel("发件人: ");
JLabel toLab = new JLabel("收件人: ");
JLabel subjectLab = new JLabel("主    题: ");
JLabel contentLab = new JLabel("内    容: ");
JTextField username = new JTextField(40);
JPasswordField password = new JPasswordField(40);
JTextField host = new JTextField(40);
JTextField fromFiled = new JTextField(40);
JTextField toField = new JTextField(40);
JTextField subjectField = new JTextField(40);
JTextArea content = new JTextArea(15, 15);
JScrollPane jsp = new JScrollPane(content);

public Mail()
{
Container contentPane = this.getContentPane();
JPanel labels = new JPanel(new GridLayout(6, 1));
JPanel fields = new JPanel(new GridLayout(6, 1));
labels.add(usernameLab);
fields.add(username);
labels.add(passwordLab);
fields.add(password);
labels.add(hostLab);
fields.add(host);
labels.add(fromLab);
fields.add(fromFiled);
labels.add(toLab);
fields.add(toField);
labels.add(subjectLab);
fields.add(subjectField);
Box north = Box.createHorizontalBox();
Box center = Box.createHorizontalBox();
north.add(labels);
north.add(fields);
center.add(contentLab);
center.add(jsp);
contentPane.add(north, "North");
contentPane.add(center, "Center");
content.hashCode();
JPanel south = new JPanel();
south.add(sendButton);
sendButton.addActionListener(new SendMail());
contentPane.add(south, "South");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setTitle("电子邮件发送");
this.setSize(300, 300);
this.setVisible(true);
}
class SendMail implements ActionListener
{
public void actionPerformed(ActionEvent evt)
{
try{
Properties props = new Properties(); //get sys-properties
props.put("mail.smtp.host", host.getText());   //save info of mail' send server
//create mail session according to properites
Session session = Session.getInstance(props, null);
final Message msg = new MimeMessage(session);  //create mime mail object

Address to = new InternetAddress(toField.getText());
Address from = new InternetAddress(fromFiled.getText());
msg.setFrom(from);  //set sender
msg.setRecipient(Message.RecipientType.TO, to);  //set reciever
msg.setSentDate(new Date());
msg.setSubject(MimeUtility.encodeText(new String(
subjectField.getText().getBytes(), "GB2312"), "GB2312", "B"));
msg.setContent(content.getText(), "text/plain; charset=UTF-8");

Transport transport = session.getTransport("smtp");
transport.connect(host.getText(), username.getText(),
password.getText());

try{
Transport.send(msg);
}catch(MessagingException e) { e.printStackTrace(); }

content.setText("");
transport.close();
}
catch(Exception e) { e.printStackTrace(); }

}
}
/**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
Mail mail =  new Mail();
}
}
出现错误:
>>>>>Sending data EHLO CHINA-4BD1EB8AF<<<<<<
>>>>>Sending data EHLO CHINA-4BD1EB8AF<<<<<<
>>>>>Sending data MAIL FROM: <[email protected]><<<<<<
>>>>>Sending data QUIT<<<<<<
org.apache.geronimo.javamail.transport.smtp.SMTPSendFailedException: Error: need EHLO and AUTH first !界面:
用户名:[email protected]
密  码:********
服务器:smtp.qq.com
发件人:[email protected]
收件人:[email protected]
主  题:asdasd
内  容:asdasd按提示说是要先认证,但是我先设置为空在红色代码中可看到我后面设置了,难道这样不行么?
那敢如何 改 才行?

解决方案 »

  1.   

    不是要去认证,是要求授权,
    loginX的功能命令发送你的user account and password以后
    就可以发送你的邮件内容了
      

  2.   

    还有一点,使用QQ的SMTP邮件服务功能,首先要在QQ Mail中开通此项功能才可以
      

  3.   


    前辈 能说清楚点么?  我是按例子上敲的代码,刚学习JAVA不久,希望能指点下 非常谢谢!
    具体要怎么个改法?  你说先要授权?