1、SMTP简介

2、发送过程

3、源代码示例

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:");//发件人邮箱

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();

}

}

java 邮件客户端 smtp_java网络编程三:基于SMTP的邮件发送客户端相关推荐

  1. TCP/IP网络编程之基于TCP的服务端/客户端(一)

    TCP/IP网络编程之基于TCP的服务端/客户端(一) 理解TCP和UDP 根据数据传输方式的不同,基于网络协议的套接字一般分为TCP套接字和UDP套接字.因为TCP套接字是面向连接的,因此又称为基于 ...

  2. TCP/IP网络编程之基于TCP的服务端/客户端(二)

    回声客户端问题 上一章TCP/IP网络编程之基于TCP的服务端/客户端(一)中,我们解释了回声客户端所存在的问题,那么单单是客户端的问题,服务端没有任何问题?是的,服务端没有问题,现在先让我们回顾下服 ...

  3. C# 网络编程之基于SMTP发送电子邮件

     本文主要讲述基于C#网络编程的发送邮件的编程,邮件发送功能是基于邮件协议的,常见的电子邮件协议有SMTP(简单邮件传输协议).POP3(邮局协议).IMAP(Internet邮件访问协议),文章主要 ...

  4. java网络编程作业基于UDP简单聊天窗口,图形化界面,包含客户端和服务端

    //郑州轻工业大学 //题号:实验四 第二题 //题目:使用基于UDP的网络编程方法,完成客户端和服务器间的聊天功能.要求图形界面. java网络编程作业 基于UDP简单聊天窗口,图形化界面,包含客户 ...

  5. Java:网络编程,网络编程三要素,TCP协议,UDP协议

    day23 网络编程 网络编程三要素: IP地址 端口号 通信协议 TCP协议 UDP协议 网络编程 1.网络:计算机网络,由在不同地理位置.不同的计算机主机,互联形成的一个计算机系统.有通讯和数据共 ...

  6. Java——网络编程三要素

    * A:计算机网络* 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统.网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统.* ...

  7. 20165310 Java实验五《网络编程与安全》

    20165310 Java实验五<网络编程与安全> 任务一 题目:①编写MyBC.java实现中缀表达式转后缀表达式的功能:②编写MyDC.java实现从上面功能中获取的表达式中实现后缀表 ...

  8. Java学习——Day14:网络编程

    7.1 网络编程概述 Java是 Internet 上的语言,它从语言级上提供了对网络应用程 序的支持,程序员能够很容易开发常见的网络应用程序. Java提供的网络类库,可以实现无痛的网络连接,联网的 ...

  9. C语言网络编程:多路IO select实现多客户端

    文章目录 阻塞式的服务器程序 多线程服务器程序 非阻塞式服务器程序 基于事件响应的服务器程序 事件响应服务器程序的实现`select` 阻塞式的服务器程序 我们接触过最多的最基础的网络通信模型为TCP ...

最新文章

  1. Java数组排序: Array-ArrayList-List-Collections.sort()/List.sort()/Arrays.sort()
  2. 怎样一步一步删除(linux amp; UNIX)环境下 oracle 11g 集群节点
  3. 解决SpringBoot更新数据到MySQL乱码问题
  4. deep$wide keras
  5. 跟着迪哥学python 经管之家_跟着迪哥学Python数据分析与机器学习实战
  6. spark内核揭秘-09-RDD的count操作 触发Job全生命周期-01
  7. Matlab各种随机数汇总
  8. Pytorch —— 权值初始化
  9. Intellij插件之JRebel
  10. IOT---(6)Android Things 开发环境搭建
  11. 学习日记0802函数递归,三元表达式,列表生成式,字典生成式,匿名函数+内置函数...
  12. Android VideoView
  13. SVM(三)—Kernels(核函数)
  14. 当不知轴承型号时如何寻找轴承故障频率_趣说滚动轴承的故障诊断
  15. 高等工程热力学复习01
  16. win10分辨率不能调整_三国志:游戏在win10系统无法运行咋办?
  17. 在硅谷初创公司怎么找投资人
  18. 【读书笔记】《Web全栈工程师的自我修养》
  19. 算法设计与分析第五章习题解答与学习指导(第2版)屈婉婷 刘田 张立昂 王捍贫编著 清华大学出版社
  20. 2020年金属非金属矿山(露天矿山)主要负责人考试报名及金属非金属矿山(露天矿山)主要负责人考试资料

热门文章

  1. C++基础::字符串流(stringstream)
  2. 平方根的计算(二分逼近、牛顿拉普生法)
  3. rtpengine集群_ubuntu 安装 rtpengine
  4. python数据分析-Python数据分析从小白到高手的几个步骤
  5. python入门经典-终于明白经典python入门教程
  6. 如何自学python知乎-马哥教育官网-专业Linux培训班,Python培训机构
  7. 简单python脚本实例-30个Python 小例子,帮你快速上手Python
  8. python手机版-QPython3手机版下载
  9. 如何自学python知乎-如何快速学习python?
  10. python小白从哪来开始-老男孩python课程亮点在哪里?python小白