

下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1 / 9java socket 實(shí)現(xiàn) SMTP 協(xié)議發(fā)送郵件 文章分類:Java 編程package com.socket.test;import java.io.BufferedReader;import java.io.DataOutputStream;import java.io.IOException;import java.io.InputStreamReader;import .Socket;import .UnknownHostException;import ernal.impl.dv.util.Base64; /*
2、通過 socket 向 smtp 協(xié)議服務(wù)器發(fā)送郵件* author fuyanqing*/public class SocketMail String mailServer;String from;String to;String content;String lineFeet = rn;private int port = 25;Socket client;BufferedReader in;DataOutputStream os;public String getContent() return content;public void setContent(String content)
3、 this.content = content;public String getMailServer() return mailServer;public void setMailServer(String mailServer) this.mailServer = mailServer;public String getFrom() return from;public void setFrom(String from) this.from = from;public String getTo() return to;public void setTo(String to) this.to
4、 = to;/*2 / 9* 初始化連接* return*/private boolean init() boolean boo = true;if(mailServer=null | .equals(mailServer)return false;try client = new Socket(mailServer,port);in = new BufferedReader(new InputStreamReader(client.getInputStream();os = new DataOutputStream(client.getOutputStream();String isConn
5、ect = response(); if(isConnect.startsWith(220)elseSystem.out.println( 建立連接失?。?+isConnect);boo = false; catch (UnknownHostException e) System.out.println( 建立連接失敗! );e.printStackTrace();boo = false; catch (IOException e) System.out.println( 讀取流失敗! ); e.printStackTrace();boo = false;return boo;/* 發(fā)送 sm
6、tp 指令* 并返回服務(wù)器響應(yīng)信息3 / 9*/private String sendCommand(String msg) String result = null;try os.writeBytes(msg); os.flush();result = response(); catch (IOException e) e.printStackTrace();return result;/* 讀取服務(wù)器端響應(yīng)信息* return*/private String response()String result = null;try result = in.readLine(); catch (
7、IOException e) e.printStackTrace();return result;/* 關(guān)閉*/ private void close() try os.close(); in.close();client.close(); catch (IOException e) e.printStackTrace(); /* 發(fā)送郵件* return*/ public boolean sendMail()/ 初始化if(client=null)if(init() else return false;/ 判斷 from,toif(from=null | from.isEmpty() | t
8、o = null | to.isEmpty() return false;/ 進(jìn)行握手String result = sendCommand(HELO +mailServer+lineFeet);if(isStartWith(result,250)elseSystem.out.println( 握手失?。?+result); return false;/ 驗(yàn)證發(fā)信人信息String auth = sendCommand(AUTH LOGIN+lineFeet); if(isStartWith(auth,334)else return false;String user = sendComman
9、d(new String(Base64.encode(*.getBytes()+lineFeet);if(isStartWith(user,334)4 / 9else return false;String pass = sendCommand(new String(Base64.encode(*.getBytes()+lineFeet);if(isStartWith(pass,235)else return false;/ 發(fā)送指令String f = sendCommand(Mail From:+lineFeet); if(isStartWith(f,250)elsereturn fals
10、e;String toStr = sendCommand(RCPT TO:+lineFeet);if(isStartWith(toStr,250)5 / 9elsereturn false;String data = sendCommand(DATA+lineFeet); if(isStartWith(data,354)elsereturn false;StringBuilder sb = new StringBuilder(); sb.append(From:+lineFeet);sb.append(To:+lineFeet); sb.append(Subject:test+lineFeet
11、); sb.append(Date:2010/10/27 17:30+lineFeet); sb.append(Content-Type:text/plain;charset=GB2312+lineFeet);sb.append(lineFeet);sb.append(content); sb.append(lineFeet+.+lineFeet);String conStr = sendCommand(sb.toString(); if(isStartWith(conStr,250)elsereturn false;/quitString quit = sendCommand(QUIT+li
12、neFeet); if(isStartWith(quit,221)elsereturn false;close();return true;private boolean isStartWith(String res,String with)return res.startsWith(with);public static void main(String args) SocketMail mail = new SocketMail();mail.setMailServer(); mail.setFrom(*); mail.setTo(*);mail.setContent(hello,this
13、 is a test mail!);boolean boo = mail.sendMail(); if(boo)System.out.println( 郵件發(fā)送成功! ); elseSystem.out.println( 郵件發(fā)送失??! );SMT 啲連接和收發(fā)過程:a. 建立 TCP 連接。b. 客戶端發(fā)送 HELO 命令以標(biāo)識(shí)發(fā)件人自己的身份,然后客戶端發(fā)送 MAIL 命令服 務(wù)器端正希望以 OKf 乍為響應(yīng),表明準(zhǔn)備接收。c. 客戶端發(fā)送 RCPT 命令,以標(biāo)識(shí)該電子郵件的計(jì)劃接收人,可以有多個(gè)RCPT6 / 9行d. 協(xié)商結(jié)束,發(fā)送郵件,用命令 DATA 發(fā)送e. 以 . 表示結(jié)束輸入內(nèi)容一起發(fā)送出去f. 結(jié)束此次發(fā)送,用 QUIT 命令退出。SMTP 勺基本命令集:HELO 向服務(wù)器標(biāo)識(shí)用戶身份MAIL 初始化郵件傳輸 mail from: RCPT標(biāo)識(shí)單個(gè)的郵件接收人;常在 MAIL 命令后面可有多個(gè) rcpt to: DATA在單個(gè)或多個(gè) RCPT 命令后,表示所有的郵件接收人已標(biāo)識(shí),初始化數(shù)據(jù)傳輸,以 . 結(jié)束。NOOP 無操乍,服務(wù)器應(yīng)響應(yīng) OKRSET重置會(huì)話,當(dāng)前傳
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 城市配送與物流配送環(huán)節(jié)的個(gè)性化服務(wù)考核試卷
- 機(jī)床附件的供應(yīng)鏈優(yōu)化與成本控制考核試卷
- D打印技術(shù)在個(gè)性化鞋類設(shè)計(jì)的應(yīng)用考核試卷
- 城市規(guī)劃城市水資源配置考核試卷
- 未來的數(shù)字化電影產(chǎn)業(yè)考核試卷
- 在家工作租房合同范本
- 代加工藥品合同范本
- 工程承包服務(wù)合同范本
- 酒店客房服務(wù)操作流程制度
- 電力行業(yè)電力設(shè)備維修合同及免責(zé)條款
- 心源性休克護(hù)理
- 法律盡職調(diào)查
- 2024年山東省公務(wù)員考試《行測(cè)》真題及答案解析
- 凝固點(diǎn)降低獲獎(jiǎng)?wù)n件
- 化工原理Ⅱ?qū)W習(xí)通超星期末考試答案章節(jié)答案2024年
- 基因家族分析
- 手機(jī)以舊換新活動(dòng)方案
- 高中英語牛津譯林版(2020)中國文化+素材
- 施工便道施工方案三工區(qū)縱向便道施工方案
- 2024年河南省高考對(duì)口升學(xué)語文英語試題
- 2024年水利安全員(B證)考試題庫-上(單選題)
評(píng)論
0/150
提交評(píng)論