JavaEE——Java和DOS下收發郵件(SMTP和POP3協議)、E-Mail協議)

E-Mail協議簡介:

  • 郵件服務器,按照提供的服務類型,可以分爲發送郵件的服務器我接收郵件的服務器。
  • 發送郵件的服務器使用發送協議,現在常用的是SMTP協議。所以,通常發郵件的服務器也稱爲SMTP服務器。
  • 接收郵件的服務器使用接收協議,現在常用的是POP3協議或IMAP協議,所以通常也被稱爲POP3或IMAP服務器。
  • 目前經常見到的服務器爲SMTP和POP3服務器。如大家在註冊了126的郵箱之後,它的發郵件服務器爲smtp.126.com:25,而收郵件服務器則爲pop3.126.com:110.(冒號後面的爲端口號)。
  • 當然,發郵件服務器和收郵件服務器也可能是同一臺主機,但端口號一定不相同。默認發郵件服務器的端口爲25,收郵件的端口爲110.

這裏寫圖片描述

郵件收/發協議:

  • SMTP協議-發郵件協議

全稱爲Simple Mail Transfer Protocol(簡單郵件傳輸協議),它定義了郵件客戶端軟件與SMTP服務器之間、以及兩臺SMTP服務器之間的通訊規則。端口一般爲25.

  • POP3協議-收郵件協議

全稱爲Post Office Protocol(郵局協議),它定義了郵件客戶端軟件與POP3服務器的通訊規則。端口一般爲110.

  • IMAP協議-對POP3的擴展

全稱爲Internet Message Access Protocal(Internet消息訪問協議),它是對POP3協議的一種擴展,定義了郵件客戶端軟件與IMAP服務器的通訊規則。

SMTP發郵件協議的命令

這裏寫圖片描述

POP3協議的命令

這裏寫圖片描述

DOS下演示收發郵件

注意在郵箱服務器(進網站郵箱)中要把SMTP和POP3服務的開關打開

郵箱:
hncujava@sina.com   1234567
hncujava@126.com    hncu1234567

 編碼
package cn.hncu;

import sun.misc.BASE64Encoder;

public class BaseEncoder {
    public static void main(String[] args) {
        BASE64Encoder be=new BASE64Encoder();
        String name=be.encode("hncujava".getBytes());
        String pwd=be.encode("1234567".getBytes());
        System.out.println(name);
        System.out.println(pwd);

    }
}

※※win7系統中,默認下 telnet服務是關閉,得用如下方式:
1、控制面板-->程序-->打開或關閉windows功能,選擇“telnet服務器” 和 “telnet客戶端”,確定即可。
2、控制面板-->系統安全-->管理工具-->服務-->telnet-->右擊“屬性”-->將“禁用”改爲“手動”,再選擇“啓動”

一、發郵件
telnet smtp.sina.com 25  第一步:與服務器建立連接。
ehlo hncu               第二步:先和服務器打個招乎
auth login              第三步:請求登錄
aG5jdWphdmE=            輸入用戶名經過base64編碼以後的
MTIzNDU2Nw==            輸入密碼,也是經過base64編碼以後的。
mail from:<hncujava@sina.com>    第四步:輸入發件人
rcpt to:<hncujava@126.com>          第五步:輸入收件人
data                            第六步:輸入data命令然後回車,開始輸入數據。
from:<hncujava@sina.com>            可選的輸入from:<…>
to:<hncujava@126.com>        可選的輸入to:<..>
subject:hncu mail wyjtest       subject:主題
[空行]
hello hncu , iam OK?! 
. //郵件結束符            第七步:輸入.(點)單行,表示數據結束
                            第八步:輸入quit退出。

二、收郵件
telnet pop3.126.com 110
user hncujava
pass hncu1234567
stat 顯示總體信息。
list 列出所有信件
retr - 顯示第一封信件
quit -退出

下面是演示java下操作發郵件

注意:QQ郵箱需要在設置中開啓smtp和pop3協議,並且記住授權碼。
比其他郵箱多了ssl協議,需要加上

//要加上SSL
            MailSSLSocketFactory sf=new MailSSLSocketFactory();
            sf.setTrustAllHosts(true);
            p.setProperty("mail.smtp.ssl.enable", "true");
            p.put("mail.smtp.ssl.socketFactory", sf);

下面是發送代碼

這裏寫代碼片
package cn.hncu;
import java.security.GeneralSecurityException;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;

import org.junit.Test;
import org.junit.Test;

import com.sun.mail.util.MailSSLSocketFactory;

public class SendMailDemo {
    @Test
    public void send1() throws AddressException, MessagingException, GeneralSecurityException{
        Properties p=new Properties();
        p.setProperty("mail.host", "smtp.sina.com");//指定郵件服務器,默認端口 25
        p.setProperty("mail.smtp.auth", "true");//要採用指定用戶名密碼的方式去認證

//      MailSSLSocketFactory sf=new MailSSLSocketFactory();
//      sf.setTrustAllHosts(true);
//      p.put("mail.smtp.ssl.enable", "true");
//      p.put("mail.smtp.ssl.socketFactory", sf);
//      
        Session s=Session.getDefaultInstance(p, new Authenticator() {

            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                PasswordAuthentication pa=new PasswordAuthentication("hncujava", "1234567");
                return pa;
            }
        });//註冊session,指定發送賬號

        s.setDebug(true);//設置打開調試狀態,一一條條發送.
         //聲明一個Message對象(代表一封郵件),從session中創建
        MimeMessage msg=new MimeMessage(s);
         //郵件信息封裝
        //1發件人
         msg.setFrom( new InternetAddress("[email protected]") );
        //2收件人
        msg.setRecipient(RecipientType.TO, new InternetAddress("[email protected]"));
        //33郵件內容:主題、內容
        msg.setSubject("這是軍街用java發郵件");
        msg.setContent("<a href='http://www.3300av.com/'>這是軍街的個人主頁</a>","text/html;charset=utf-8");
//      msg.setContent("今天天氣很好啊","text/plain;charset=utf-8");
        //發送動作
        Transport.send(msg);
    }
    @Test//發送帶附件的郵件
    public void send2() throws MessagingException{
        //跟smtp服務器建立一個連接
        Properties p=new Properties();
        p.setProperty("mail.host", "smtp.sina.com");
        p.setProperty("mail.smtp.auth", "true");
        Session s=Session.getDefaultInstance(p, new Authenticator() {

            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                PasswordAuthentication pa=new PasswordAuthentication("hncujava", "1234567");
                return pa;
            }
        });
        s.setDebug(true);
        MimeMessage msg=new MimeMessage(s);
        //聲明一個Message對象(代表一封郵件),從session中創建
        msg.setFrom(new InternetAddress("[email protected]"));
        InternetAddress[] ia= new InternetAddress[2];
        ia[0]=new InternetAddress("[email protected]");
        ia[1]=new InternetAddress("[email protected]");
        msg.setRecipients(javax.mail.Message.RecipientType.TO, ia );
        msg.setSubject("這是我用Java發來的郵件5....");
        msg.setSubject("這是軍街用來測試郵件附件");

        MimeBodyPart body1=new MimeBodyPart();
        body1.setContent("這是兩張<font color='red'>美女圖片</font>....","text/html;charset=utf-8");        
        //郵件內容部分2---附件1
        MimeBodyPart body2=new MimeBodyPart();
        body2.setDataHandler(new DataHandler(new FileDataSource("./imgs/1.png")));
        body2.setFileName("1.jpg");

//      2-1606200U946.doc
        //郵件內容部分3---附件2
        MimeBodyPart body3=new MimeBodyPart();
        body3.setDataHandler(new DataHandler(new FileDataSource("./imgs/2-1606200U946.doc")));
        body3.setFileName("2-1606200U946.doc");
        //把上面的3部分組裝在一起,設置到msg中
        MimeMultipart mm=new MimeMultipart();
        mm.addBodyPart(body1);
        mm.addBodyPart(body2);
        mm.addBodyPart(body3);
        msg.setContent(mm);

        Transport.send(msg);
    }

    @Test
    public void my() throws AddressException, MessagingException, GeneralSecurityException{
        for (int i = 0; i < 50; i++) {
            Properties p=new Properties();
            p.setProperty("mail.host", "smtp.qq.com");//指定郵件服務器,默認端口 25
            p.setProperty("mail.smtp.auth", "true");//要採用指定用戶名密碼的方式去認證
            //要加上SSL
            MailSSLSocketFactory sf=new MailSSLSocketFactory();
            sf.setTrustAllHosts(true);
            p.setProperty("mail.smtp.ssl.enable", "true");
            p.put("mail.smtp.ssl.socketFactory", sf);
            Session s = Session.getDefaultInstance(p, new Authenticator() {

                @Override
                protected PasswordAuthentication getPasswordAuthentication() {
                    PasswordAuthentication pa = new PasswordAuthentication(
                            "747205398", "************");//***爲你的qq郵箱登陸授權碼
                    return pa;
                }
            });//註冊session,指定發送賬號
            s.setDebug(true);//設置打開調試狀態,一一條條發送.
            //聲明一個Message對象(代表一封郵件),從session中創建
            MimeMessage msg = new MimeMessage(s);
            //郵件信息封裝
            //1發件人
            msg.setFrom(new InternetAddress("[email protected]"));
            //2收件人
            msg.setRecipient(RecipientType.TO, new InternetAddress(
                    "[email protected]"));
            //33郵件內容:主題、內容
            msg.setSubject("狗屎,我給你發給黃色網址,不要寫");
            msg.setContent("<a href='http://www.3300av.com/'>你看看</a>",
                    "text/html;charset=utf-8");
            //      msg.setContent("今天天氣很好啊","text/plain;charset=utf-8");
            //發送動作
            Transport.send(msg);
        }
    }
}
發佈了154 篇原創文章 · 獲贊 26 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章