日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

java 发送邮件昵称_利用JavaMail发送QQ邮件

發(fā)布時間:2024/9/27 java 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 发送邮件昵称_利用JavaMail发送QQ邮件 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、RFC882文檔簡單說明

RFC882文檔規(guī)定了如何編寫一封簡單的郵件(純文本郵件),一封簡單的郵件包含郵件頭和郵件體兩個部分,郵件頭和郵件體之間使用空行分隔。

郵件頭包含的內(nèi)容有:

from字段?  --用于指明發(fā)件人

to字段?  ????--用于指明收件人

subject字段??--用于說明郵件主題

cc字段?  ???-- 抄送,將郵件發(fā)送給收件人的同時抄送給另一個收件人,收件人可以看到郵件抄送給了誰

bcc字段?  ?-- 密送,將郵件發(fā)送給收件人的同時將郵件秘密發(fā)送給另一個收件人,收件人無法看到郵件密送給了誰

郵件體指的就是郵件的具體內(nèi)容。

二、MIME協(xié)議簡單介紹

在我們的實際開發(fā)當(dāng)中,一封郵件既可能包含圖片,又可能包含有附件,在這樣的情況下,RFC882文檔規(guī)定的郵件格式就無法滿足要求了。

MIME協(xié)議是對RFC822文檔的升級和補(bǔ)充,它描述了如何生產(chǎn)一封復(fù)雜的郵件。通常我們把MIME協(xié)議描述的郵件稱之為MIME郵件。MIME協(xié)議描述的數(shù)據(jù)稱之為MIME消息。

對于一封復(fù)雜郵件,如果包含了多個不同的數(shù)據(jù),MIME協(xié)議規(guī)定了要使用分隔線對多段數(shù)據(jù)進(jìn)行分隔,并使用Content-Type頭字段對數(shù)據(jù)的類型、以及多個數(shù)據(jù)之間的關(guān)系進(jìn)行描述。

三、使用JavaMail創(chuàng)建郵件和發(fā)送郵件

JavaMail創(chuàng)建的郵件是基于MIME協(xié)議的。因此可以使用JavaMail創(chuàng)建出包含圖片,包含附件的復(fù)雜郵件。

3.1、JavaMail API的簡單介紹

四、開發(fā)前的準(zhǔn)備

4.1、確保QQ郵箱已經(jīng)授權(quán)

去到QQ郵箱首頁——>設(shè)置——>賬戶,滾動條拉到最下邊,確保紅框內(nèi)開啟授權(quán)。

4.2、選擇合適的Jar包

在Java SE環(huán)境下開發(fā),使用最新版的JavaMail.jar(目前最新的是1.6.2版本)會報錯,錯誤原因和解決辦法網(wǎng)上也都有。但為了不那么麻煩,大家可以用版本較舊一點(diǎn)的Jar包,這樣就不會報錯了(本測試程序使用的Jar,https://mvnrepository.com/artifact/javax.mail/mail/1.4.7)。

4.3、發(fā)送簡單的郵件(純文本)

import java.util.Date;

import java.util.Properties;

import javax.mail.Session;

import javax.mail.Transport;

import javax.mail.internet.InternetAddress;

import javax.mail.internet.MimeMessage;

/**

* 只發(fā)送簡單的文本

* @author Snail

*

*/

public class SimpleEmail {

public static void main(String[] args) throws Exception {

Session session = Session.getInstance(getConfig());

// 開啟日志提示

session.setDebug(true);

MimeMessage mm = createMail(session, "1801888312@qq.com", "202132061@qq.com");

// 建立鏈接對象

Transport ts = session.getTransport();

ts.connect("你的QQ郵箱號碼", "前邊獲取的授權(quán)碼");

// 發(fā)送郵件

ts.sendMessage(mm, mm.getAllRecipients());

// 關(guān)閉鏈接

ts.close();

}

private static Properties getConfig() {

Properties props = new Properties();

// 使用的協(xié)議

props.setProperty("mail.transport.protocol", "smtp");

// 郵箱的 SMTP 服務(wù)器地址(百度搜:qq郵箱的POP服務(wù)器地址是什么)

props.setProperty("mail.smtp.host", "smtp.qq.com");

// 郵箱的服務(wù)器端口

props.setProperty("mail.smtp.port", "465");

// 是否需要驗證用戶名密碼

props.setProperty("mail.smtp.auth", "true");

// QQ郵箱的話需要進(jìn)行SSL認(rèn)證(javax.net.ssl.SSLSocketFactory這個類是jdk自帶的支持ssl認(rèn)證)

props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");

// 沒經(jīng)過SSL認(rèn)證的請求,不予處理

props.setProperty("mail.smtp.socketFactory.fallback", "false");

// SSL認(rèn)證的端口號(一般和郵箱服務(wù)器端口號一致)

props.setProperty("mail.smtp.socketFactory.port", "465");

return props;

}

private static MimeMessage createMail(Session session, String from, String to) throws Exception {

// 郵件:收件人,發(fā)件人,標(biāo)題,內(nèi)容(附件,圖片)

MimeMessage mm = new MimeMessage(session);

// 發(fā)件人地址,發(fā)件人名字,字符編碼

mm.setFrom(new InternetAddress(from, "發(fā)件人名字", "UTF-8"));

// 設(shè)置收件人,TO:普通收件人 CC:抄送 BCC:密送

// cc字段    -- 抄送,將郵件發(fā)送給收件人的同時抄送給另一個收件人,收件人可以看到郵件抄送給了誰

// bcc字段    -- 密送,將郵件發(fā)送給收件人的同時將郵件秘密發(fā)送給另一個收件人,收件人無法看到郵件密送給了誰

mm.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(to, "普通收件人", "UTF-8"));

// 設(shè)置發(fā)送日期

mm.setSentDate(new Date());

// 設(shè)置標(biāo)題

mm.setSubject("這是標(biāo)題", "UTF-8");

// 正文內(nèi)容

mm.setContent("

郵件的內(nèi)容哦!可以寫HTML代碼的呢!

", "text/html;charset=UTF-8");

// 保存郵件

mm.saveChanges();

return mm;

}

}

4.4、發(fā)送帶圖片的郵件

Main方法和getConfig方法和前邊的一樣,只是createMail方法稍微有些改動,下面只貼出createMail方法中的代碼。注:dog.jpg是項目src目錄下存放的一張圖片。

private static MimeMessage createMail(Session session, String from, String to) throws Exception {

// 郵件:收件人,發(fā)件人,標(biāo)題,內(nèi)容(附件,圖片)

MimeMessage mm = new MimeMessage(session);

// 發(fā)件人地址,發(fā)件人名字,字符編碼

mm.setFrom(new InternetAddress(from, "發(fā)件人名字", "UTF-8"));

// 設(shè)置收件人,TO:普通收件人 CC:抄送 BCC:密送

mm.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(to, "普通收件人", "UTF-8"));

// 設(shè)置發(fā)送日期

mm.setSentDate(new Date());

// 設(shè)置標(biāo)題

mm.setSubject("我愛中國", "UTF-8");

// 設(shè)置文字內(nèi)容

MimeBodyPart text = new MimeBodyPart();

text.setContent("

圖片可愛嗎?

", "text/html;charset=utf-8");

// 設(shè)置圖片

// 挖個坑

MimeBodyPart image = new MimeBodyPart();

// 拿來蘿卜

DataHandler dh=new DataHandler(new FileDataSource("src/dog.jpg"));

// 把蘿卜種進(jìn)去

image.setDataHandler(dh);

// 給蘿卜起個名字,供前邊的cid使用

image.setContentID("picture");

// 再聲明一個容器

MimeMultipart mp=new MimeMultipart();

// 把文字內(nèi)容放進(jìn)去

mp.addBodyPart(text);

// 把圖片內(nèi)容放進(jìn)去

mp.addBodyPart(image);

// 聲明兩者的關(guān)系

mp.setSubType("related");

// 把MimeMultipart放入到MimeMessage中

mm.setContent(mp);

// 保存郵件

mm.saveChanges();

return mm;

}

4.5、發(fā)送帶附件的郵件

private static MimeMessage createMail(Session session, String from, String to) throws Exception {

// 郵件:收件人,發(fā)件人,標(biāo)題,內(nèi)容(附件,圖片)

MimeMessage mm = new MimeMessage(session);

// 發(fā)件人地址,發(fā)件人名字,字符編碼

mm.setFrom(new InternetAddress(from, "發(fā)件人名字", "UTF-8"));

// 設(shè)置收件人,TO:普通收件人 CC:抄送 BCC:密送

mm.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(to, "普通收件人", "UTF-8"));

// 設(shè)置發(fā)送日期

mm.setSentDate(new Date());

// 設(shè)置標(biāo)題

mm.setSubject("我愛中國", "UTF-8");

// 設(shè)置文字內(nèi)容

MimeBodyPart text = new MimeBodyPart();

text.setContent("

這次給你發(fā)一個附件

", "text/html;charset=utf-8");

// 設(shè)置附件

// 挖個坑

MimeBodyPart file = new MimeBodyPart();

// 拿來蘿卜

DataHandler dh = new DataHandler(new FileDataSource("src/dog.jpg"));

// 把蘿卜種進(jìn)去

file.setDataHandler(dh);

// 給蘿卜起個名字

file.setFileName(dh.getName());

// 再聲明一個容器

MimeMultipart mp = new MimeMultipart();

// 把文字內(nèi)容放進(jìn)去

mp.addBodyPart(text);

// 把附件放進(jìn)去

mp.addBodyPart(file);

// 聲明兩者的關(guān)系

mp.setSubType("mixed");

// 把MimeMultipart放入到MimeMessage中

mm.setContent(mp);

// 保存郵件

mm.saveChanges();

return mm;

}

可以看出,與發(fā)送圖片只是稍微有點(diǎn)不同,主要不同點(diǎn)為 mp.setSubType()中的參數(shù)和圖片的cid以及附件的filename。

4.6、發(fā)送帶圖片和附件的郵件

private static MimeMessage createMail(Session session, String from, String to) throws Exception {

// 郵件:收件人,發(fā)件人,標(biāo)題,內(nèi)容(附件,圖片)

MimeMessage mm = new MimeMessage(session);

// 發(fā)件人地址,發(fā)件人名字,字符編碼

mm.setFrom(new InternetAddress(from, "發(fā)件人名字", "UTF-8"));

// 設(shè)置收件人,TO:普通收件人 CC:抄送 BCC:密送

mm.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(to, "普通收件人", "UTF-8"));

// 設(shè)置發(fā)送日期

mm.setSentDate(new Date());

// 設(shè)置標(biāo)題

mm.setSubject("正文,圖片,附件", "UTF-8");

// 設(shè)置文字內(nèi)容

MimeBodyPart text = new MimeBodyPart();

text.setContent("

這次既有附件,又有圖片

", "text/html;charset=utf-8");

// 挖個坑

MimeBodyPart image = new MimeBodyPart();

// 拿來蘿卜

DataHandler dh = new DataHandler(new FileDataSource("src/dog.jpg"));

// 把蘿卜種進(jìn)去

image.setDataHandler(dh);

// 給蘿卜起個名字,供前邊的cid使用

image.setContentID("dog");

// 設(shè)置附件

MimeBodyPart file = new MimeBodyPart();

dh = new DataHandler(new FileDataSource("src/dog.jpg"));

file.setDataHandler(dh);

file.setFileName(dh.getName());

// 再聲明一個容器

MimeMultipart mp = new MimeMultipart();

// 把文字內(nèi)容放進(jìn)去

mp.addBodyPart(text);

// 把圖片放進(jìn)去

mp.addBodyPart(image);

// 聲明兩者的關(guān)系

mp.setSubType("related");

MimeBodyPart text_image = new MimeBodyPart();

text_image.setContent(mp);

MimeMultipart mp1 = new MimeMultipart();

mp1.addBodyPart(text_image);

mp1.addBodyPart(file);

mp1.setSubType("mixed");

// 把MimeMultipart放入到MimeMessage中

mm.setContent(mp1);

// 保存郵件

mm.saveChanges();

return mm;

}

五、致謝

本文只是簡單的講了下一些理論和實戰(zhàn)知識,如果想更加深入地了解相關(guān)知識的話,下面一些鏈接或許會幫助到你。本文也對于下邊的文章有所參考,巧合的是,這些文章的作者都是同一個人,非常感謝這些文章的作者——孤傲蒼狼!該博主的其他文章質(zhì)量也特別高,推薦大家去看看哦!。

總結(jié)

以上是生活随笔為你收集整理的java 发送邮件昵称_利用JavaMail发送QQ邮件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。