1、SMTP简介
2、发送过程
3、源代码示例
package ;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.PrintWriter;
import .InetAddress;
import .Socket;
import java.util.Scanner;
import javax.swing.*;
/*
* 发送邮件客户端
*/
public class SendMail extends JFrame {
private JTextField from;
private JTextField to;
private JTextField server;
private JTextArea message;
private JTextArea comm;
private Scanner in;
private PrintWriter out;
public SendMail() {
// 设置frame
setSize(500, 600);
setTitle("send mail");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
this.setLocationRelativeTo(null);
// 往frame中添加组件
JPanel p1 = new JPanel(new GridLayout(3, 2));
p1.add(new JLabel("from:"));
from = new JTextField(20);
p1.add(from);
p1.add(new JLabel("to:"));
to = new JTextField(20);
p1.add(to);
p1.add(new JLabel("SMTP server:"));
server = new JTextField(20);
p1.add(server);
add(p1, BorderLayout.NORTH);
JPanel p2 = new JPanel(new GridLayout(2, 1));
message = new JTextArea();
p2.add(new JScrollPane(message));
comm = new JTextArea();
comm.setEditable(false);
p2.add(new JScrollPane(comm));
add(p2, BorderLayout.CENTER);
JPanel p3 = new JPanel();
JButton sendButton = new JButton("Send");
p3.add(sendButton);
add(p3, BorderLayout.SOUTH);
// 给发送按钮注册监听器
sendButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
comm.setText("");
sendMail(server.getText().trim(), from.getText().trim(), to
.getText().trim(), message.getText());
}
});
}
// 发送邮件
public void sendMail(String server, String from, String to, String message) {
try {
Socket s = new Socket(server, 25);
try {
in = new Scanner(s.getInputStream());
out = new PrintWriter(s.getOutputStream(), true/* 表示自动刷新 */);
String hostName = InetAddress.getLocalHost().getHostName();
receive();
send("HELLO" + hostName);// 握手,成功返回220表示服务就绪
receive();
send("MAIL FROM:");//发件人邮箱
receive();
send("RCPT TO:");//收件人邮箱
receive();
send("DATA");//表示开始发邮件内容了
receive();
send(message);//发送邮件你内容
send(".");
receive();
send("QUIT");
} finally {
s.close();
}
} catch (IOException e) {
comm.append("Error: " + e);
}
}
// 发送
private void send(String s) {
comm.append(s + '\n');
out.print(s);
out.print("\r\n");
out.flush();
}
// 接收
private void receive() {
comm.append(in.nextLine() + '\n');
}
public static void main(String[] args) {
new SendMail();
}
}