發送郵件那些事

郵件歷史

世界的第一封電子郵件

1969年10月世界上的第一封電子郵件是由計算機科學家Leonard K.教授發給他的同事的一條簡短消息。

據《互聯網週刊》報道世界上的第一封電子郵件是由計算機科學家Leonard K.教授發給他的同事的一條簡短消息(時間應該是1969年10月),這條消息只有兩個字母:"LO"。Leonard K.教授因此被稱爲電子郵件之父。所以第一條網上信息就是‘LO’,意思是‘你好!’”

當然這個說法也有一點爭議,另外一種說法是麻省理工學院博士Ray Tomlinson發送的第一封郵件,這裏不再展開討論。

中國的第一封電子郵件

1987年9月14日中國第一封電子郵件是由“德國互聯網之父”維納·措恩與王運豐在當時的兵器工業部下屬單位—計算機應用技術研究所(簡稱ICA)發往德國卡爾斯魯厄大學的,其內容爲德文和英文雙語,第一段大意如下:

原文:“ Across the Great Wall we can reach every corner in the world. ”
中文大意:“ 越過長城,我們可以到達世界的每一個角落。 ”

這是中國通過北京與德國卡爾斯魯厄大學之間的網絡連接,發出的第一封電子郵件。現在看這封郵件內容,頗具深意呀!

電子郵件的發展

雖然電子郵件是在70年代發明的,它卻是在80年纔開始有人用,70年代的沉寂主要是由於當時使用Arpanet網絡的人太少,網絡的速度也僅爲目前56Kbps標準速度的二十分之一。受網絡速度的限制,那時的用戶只能發送些簡短的信息,根本別想象現在那樣發送大量照片。

到80年代中期,個人電腦興起,電子郵件開始在電腦迷以及大學生中廣泛傳播開來;到90年代中期,互聯網瀏覽器誕生,全球網民人數激增,電子郵件被廣爲使用。2000零幾年的時候,那時候沒有網盤,上大學的時候常常使用郵箱存儲東西,那時候的郵箱也主要以網易爲主;到了現在,幾乎每個人都有好幾個郵箱,QQ郵箱、126郵箱、公司郵箱。

郵件協議

發送郵件的本質是將一個人的信息傳輸給另外一個人,那麼如何傳輸就需要商量好標準,這些標準就是協議。最初只有兩個協議:

SMTP協議

SMTP 的全稱是“Simple Mail Transfer Protocol”,即簡單郵件傳輸協議。它是一組用於從源地址到目的地址傳輸郵件的規範,通過它來控制郵件的中轉方式。它的一個重要特點是它能夠在傳送中接力傳送郵件,即郵件可以通過不同網絡上的主機接力式傳送。

SMTP 認證,簡單地說就是要求必須在提供了賬戶名和密碼之後纔可以登錄 SMTP 服務器,這就使得那些垃圾郵件的散播者無可乘之機。增加 SMTP 認證的目的是爲了使用戶避免受到垃圾郵件的侵擾。

SMTP主要負責底層的郵件系統如何將郵件從一臺機器傳至另外一臺機器。

POP3協議

POP3是Post Office Protocol 3的簡稱,即郵局協議的第3個版本,它規定怎樣將個人計算機連接到Internet的郵件服務器和下載電子郵件的電子協議。它是因特網電子郵件的第一個離線協議標準,POP3允許用戶從服務器上把郵件存儲到本地主機(即自己的計算機)上,同時刪除保存在郵件服務器上的郵件。

POP 協議支持“離線”郵件處理。其具體過程是:郵件發送到服務器上,電子郵件客戶端調用郵件客戶機程序以連接服務器,並下載所有未閱讀的電子郵件。這種離線訪問模式是一種存儲轉發服務,將郵件從郵件服務器端送到個人終端機器上,一般是 PC機或 MAC。一旦郵件發送到 PC 機或 MAC上,郵件服務器上的郵件將會被刪除。但目前的POP3郵件服務器大都可以“只下載郵件,服務器端並不刪除”,也就是改進的POP3協議。

SMTP和POP3是最初的倆個協議,隨着郵件的不斷髮展後來又增加了兩個協議:

IMAP協議

全稱 Internet Mail Access Protocol(交互式郵件存取協議),IMAP是斯坦福大學在1986年開發的研發的一種郵件獲取協議,即交互式郵件存取協議,它是跟POP3類似郵件訪問標準協議之一。不同的是,開啓了IMAP後,在電子郵件客戶端收取的郵件仍然保留在服務器上,同時在客戶端上的操作都會反饋到服務器上,如:刪除郵件,標記已讀等,服務器上的郵件也會做相應的動作。所以無論從瀏覽器登錄郵箱或者客戶端軟件登錄郵箱,看到的郵件以及狀態都是一致的。

IMAP的一個與POP3的區別是:IMAP它只下載郵件的主題,並不是把所有的郵件內容都下載下來,而是你郵箱當中還保留着郵件的副本,沒有把你原郵箱中的郵件刪除,你用郵件客戶軟件閱讀郵件時才下載郵件的內容。較好支持這兩種協議的郵件客戶端有:ThunderMail,Foxmail,outlook等。

Mime協議

由於SMTP這個協議開始是基於純ASCⅡ文本的,在二進制文件上處理得並不好。後來開發了用來編碼二進制文件的標準,如MIME,以使其通過SMTP來傳輸。今天,大多數SMTP服務器都支持8位MIME擴展,它使二進制文件的傳輸變得幾乎和純文本一樣簡單。

郵件發送流程

  • 發信人在用戶代理上編輯郵件,並寫清楚收件人的郵箱地址;
  • 用戶代理根據發信人編輯的信息,生成一封符合郵件格式的郵件;
  • 用戶代理把郵件發送到發信人的的郵件服務器上,郵件服務器上面有一個緩衝隊列,發送到郵件服務器上面的郵件都會加入到緩衝隊列中,等待郵件服務器上的SMTP客戶端進行發送;
  • 發信人的郵件服務器使用SMTP協議把這封郵件發送到收件人的郵件服務器上
  • 收件人的郵件服務器收到郵件後,把這封郵件放到收件人在這個服務器上的信箱中;
  • 收件人使用用戶代理來收取郵件。首先用戶代理使用POP3協議來連接收件人所在的郵件服務器,身份驗證成功後,用戶代理就可以把郵件服務器上面的收件人郵箱裏面的郵件讀取出來,並展示給收件人。

Java和郵件

JavaMail

最早期使用Java Mail進行發送郵件

import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
 
public class SendEmail{
   public static void main(String [] args){   
      // 收件人電子郵箱
      String to = "[email protected]";
      // 發件人電子郵箱
      String from = "[email protected]";
      // 指定發送郵件的主機爲 localhost
      String host = "localhost";
      // 獲取系統屬性
      Properties properties = System.getProperties();
      // 設置郵件服務器
      properties.setProperty("mail.smtp.host", host);
      // 獲取默認session對象
      Session session = Session.getDefaultInstance(properties);
      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("This is actual message");
         // 發送消息
         Transport.send(message);
         System.out.println("Sent message successfully....");
      }catch (MessagingException mex) {
         mex.printStackTrace();
      }
   }
}

在後來有了Spring,一切變的更簡單

Spring Mail

public void simpleSend() {
    // 構建簡單郵件對象,見名知意
    SimpleMailMessage smm = new SimpleMailMessage();
    // 設定郵件參數
    smm.setFrom(mailSender.getUsername());
    smm.setTo("[email protected]");
    smm.setSubject("Hello world");
    smm.setText("Hello world via spring mail sender");
    // 發送郵件
    mailSender.send(smm);
}

貌似幾句就搞定了,可以看出Spring的力量還是很強大的。

Spring Boot And Mail

再到了後來,Spring Boot就出現了,更加簡單了郵件發送的步驟,想了解如何使用Spring Boot發送郵件看這裏:springboot(十):郵件服務

參考:

郵件發送的原理

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章