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>
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>
相关文章推荐
- java网络编程一:Socket用法,简单模拟一对一聊天
- java网络编程二:服务器处理多个用户请求的解决方案(返回多个用户输入的信息)
- c# httpgethtml
- http状态码大全(HTTP Status Code) Curl http_code 状态码 意义
- 解决httpclient访问ssl资源报证书错误的问题
- xutils 3的简单使用
- 轻量级HTTP服务器Nginx(常用配置…
- WEB服务器TCP:time wait&nbsp…
- web性能测试工具-http_load
- HTTP协议详解(真的很经典)
- 网络安全运维
- iOS实际网络检测框架RealReachability
- uploadify3.1--3.2 HTTP&nbsp…
- http请求中application/x-www-form…
- 【HTTP】http重定向301/302/303/307
- 常见HTTP状态码
- Web服务器性能/压力测试工具http_l…
- PHP的$_SERVER['HTTP_H…
- PHP实现http与https转化
- NSCache和NSURLCache网络缓存优化