您的位置:首页 > 理论基础 > 计算机网络

java网络编程三:基于SMTP的邮件发送客户端

2016-03-04 10:29 901 查看
1、SMTP简介







2、发送过程



3、源代码示例

[java]
view plain
copy

<span style="font-size:16px;">package demo.net;

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 java.net.InetAddress;
import java.net.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:<" + from + ">");//发件人邮箱
receive();

send("RCPT TO:<" + 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();
}
}
</span>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: