午夜剧场伦理_日本一道高清_国产又黄又硬_91黄色网战_女同久久另类69精品国产_妹妹的朋友在线

您的位置:首頁技術(shù)文章
文章詳情頁

java實(shí)現(xiàn)郵件發(fā)送

瀏覽:21日期:2022-09-02 13:46:44

本文實(shí)例為大家分享了java實(shí)現(xiàn)郵件發(fā)送的具體代碼,供大家參考,具體內(nèi)容如下

1.使用socket通信功能實(shí)現(xiàn)java的郵件傳輸

1.1 什么是socet

Socket的英文原義是“孔”或“插座”。在網(wǎng)絡(luò)編程中,網(wǎng)絡(luò)上的兩個(gè)程序通過一個(gè)雙向的通信連接實(shí)現(xiàn)數(shù)據(jù)的交換,這個(gè)連接的一端稱為一個(gè)socket。Socket套接字是通信的基石,是支持TCP/IP協(xié)議的網(wǎng)絡(luò)通信的基本操作單元。它是網(wǎng)絡(luò)通信過程中端點(diǎn)的抽象表示,包含進(jìn)行網(wǎng)絡(luò)通信必須的五種信息:連接使用的協(xié)議,本地主機(jī)的IP地址,本地進(jìn)程的協(xié)議端口,遠(yuǎn)地主機(jī)的IP地址,遠(yuǎn)地進(jìn)程的協(xié)議端口。Socket本質(zhì)是編程接口(API),對TCP/IP的封裝,TCP/IP也要提供可供程序員做網(wǎng)絡(luò)開發(fā)所用的接口,這就是Socket編程接口;HTTP是轎車,提供了封裝或者顯示數(shù)據(jù)的具體形式;Socket是發(fā)動機(jī),提供了網(wǎng)絡(luò)通信的能力。

1.2.Socket的原理

Socket實(shí)質(zhì)上提供了進(jìn)程通信的端點(diǎn)。進(jìn)程通信之前,雙方首先必須各自創(chuàng)建一個(gè)端點(diǎn),否則是沒有辦法建立聯(lián)系并相互通信的。正如打電話之前,雙方必須各自擁有一臺電話機(jī)一樣套接字之間的連接過程可以分為三個(gè)步驟:服務(wù)器監(jiān)聽,客戶端請求,連接確認(rèn)。1、服務(wù)器監(jiān)聽:是服務(wù)器端套接字并不定位具體的客戶端套接字,而是處于等待連接的狀態(tài),實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)狀態(tài)。2、客戶端請求:是指由客戶端的套接字提出連接請求,要連接的目標(biāo)是服務(wù)器端的套接字。為此,客戶端的套接字必須首先描述它要連接的服務(wù)器的套接字,指出服務(wù)器端套接字的地址和端口號,然后就向服務(wù)器端套接字提出連接請求。3、連接確認(rèn):是指當(dāng)服務(wù)器端套接字監(jiān)聽到或者說接收到客戶端套接字的連接請求,它就響應(yīng)客戶端套接字的請求,建立一個(gè)新的線程,把服務(wù)器端套接字的描述發(fā)給客戶端,一旦客戶端確認(rèn)了此描述,連接就建立好了。而服務(wù)器端套接字繼續(xù)處于監(jiān)聽狀態(tài),繼續(xù)接收其他客戶端套接字的連接請求。

1.3. 基于java的socket網(wǎng)絡(luò)編程實(shí)現(xiàn)

Server端Listen監(jiān)聽某個(gè)端口是否有連接請求,Client端向Server 端發(fā)出連接請求,Server端向Client端發(fā)回Accept接受消息。這樣一個(gè)連接就建立起來了。Server端和Client端都可以通過Send,Write等方法與對方通信。對于一個(gè)功能齊全的Socket,都要包含以下基本結(jié)構(gòu),其工作過程包含以下四個(gè)基本的步驟:1、創(chuàng)建Socket;2、 打開連接到Socket的輸入/出流;3、按照一定的協(xié)議對Socket進(jìn)行讀/寫操作;4、關(guān)閉Socket。

2.具體代碼實(shí)現(xiàn)

我們將用代碼完成郵件的發(fā)送。這在實(shí)際項(xiàng)目中應(yīng)用的非常廣泛,比如注冊需要發(fā)送郵件進(jìn)行賬號激活,再比如OA項(xiàng)目中利用郵件進(jìn)行任務(wù)提醒等等。

2.1.使用Java發(fā)送 E-mail 十分簡單,但是首先你應(yīng)該準(zhǔn)備

JavaMail API

<dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.7</version></dependency>

Java Activation Framework

<dependency> <groupId>javax.activation</groupId> <artifactId>activation</artifactId> <version>1.1.1</version></dependency>

得到兩個(gè)jar包

2.2.獲取對應(yīng)郵箱的權(quán)限 (以qq郵箱為例)

QQ郵箱需要安全驗(yàn)證,我們需要獲取他對應(yīng)的權(quán)限;進(jìn)入QQ郵箱?>郵箱設(shè)置?>賬戶,下滑找到POP3/IMAP/SMTP/Exchange/CardDav/CalDav服務(wù),開啟POP3/SMTP服務(wù),如圖所示:

java實(shí)現(xiàn)郵件發(fā)送

java實(shí)現(xiàn)郵件發(fā)送

java實(shí)現(xiàn)郵件發(fā)送

java實(shí)現(xiàn)郵件發(fā)送

2.3.下面開始進(jìn)入編程階段:

package com.cn.own.util;import com.cn.own.model.EmailModel;import com.sun.mail.util.MailSSLSocketFactory;import javax.mail.*;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;import java.util.Properties;public class JavaSocket { private final static String emailKey='16位的授權(quán)碼'; private final static String emailId_send='發(fā)件人郵箱';//注:要和你的16位授權(quán)碼對應(yīng)的郵箱 private final static String emailId_receive='收件人郵箱'; public static void sendEmail(EmailModel emailModel) throws Exception{ Properties prop = new Properties(); prop.setProperty('mail.host', 'smtp.qq.com'); //// 設(shè)置QQ郵件服務(wù)器 prop.setProperty('mail.transport.protocol', 'smtp'); // 郵件發(fā)送協(xié)議 prop.setProperty('mail.smtp.auth', 'true'); // 需要驗(yàn)證用戶名密碼 // 關(guān)于QQ郵箱,還要設(shè)置SSL加密,加上以下代碼即可 MailSSLSocketFactory sf = new MailSSLSocketFactory(); sf.setTrustAllHosts(true); prop.put('mail.smtp.ssl.enable', 'true'); prop.put('mail.smtp.ssl.socketFactory', sf); //使用JavaMail發(fā)送郵件的5個(gè)步驟 //創(chuàng)建定義整個(gè)應(yīng)用程序所需的環(huán)境信息的 Session 對象 Session session = Session.getDefaultInstance(prop, new Authenticator() { public PasswordAuthentication getPasswordAuthentication() { //發(fā)件人郵件用戶名、授權(quán)碼 return new PasswordAuthentication(emailId_send, emailKey); } }); //開啟Session的debug模式,這樣就可以查看到程序發(fā)送Email的運(yùn)行狀態(tài) session.setDebug(true); //2、通過session得到transport對象 Transport ts = session.getTransport(); //3、使用郵箱的用戶名和授權(quán)碼連上郵件服務(wù)器 ts.connect('smtp.qq.com', emailId_send, emailKey); //4、創(chuàng)建郵件 //創(chuàng)建郵件對象 MimeMessage message = new MimeMessage(session); //指明郵件的發(fā)件人 message.setFrom(new InternetAddress(emailId_receive)); //指明郵件的收件人,現(xiàn)在發(fā)件人和收件人是一樣的,那就是自己給自己發(fā) message.setRecipient(Message.RecipientType.TO, new InternetAddress(emailId_receive)); //郵件的標(biāo)題 message.setSubject(emailModel.getTitle()); //郵件的文本內(nèi)容 message.setContent(emailModel.getMessage(), 'text/html;charset=UTF-8'); //5、發(fā)送郵件 ts.sendMessage(message, message.getAllRecipients()); // re=ts ts.close(); }}

下面附上EmailModel

package com.cn.own.model;public class EmailModel { private String title;//郵件標(biāo)題 private String message;//郵件內(nèi)容 public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; }}

下面我們用一個(gè)單元測試進(jìn)行測試:

package com.cn.own.junitTest;import com.cn.own.util.JavaSocket;import org.junit.runner.RunWith;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.context.junit4.SpringRunner;@RunWith(SpringRunner.class)@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)public class Test { @org.junit.Test public void testSendEmail() throws Exception{ JavaSocket.sendEmail(new EmailModel('title','message')); }}

至此就結(jié)束了簡單的文本類型的郵件發(fā)送

3.帶圖片和附件的郵件

先認(rèn)識兩個(gè)類一個(gè)名詞:MIME(多用途互聯(lián)網(wǎng)郵件擴(kuò)展類型)MimeBodyPart類javax.mail.internet.MimeBodyPart類 表示的是一個(gè)MIME消息,它和MimeMessage類一樣都是從Part接口繼承過來。MimeMultipart類javax.mail.internet.MimeMultipart是抽象類 Multipart的實(shí)現(xiàn)子類,它用來組合多個(gè)MIME消息。一個(gè)MimeMultipart對象可以包含多個(gè)代表MIME消息的MimeBodyPart對象。

3.1.代碼實(shí)現(xiàn)

3.1.1 創(chuàng)建包含內(nèi)嵌圖片的郵件

前面的例子中是單獨(dú)的使用HTML或者是純文本內(nèi)容,但是有時(shí)候我們需要在純文本中使用內(nèi)嵌的方式顯示一些圖片,因此就要將純文本和內(nèi)嵌圖片單獨(dú)存放在MimeBodyPart中然后再將其存放在一個(gè)Mimemultipart對象中即可。

import com.sun.mail.util.MailSSLSocketFactory;import javax.activation.DataHandler;import javax.activation.FileDataSource;import javax.mail.*;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeBodyPart;import javax.mail.internet.MimeMessage;import javax.mail.internet.MimeMultipart;import java.util.Properties;public class SendImageEmail { public static void main(String[] args) throws Exception { Properties prop = new Properties(); prop.setProperty('mail.host', 'smtp.qq.com'); //// 設(shè)置QQ郵件服務(wù)器 prop.setProperty('mail.transport.protocol', 'smtp'); // 郵件發(fā)送協(xié)議 prop.setProperty('mail.smtp.auth', 'true'); // 需要驗(yàn)證用戶名密碼 // 關(guān)于QQ郵箱,還要設(shè)置SSL加密,加上以下代碼即可 MailSSLSocketFactory sf = new MailSSLSocketFactory(); sf.setTrustAllHosts(true); prop.put('mail.smtp.ssl.enable', 'true'); prop.put('mail.smtp.ssl.socketFactory', sf); //使用JavaMail發(fā)送郵件的5個(gè)步驟 //1、創(chuàng)建定義整個(gè)應(yīng)用程序所需的環(huán)境信息的 Session 對象 Session session = Session.getDefaultInstance(prop, new Authenticator() { public PasswordAuthentication getPasswordAuthentication() { //發(fā)件人郵件用戶名、授權(quán)碼 return new PasswordAuthentication('545646733@qq.com', '授權(quán)碼'); } }); //開啟Session的debug模式,這樣就可以查看到程序發(fā)送Email的運(yùn)行狀態(tài) session.setDebug(true); //2、通過session得到transport對象 Transport ts = session.getTransport(); //3、使用郵箱的用戶名和授權(quán)碼連上郵件服務(wù)器 ts.connect('smtp.qq.com', '545646733@qq.com', '授權(quán)碼'); //4、創(chuàng)建郵件 //創(chuàng)建郵件 MimeMessage message = new MimeMessage(session); // 設(shè)置郵件的基本信息 //發(fā)件人 message.setFrom(new InternetAddress('545646733@qq.com')); //收件人 message.setRecipient(Message.RecipientType.TO, new InternetAddress('545646733@qq.com')); //郵件標(biāo)題 message.setSubject('帶圖片的郵件'); // 準(zhǔn)備郵件數(shù)據(jù) // 準(zhǔn)備圖片數(shù)據(jù) MimeBodyPart image = new MimeBodyPart(); DataHandler dh = new DataHandler(new FileDataSource('src/resources/bz.jpg')); image.setDataHandler(dh); image.setContentID('bz.jpg'); // 準(zhǔn)備正文數(shù)據(jù) MimeBodyPart text = new MimeBodyPart(); text.setContent('這是一封郵件正文帶圖片<img src=’cid:bz.jpg’>的郵件', 'text/html;charset=UTF-8'); // 描述數(shù)據(jù)關(guān)系 MimeMultipart mm = new MimeMultipart(); mm.addBodyPart(text); mm.addBodyPart(image); mm.setSubType('related'); //設(shè)置到消息中,保存修改 message.setContent(mm); message.saveChanges(); //5.發(fā)送郵件 ts.sendMessage(message, message.getAllRecipients()); ts.close(); }}

3.2.2 帶圖片和附件的復(fù)雜郵件發(fā)送

import javax.activation.DataHandler;import javax.activation.FileDataSource;import javax.mail.*;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeBodyPart;import javax.mail.internet.MimeMessage;import javax.mail.internet.MimeMultipart;import java.security.GeneralSecurityException;import java.util.Properties;public class SendFileMail { public static void main(String[] args) throws MessagingException, GeneralSecurityException { //創(chuàng)建一個(gè)配置文件保存并讀取信息 Properties properties = new Properties(); //設(shè)置qq郵件服務(wù)器 properties.setProperty('mail.host','smtp.qq.com'); //設(shè)置發(fā)送的協(xié)議 properties.setProperty('mail.transport.protocol','smtp'); //設(shè)置用戶是否需要驗(yàn)證 properties.setProperty('mail.smtp.auth', 'true'); //=================================只有QQ存在的一個(gè)特性,需要建立一個(gè)安全的鏈接 // 關(guān)于QQ郵箱,還要設(shè)置SSL加密,加上以下代碼即可 MailSSLSocketFactory sf = new MailSSLSocketFactory(); sf.setTrustAllHosts(true); properties.put('mail.smtp.ssl.enable', 'true'); properties.put('mail.smtp.ssl.socketFactory', sf); //=================================準(zhǔn)備工作完畢 //1.創(chuàng)建一個(gè)session會話對象; Session session = Session.getDefaultInstance(properties, new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication('545646733@qq.com', '授權(quán)碼'); } }); //可以通過session開啟Dubug模式,查看所有的過程 session.setDebug(true); //2.獲取連接對象,通過session對象獲得Transport,需要捕獲或者拋出異常; Transport tp = session.getTransport(); //3.連接服務(wù)器,需要拋出異常; tp.connect('smtp.qq.com','545646733@qq.com','授權(quán)碼'); //4.連接上之后我們需要發(fā)送郵件; MimeMessage mimeMessage = imageMail(session); //5.發(fā)送郵件 tp.sendMessage(mimeMessage,mimeMessage.getAllRecipients()); //6.關(guān)閉連接 tp.close(); } public static MimeMessage imageMail(Session session) throws MessagingException { //消息的固定信息 MimeMessage mimeMessage = new MimeMessage(session); //郵件發(fā)送人 mimeMessage.setFrom(new InternetAddress('545646733@qq.com')); //郵件接收人,可以同時(shí)發(fā)送給很多人,我們這里只發(fā)給自己; mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress('545646733@qq.com')); mimeMessage.setSubject('我也不知道是個(gè)什么東西就發(fā)給你了'); //郵件主題 /* 編寫郵件內(nèi)容 1.圖片 2.附件 3.文本 */ //圖片 MimeBodyPart body1 = new MimeBodyPart(); body1.setDataHandler(new DataHandler(new FileDataSource('src/resources/yhbxb.png'))); body1.setContentID('yhbxb.png'); //圖片設(shè)置ID //文本 MimeBodyPart body2 = new MimeBodyPart(); body2.setContent('請注意,我不是廣告<img src=’cid:yhbxb.png’>','text/html;charset=utf-8'); //附件 MimeBodyPart body3 = new MimeBodyPart(); body3.setDataHandler(new DataHandler(new FileDataSource('src/resources/log4j.properties'))); body3.setFileName('log4j.properties'); //附件設(shè)置名字 MimeBodyPart body4 = new MimeBodyPart(); body4.setDataHandler(new DataHandler(new FileDataSource('src/resources/1.txt'))); body4.setFileName(''); //附件設(shè)置名字 //拼裝郵件正文內(nèi)容 MimeMultipart multipart1 = new MimeMultipart(); multipart1.addBodyPart(body1); multipart1.addBodyPart(body2); multipart1.setSubType('related'); //1.文本和圖片內(nèi)嵌成功! //new MimeBodyPart().setContent(multipart1); //將拼裝好的正文內(nèi)容設(shè)置為主體 MimeBodyPart contentText = new MimeBodyPart(); contentText.setContent(multipart1); //拼接附件 MimeMultipart allFile =new MimeMultipart(); allFile.addBodyPart(body3); //附件 allFile.addBodyPart(body4); //附件 allFile.addBodyPart(contentText);//正文 allFile.setSubType('mixed'); //正文和附件都存在郵件中,所有類型設(shè)置為mixed; //放到Message消息中 mimeMessage.setContent(allFile); mimeMessage.saveChanges();//保存修改 return mimeMessage; }}

至此所有的郵件功能均已實(shí)現(xiàn)

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 欧美第一区| 成人小视频在线免费观看 | 久久久国产一区二区三区 | 免费黄色片网站 | 激情婷婷六月 | 三上悠亚 在线观看 | 男女猛烈无遮挡 | 特黄视频免费看 | 99自拍 | 久久伊人网站 | 超碰免费成人 | 人人射人人干 | 久久看片网 | 亚洲第一黄色 | 91丨九色丨蝌蚪丨少妇在线观看 | 干日本少妇| 操操操综合网 | 日韩精品一区二区三区在线观看 | 欧美综合影院 | 人人天天夜夜 | avove在线观看 | 99re视频在线 | 精品免费在线 | 欧美一页| 91精品视频网 | 中文字幕国产在线观看 | 专干老肥女人88av | av毛片在线看| 久久久久黄色 | 在线观看成人网 | 九色视频在线播放 | 黄色成年人视频 | 亚洲久久久 | 大小姐av | www视频在线免费观看 | 台湾佬中文字幕 | 精品免费在线 | 91久久网| 欧美在线视频一区 | 伊人中文字幕 | 国产精品一级 |