我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java实战之基于swing的QQ邮件收发功能实现

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java实战之基于swing的QQ邮件收发功能实现

一、电子邮件详解

  • 假设自己的电子邮件是me@163.com,对方的邮件是you@163.com

我们编写好文件填写好对方文件,点击发送,这些电子邮件就发出去了

而这些电子邮件被称为MUA:Mail User Agent——邮件用户代理。

  • Email发送出去的时候,不是直接到达对方的电脑,而是先发送到MTA:Mail Transfer Agent——邮件传输代理。如:网易
  • Email到达MTA后,MTA会把Emain投递到邮件的最终目的MDA:Mail Delivery Agent——邮件投递代理。如何存放在某个服务器上,我们将这个长期保存的地方叫做电子邮件邮箱。

Email不会直接到达对方的电脑,因为电脑不一定开机,开机不一定对方要取邮件,必须通过MUA从MDA把邮件取到自己的电脑上面。

有了上述概念,编写程序来收发和接受文件,本质上就是:

1.编写MUA把邮件发送到MTA

2.编写MUA从MDA上收邮件

发邮件时,MUA和MTA使用的协议就是SMTP:Simple Mail Transfer Protocol,后面的MTA到另一个MTA也是用SMTP协议。

收邮件的时候,MUA和MDA使用的协议有两种:POP:Post Office Protocol,即POP3;IMAP:Internet Message Access Protocol

二、邮件发送


import com.sun.mail.util.MailSSLSocketFactory;

import javax.swing.*;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Properties;

public class SendEmailManger extends Thread {
    private String mailAdr;//邮箱
    private String content;//邮件的内容
    private String subject;//邮件的题目
    public SendEmailManger(String mailAdr, String subject, String content) {
        super();
        this.mailAdr = mailAdr;
        this.subject = subject;
        this.content = content;
    }
    @Override
    public void run() {
        super.run();
        try {
            sendMail(mailAdr, subject, content);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    private void sendMail(String mailAdr, String subject, String content) throws Exception {
        //加密的邮件套接字协议工厂
        MailSSLSocketFactory sf = new MailSSLSocketFactory();
        sf.setTrustAllHosts(true);
        final Properties props = new Properties();
        // 表示SMTP发送邮件,需要进行身份验证
        props.put("mail.transport.protocol", "smtp");
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.host", "smtp.qq.com");
        // smtp登陆的账号、密码 ;需开启smtp登陆
        props.setProperty("mail.debug", "true");
        props.put("mail.user", "此处写你的qq邮箱");
        props.put("mail.password", "此处写你的QQ授权码");
        // 特别需要注意,要将ssl协议设置为true,否则会报530错误
        props.put("mail.smtp.ssl.enable", "true");
        props.put("mail.smtp.ssl.socketFactory", sf);
        Authenticator authenticator = new Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                // 用户名、密码
                String userName = props.getProperty("mail.user");
                String password = props.getProperty("mail.password");
                return new PasswordAuthentication(userName, password);
            }
        };
        // 使用环境属性和授权信息,创建邮件会话
        Session mailSession = Session.getInstance(props, authenticator);
        // 创建邮件消息
        MimeMessage message = new MimeMessage(mailSession);
        // 设置发件人
        try {
            InternetAddress form = new InternetAddress(props.getProperty("mail.user"));
            message.setFrom(form);
            // 设置收件人
            InternetAddress to = new InternetAddress(mailAdr);
            message.setRecipient(Message.RecipientType.TO, to);
            // 设置邮件标题
            message.setSubject(subject);
            // 设置邮件的内容体
            message.setContent(content, "text/html;charset=UTF-8");

            // 发送邮件
            Transport.send(message);
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        // 1. 创建一个顶层容器(窗口)
        JFrame jf = new JFrame("发送邮件");
        jf.setSize(500, 500);
        jf.setLocationRelativeTo(null);
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        // 2. 创建中间容器(面板容器)
        JPanel panel = new JPanel(null);

        // 3. 创建一个基本组件(按钮),并添加到 面板容器 中

        JLabel jla1 = new JLabel("收件邮箱: ");
        jla1.setLocation(50,50);
        jla1.setSize(100, 50);
        jla1.setFont(new Font("123", 5, 20));

 final  JTextField textField = new JTextField(8);
        textField.setFont(new Font("mailAdr", Font.PLAIN, 20));
        textField.setLocation(150,50);
        textField.setSize(250, 50);

        JLabel jla2 = new JLabel("邮件标题: ");
        jla2.setLocation(50,150);
        jla2.setSize(100, 50);
        jla2.setFont(new Font("123", 5, 20));

final   JTextField textField1 = new JTextField(8);
        textField1.setFont(new Font("subject", Font.PLAIN, 20));
        textField1.setLocation(150,150);
        textField1.setSize(250, 50);

        JLabel jla3 = new JLabel("邮件内容: ");
        jla3.setLocation(50,250);
        jla3.setSize(100, 50);
        jla3.setFont(new Font("123", 5, 20));

final   JTextField textField3 = new JTextField(8);
        textField3.setFont(new Font("content", Font.PLAIN, 20));
        textField3.setLocation(150,250);
        textField3.setSize(250, 50);

        JButton btn = new JButton("发送邮件");
        btn.setLocation(50,350);
        btn.setSize(100, 50);
        btn.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {

                SendEmailManger d = new SendEmailManger(textField.getText(), textField1.getText(), textField3.getText());
                d.start();

            }
        });

        panel.add(jla1);
        panel.add(jla2);
        panel.add(jla3);
        panel.add(textField);
        panel.add(textField1);
        panel.add(textField3);
        panel.add(btn);


        // 4. 把 面板容器 作为窗口的内容面板 设置到 窗口
        jf.setContentPane(panel);

        // 5. 显示窗口,前面创建的信息都在内存中,通过 jf.setVisible(true) 把内存中的窗口显示在屏幕上。
        jf.setVisible(true);
    }

}

三、邮件接收


import com.sun.mail.util.MailSSLSocketFactory;
import com.sun.org.apache.bcel.internal.generic.NEW;

import javax.mail.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Date;
import java.util.Properties;



public class ReceiveEmailManger extends Thread {

    public static void main(String[] args){

// 1. 创建一个顶层容器(窗口)
        JFrame jf = new JFrame("接收邮件");
        jf.setSize(500, 500);
        jf.setLocationRelativeTo(null);
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        JPanel panel = new JPanel(null);

        JLabel jla2 = new JLabel("标题: ");
        jla2.setLocation(50,50);
        jla2.setSize(150, 50);
        jla2.setFont(new Font("123", 5, 20));

        final   JTextField textField1 = new JTextField(8);
        textField1.setFont(new Font("subject", Font.PLAIN, 20));
        textField1.setLocation(150,50);
        textField1.setSize(250, 50);

        JLabel jla3 = new JLabel("邮件内容: ");
        jla3.setLocation(50,150);
        jla3.setSize(150, 50);
        jla3.setFont(new Font("123", 5, 20));

        final   JTextField textField3 = new JTextField(8);
        textField3.setFont(new Font("content", Font.PLAIN, 20));
        textField3.setLocation(150,150);
        textField3.setSize(250, 50);

   final      JTextArea jta = new JTextArea();
        jta.setLocation(150,150);
        jta.setSize(250, 200);
        jta.setFont(new Font("content", Font.PLAIN, 30));
        JButton btn = new JButton("接收邮件");
        btn.setLocation(150,380);
        btn.setSize(100, 50);
        btn.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {

        try {
        ReceiveEmailManger re = new ReceiveEmailManger();
         String [] mess =  re.ReceiveEmailManger();
            textField1.setText(mess[1]);
            jta.setText(mess[2]);
        }catch (Exception ea){
         ea.printStackTrace();
        }

            }
        });

        panel.add(jla2);
        panel.add(jla3);
        panel.add(textField1);

        panel.add(btn);
        panel.add(jta);

        // 4. 把 面板容器 作为窗口的内容面板 设置到 窗口
        jf.setContentPane(panel);

        // 5. 显示窗口,前面创建的信息都在内存中,通过 jf.setVisible(true) 把内存中的窗口显示在屏幕上。
        jf.setVisible(true);

 }



    public String[] ReceiveEmailManger() throws Exception {
        //加密的邮件套接字协议工厂
        MailSSLSocketFactory sf = new MailSSLSocketFactory();
        sf.setTrustAllHosts(true);
        String pop3Server = "pop.qq.com";
        String protocol = "pop3";
        String username = "此处填写qq邮箱";
        String password = "此处填写QQ授权码";
        Properties prop = new Properties();
        prop.put("mail.store.protocol", protocol);
        prop.put("mail.pop3.host", pop3Server);
        // 特别需要注意,要将ssl协议设置为true,否则会报530错误
        prop.put("mail.pop3.ssl.enable", "true");
        prop.put("mail.pop3.ssl.socketFactory", sf);
        Session mailSession = Session.getDefaultInstance(prop,null);
        mailSession.setDebug(false);
        String [] mess = new  String[3];
        try {
            Store store = mailSession.getStore(protocol);
            //登录验证
            store.connect(pop3Server,username,password);
            //获得用户的邮件账户,注意通过pop3协议获取某个邮件夹的名称只能为inbox
            Folder folder = store.getFolder("inbox");
            //设置访问权限
            folder.open(Folder.READ_ONLY);
            //获取所有邮件
            int size = folder.getMessageCount();
            Message message = folder.getMessage(size);
            //获取第一封发件人地址
            String from = message.getFrom()[0].toString();
            //获取第一封邮件标题
            String subject = message.getSubject();
            //获取第一封邮件内容
            String conten = message.getContent().toString();

            mess[0]=from;
            mess[1]=subject;
            mess[2]=conten;
            
            folder.close(false);
            store.close();
        }catch(Exception e) {
            e.printStackTrace();
        }
        return mess;
    }
}

四、导包

使用IDEA编程,在pom.xml文件下导入依赖包


<!-- java发送邮件jar包 -->
<dependencies>
    <dependency>
        <groupId>javax.mail</groupId>
        <artifactId>mail</artifactId>
        <version>1.4.7</version>
    </dependency>
</dependencies>

到此这篇关于Java实战之基于swing的QQ邮件收发功能实现的文章就介绍到这了,更多相关基于Java swing的QQ邮件收发功能实现内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java实战之基于swing的QQ邮件收发功能实现

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

基于JavaMail的Java实现复杂邮件发送功能

上一篇文章 基于 JavaMail 的 Java 邮件发送:简单邮件发送 讲解了邮件的基本协议,JavaMail组件,创建并发送一封简单邮件的详细步骤。本文将介绍如何创建并发送一封包含图片和附件的复杂邮件。一封复杂的邮件内容可以看做是由很多
2023-05-31

Java怎么基于Jakarta Mail实现收发邮件

小编给大家分享一下Java怎么基于Jakarta Mail实现收发邮件,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!java基本数据类型有哪些Java的基本数据类
2023-06-14

基于Java怎么实现简单的邮件群发功能

今天小编给大家分享一下基于Java怎么实现简单的邮件群发功能的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。pom文件引入第三
2023-06-30

Java开发之spring security实现基于MongoDB的认证功能

本文实例讲述了Java开发之spring security实现基于MongoDB的认证功能。分享给大家供大家参考,具体如下:spring security对基于数据库的认证支持仅限于JDBC,而很多项目并非使用JDBC,比如Nosql数据库
2023-05-30

Java如何实现带附件的邮件发送功能

这篇文章主要讲解了Java如何实现带附件的邮件发送功能,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。1、需要导入mail.jar、activation.jar这两个邮件发送的jar包,可在网上搜索并下载2、需要
2023-05-31

利用PHP邮件函数实现邮件发送和接收功能的方法总结

利用PHP邮件函数实现邮件发送和接收功能的方法总结随着互联网的普及,电子邮件成为了人们日常生活中必不可少的沟通工具之一。而在网站开发中,也常常需要实现邮件发送和接收的功能。PHP作为一种常用的服务器端脚本语言,提供了一系列强大的邮件函数,可
利用PHP邮件函数实现邮件发送和接收功能的方法总结
2023-11-20

利用PHP邮件处理函数实现邮件发送和接收功能的方法总结

利用PHP邮件处理函数实现邮件发送和接收功能的方法总结在当今互联网时代,电子邮件已成为了人们日常生活和工作中不可或缺的一部分。而在网站开发中,有时候我们也需要利用PHP来实现邮件的发送和接收功能。PHP提供了很多邮件处理函数,下面将对利用P
利用PHP邮件处理函数实现邮件发送和接收功能的方法总结
2023-11-20

怎么使用Java自带的mail API实现邮件发送功能

本篇内容主要讲解“怎么使用Java自带的mail API实现邮件发送功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用Java自带的mail API实现邮件发送功能”吧!需求:邮件发送
2023-07-05

使用Java自带的mail API实现邮件发送功能全过程

电子邮件的应用非常广泛,例如在某网站注册了一个账户,自动发送一封欢迎邮件,通过邮件找回密码,自动批量发送活动信息等,下面这篇文章主要给大家介绍了关于如何使用Java自带的mail API实现邮件发送功能的相关资料,需要的朋友可以参考下
2023-05-14

Node.js开发教程之基于OnceIO框架实现文件上传和验证功能

OnceIO 是 OnceDoc 企业内容(网盘)的底层Web框架,它可以实现模板文件、静态文件的全缓存,运行起来完全不需要I/O操作,并且支持客户端缓存优化,GZIP压缩等(只在第一次压缩),拥有非常好的性能,为您节约服务器成本。它的模块
2022-06-04

如何使用MySQL和Java实现一个简单的邮件发送功能

使用MySQL和Java实现邮件发送本指南介绍如何使用MySQL和Java实现邮件发送功能。步骤包括:创建MySQL表、编写Java代码连接到数据库和发送邮件、运行Java程序。代码从数据库检索邮件信息,设置SMTP属性,使用身份验证发送电子邮件。通过遵循这些步骤,你可以可靠地从你的应用程序发送电子邮件。
如何使用MySQL和Java实现一个简单的邮件发送功能
2024-04-13

如何使用MySQL和Java实现一个简单的邮件发送功能

要使用MySQL和Java实现一个简单的邮件发送功能,你需要遵循以下步骤:1. 创建一个名为"Emails"的MySQL数据库表,包含以下列:id(邮件ID,自增主键),sender(发件人),recipient(收件人),subject(
2023-10-20

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录