最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實戰(zhàn)之基于swing的QQ郵件收發(fā)功能實現(xiàn)

 更新時間:2021年04月30日 11:03:30   作者:꧁༺空༒白༻꧂  
這篇文章主要介紹了Java實戰(zhàn)之基于swing的QQ郵件收發(fā)功能實現(xiàn),文中有非常詳細的代碼示例,對正在學習java的小伙伴們有非常好的幫助,需要的朋友可以參考下

一、電子郵件詳解

  • 假設自己的電子郵件是me@163.com,對方的郵件是you@163.com

我們編寫好文件填寫好對方文件,點擊發(fā)送,這些電子郵件就發(fā)出去了

而這些電子郵件被稱為MUA:Mail User Agent——郵件用戶代理。

  • Email發(fā)送出去的時候,不是直接到達對方的電腦,而是先發(fā)送到MTA:Mail Transfer Agent——郵件傳輸代理。如:網(wǎng)易
  • Email到達MTA后,MTA會把Emain投遞到郵件的最終目的MDA:Mail Delivery Agent——郵件投遞代理。如何存放在某個服務器上,我們將這個長期保存的地方叫做電子郵件郵箱。

Email不會直接到達對方的電腦,因為電腦不一定開機,開機不一定對方要取郵件,必須通過MUA從MDA把郵件取到自己的電腦上面。

有了上述概念,編寫程序來收發(fā)和接受文件,本質上就是:

1.編寫MUA把郵件發(fā)送到MTA

2.編寫MUA從MDA上收郵件

發(fā)郵件時,MUA和MTA使用的協(xié)議就是SMTP:Simple Mail Transfer Protocol,后面的MTA到另一個MTA也是用SMTP協(xié)議。

收郵件的時候,MUA和MDA使用的協(xié)議有兩種:POP:Post Office Protocol,即POP3;IMAP:Internet Message Access Protocol

二、郵件發(fā)送

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;
/**
 * 郵件發(fā)送
 *
 * @author ltl
 */
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 {
        //加密的郵件套接字協(xié)議工廠
        MailSSLSocketFactory sf = new MailSSLSocketFactory();
        sf.setTrustAllHosts(true);
        final Properties props = new Properties();
        // 表示SMTP發(fā)送郵件,需要進行身份驗證
        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協(xié)議設置為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);
            }
        };
        // 使用環(huán)境屬性和授權信息,創(chuàng)建郵件會話
        Session mailSession = Session.getInstance(props, authenticator);
        // 創(chuàng)建郵件消息
        MimeMessage message = new MimeMessage(mailSession);
        // 設置發(fā)件人
        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");

            // 發(fā)送郵件
            Transport.send(message);
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        // 1. 創(chuàng)建一個頂層容器(窗口)
        JFrame jf = new JFrame("發(fā)送郵件");
        jf.setSize(500, 500);
        jf.setLocationRelativeTo(null);
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        // 2. 創(chuàng)建中間容器(面板容器)
        JPanel panel = new JPanel(null);

        // 3. 創(chuàng)建一個基本組件(按鈕),并添加到 面板容器 中

        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("發(fā)送郵件");
        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. 顯示窗口,前面創(chuàng)建的信息都在內存中,通過 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. 創(chuàng)建一個頂層容器(窗口)
        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. 顯示窗口,前面創(chuàng)建的信息都在內存中,通過 jf.setVisible(true) 把內存中的窗口顯示在屏幕上。
        jf.setVisible(true);

 }



    public String[] ReceiveEmailManger() throws Exception {
        //加密的郵件套接字協(xié)議工廠
        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協(xié)議設置為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協(xié)議獲取某個郵件夾的名稱只能為inbox
            Folder folder = store.getFolder("inbox");
            //設置訪問權限
            folder.open(Folder.READ_ONLY);
            //獲取所有郵件
            int size = folder.getMessageCount();
            Message message = folder.getMessage(size);
            //獲取第一封發(fā)件人地址
            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發(fā)送郵件jar包 -->
<dependencies>
    <dependency>
        <groupId>javax.mail</groupId>
        <artifactId>mail</artifactId>
        <version>1.4.7</version>
    </dependency>
</dependencies>

到此這篇關于Java實戰(zhàn)之基于swing的QQ郵件收發(fā)功能實現(xiàn)的文章就介紹到這了,更多相關基于Java swing的QQ郵件收發(fā)功能實現(xiàn)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • RestTemplate自定義ErrorHandler方式

    RestTemplate自定義ErrorHandler方式

    這篇文章主要介紹了RestTemplate自定義ErrorHandler方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java中的排序Comparator類用法詳解

    Java中的排序Comparator類用法詳解

    這篇文章主要介紹了Java中的排序Comparator類用法詳解,Comparator?類常作為?sorted()?方法的參數(shù)傳遞給?sorted?方法,用來解決給集合排序,自定義排序規(guī)則的問題,需要的朋友可以參考下
    2023-08-08
  • Spring多線程的使用以及問題詳解

    Spring多線程的使用以及問題詳解

    在我們開發(fā)系統(tǒng)過程中,經(jīng)常會處理一些費時間的任務(如:向數(shù)據(jù)庫中插入大量數(shù)據(jù)),這個時候就就需要使用多線程,下面這篇文章主要給大家介紹了關于Spring多線程的使用以及問題的相關資料,需要的朋友可以參考下
    2022-05-05
  • 使用Netty實現(xiàn)類似Dubbo的遠程接口調用的實現(xiàn)方法

    使用Netty實現(xiàn)類似Dubbo的遠程接口調用的實現(xiàn)方法

    本文介紹了如何使用Netty框架實現(xiàn)類似Dubbo的遠程接口調用,通過自定義編解碼器、通信協(xié)議和服務注冊中心等實現(xiàn)遠程通信和服務治理。文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2023-04-04
  • 基于Java事件監(jiān)聽編寫一個中秋猜燈謎小游戲

    基于Java事件監(jiān)聽編寫一個中秋猜燈謎小游戲

    眾所周知,JavaSwing是Java中關于窗口開發(fā)的一個工具包,可以開發(fā)一些窗口程序,然后由于工具包的一些限制,導致Java在窗口開發(fā)商并沒有太多優(yōu)勢,不過,在JavaSwing中關于事件的監(jiān)聽機制是我們需要重點掌握的內容,本文將基于Java事件監(jiān)聽編寫一個中秋猜燈謎小游戲
    2023-09-09
  • 基于Java實現(xiàn)XML文件的解析與更新

    基于Java實現(xiàn)XML文件的解析與更新

    配置文件可以有很多種格式,包括?INI、JSON、YAML?和?XML。每一種編程語言解析這些格式的方式都不同。本文將通過Java語言實現(xiàn)XML文件的解析與更新,需要的可以參考一下
    2022-03-03
  • Java中的ThreadPoolExecutor線程池原理細節(jié)解析

    Java中的ThreadPoolExecutor線程池原理細節(jié)解析

    這篇文章主要介紹了Java中的ThreadPoolExecutor線程池原理細節(jié)解析,ThreadPoolExecutor是一個線程池,最多可使用7個參數(shù)來控制線程池的生成,使用線程池可以避免創(chuàng)建和銷毀線程的資源損耗,提高響應速度,并且可以管理線程池中線程的數(shù)量和狀態(tài)等等,需要的朋友可以參考下
    2023-12-12
  • Java線程池并發(fā)執(zhí)行多個任務方式

    Java線程池并發(fā)執(zhí)行多個任務方式

    這篇文章主要介紹了Java線程池并發(fā)執(zhí)行多個任務方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 詳解怎么用Java的super關鍵字

    詳解怎么用Java的super關鍵字

    今天帶大家學習Java中super關鍵字是怎么用的,文中有非常詳細的介紹,對正在學習的小伙伴們很有幫助,需要的朋友可以參考下
    2021-06-06
  • 打卡每日10道面試題——JVM篇

    打卡每日10道面試題——JVM篇

    總結了JVM一些經(jīng)典面試題,分享出我自己的解題思路,希望對大家有幫助,有哪里你覺得不正確的話,歡迎指出,后續(xù)有空會更新,希望大家能夠喜歡
    2021-06-06

最新評論

合阳县| 金川县| 大关县| 湾仔区| 巧家县| 宜兰市| 鄂托克前旗| 封开县| 建水县| 同仁县| 紫阳县| 阿坝| 泊头市| 偃师市| 社旗县| 临湘市| 夏河县| 西安市| 彩票| 正宁县| 乡城县| 建德市| 扎兰屯市| 阜新市| 赞皇县| 黄平县| 濮阳市| 定南县| 安泽县| 凤庆县| 石狮市| 宁陕县| 深州市| 正安县| 东乌珠穆沁旗| 武隆县| 梅河口市| 塘沽区| 洪江市| 门头沟区| 宜昌市|