給心愛的她(他)用java發送一封郵件吧

關與作者更多博客請訪問雲裏雲外開源社區
請坐.JPG


隨着我們學習java的深入,也漸漸發現了它的一些樂趣,比如發送郵件…(還有很多啊)
圖片.png

還是老規矩,定義走起。

一、SMTP協議

SMTP的全稱是“Simple Mail Transfer Protocol”,即簡單郵件傳輸協議。它是一組從原地址到目的地址傳輸郵件的規範,通過此來控制郵件的中轉方式,用女朋友能聽懂的話說就是幫助告訴郵件該去哪!而SMTP服務器就是遵循SMTP協議的發送郵件服務器。對雲服務器大家或多或少都瞭解,可以把郵件服務器也理解成一種雲服務器。

二、POP3協議

POP3是Post Office Protocol 3的簡稱,即郵局協議的第三個版本,規定了怎樣將個人計算機連接到Internet的郵件服務器和下載電子郵件的電子協議。而POP3服務器則是遵循POP3協議的接受郵件服務器。簡單說就是接受郵件的。


三、發送郵件的心路歷程

①、用戶A的電子郵箱爲:[email protected],通過郵件客戶端軟件寫好一封郵件,交到QQ的郵件服務器,這一步使用的協議是SMTP,對應圖示的①;

②、QQ郵箱會根據用戶A發送的郵件進行解析,也就是根據收件地址判斷是否是自己管轄的賬戶,如果收件地址也是QQ郵箱,那麼會直接存放到自己的存儲空間。這裏我們假設收件地址不是QQ郵箱,而是163郵箱,那麼QQ郵箱就會將郵件轉發到163郵箱服務器,轉發使用的協議也是SMTP,對應圖示的②;

③、163郵箱服務器接收到QQ郵箱轉發過來的郵件,也會判斷收件地址是否是自己,發現是自己的賬戶,那麼就會將QQ郵箱轉發過來的郵件存放到自己的內部存儲空間,對應圖示的③;

④、用戶A將郵件發送了之後,就會通知用戶B去指定的郵箱收取郵件。用戶B會通過郵件客戶端軟件先向163郵箱服務器請求,要求收取自己的郵件,對應圖示的④;

⑤、163郵箱服務器收到用戶B的請求後,會從自己的存儲空間中取出B未收取的郵件,對應圖示⑤;

⑥、163郵箱服務器取出用戶B未收取的郵件後,將郵件發給用戶B,對應圖示的⑥;最後三步用戶B收取郵件的過程,使用的協議是POP3;

總結一下

使用SMTP(簡單郵件傳送協議)或ESMTP(擴展SMTP)來發送電子郵件,使用POP3(電子郵局協議3)或IMAP(因特網消息訪問協議)來接收電子郵件。

郵件收發原理.png


四、 QQ郵箱和網易郵箱的配置

1、qq

在登錄QQ郵箱後臺在"設置"=》賬號中開啓POP3/SMTP服務
qq郵箱配置.png

img


2、網易

請登錄163郵箱,點擊頁面正上方的“設置”,再點擊左側上“POP3/SMTP/IMAP”,其中“開啓SMTP服務”是系統默認勾選開啓的。勾選圖中另兩個選項,點擊確定,即可開啓成功。不勾選圖中兩個選項,點擊確定,可關閉成功。

什麼是POP3、SMTP和IMAP?

五、代碼演示(QQ郵箱)

現在隨着代碼來了解發送郵件吧!

public static void main(String [] args) throws GeneralSecurityException {
        // 收件人電子郵箱,改成自己需要的
        String to = "[email protected]";

        // 發件人電子郵箱,改成自己需要的
        String from = "[email protected]";

        // 指定發送郵件的主機爲 smtp.qq.com
        String host = "smtp.qq.com";  //QQ 郵件服務器

        // 獲取系統屬性
        Properties properties = System.getProperties();

        // 設置郵件服務器
        properties.setProperty("mail.smtp.host", host);

        properties.put("mail.smtp.auth", "true");
        MailSSLSocketFactory sf = new MailSSLSocketFactory();
        sf.setTrustAllHosts(true);
        properties.put("mail.smtp.ssl.enable", "true");
        properties.put("mail.smtp.ssl.socketFactory", sf);
        // 獲取默認session對象
        Session session = Session.getDefaultInstance(properties,new Authenticator(){
            @Override
            public PasswordAuthentication getPasswordAuthentication()
            {
                return new PasswordAuthentication("[email protected]", "16位驗證碼在郵箱中獲取"); //發件人郵件用戶名、密碼,密碼從對應的郵箱中獲取
            }
        });

        try{
            // 創建默認的 MimeMessage 對象
            MimeMessage message = new MimeMessage(session);

            // Set From: 頭部頭字段
            message.setFrom(new InternetAddress(from));

            // Set To: 頭部頭字段
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));

            // Set Subject: 頭部頭字段
            message.setSubject("This is the Subject Line!");

            // 設置消息體
            message.setText("萌新你好  這裏是太原理工大學雲頂書院第四期java一組,李國瑞正在通過java發送郵件與您交流!");

            // 發送消息
            Transport.send(message);
            System.out.println("Sent message successfully....from runoob.com");
        }catch (MessagingException mex) {
            mex.printStackTrace();
        }
    }

六、常見錯誤種類

這裏附上大神的博文,大家如有需要自行參考,但願你們用不上 [發送郵件常見錯誤](https://blog.csdn.net/afei3418/article/details/50535047)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章