使用 JavaMail 實現郵件傳送與收取
因為上一篇已經實現了James的配置,那接下來就是利用javaMail實現郵件的傳送和收取。
傳送郵件的程式碼:
如果James配置不成功的話是不能像外網傳送郵件,或者接收外網的郵件的,這點很重要。package com.ge.test; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.DataSource; import javax.activation.FileDataSource; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.Transport; import javax.mail.URLName; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; public class SendMail { public SendMail() { } public static void main(String[] args) { // 初始化資訊 String sender = "qiang"; //使用者名稱 String password = "qiang";//使用者密碼 String smtpServer = "42.96.155.24"; //郵件伺服器所在的IP地址,必須是外網IP String recipient = "
[email protected]";//郵件收件人地址 String subject = "測試郵件主題"; String fileAttachment = "E:/test.zip"; //附件,注意是從本地上傳的! String content = "<h1>測試郵件內容</h1>"; // 配置伺服器屬性 Properties proper = new Properties(); proper.put("mail.smtp.host", smtpServer); // smtp伺服器 proper.put("mail.smtp.auth", "true"); // 是否smtp認證 proper.put("mail.smtp.port", "25"); // 設定smtp埠 proper.put("mail.transport.protocol", "smtp"); // 發郵件協議 pop3 smtp NNTP proper.put("mail.store.protocol", "pop3"); // 收郵件協議 // 配置郵件接收地址 InternetAddress[] receiveAddress = new InternetAddress[1]; try { receiveAddress[0] = new InternetAddress(recipient); } catch (AddressException e) { e.printStackTrace(); } // smtp認證,獲取Session SmtpAuth sa = new SmtpAuth(); sa.setUserinfo(sender, password); Session session = Session.getInstance(proper, sa); session.setPasswordAuthentication(new URLName(smtpServer), sa .getPasswordAuthentication()); // 構建郵件體 MimeMessage sendMess = new MimeMessage(session); MimeBodyPart mbp = new MimeBodyPart(); MimeMultipart mmp = new MimeMultipart(); try { // 郵件文字內容 mbp.setContent(content, "text/html; charset=GBK"); mmp.addBodyPart(mbp); // 附件處理 if(fileAttachment!=null&&fileAttachment!=""){ DataSource source = new FileDataSource(fileAttachment); String name = source.getName(); mbp = new MimeBodyPart(); mbp.setDataHandler(new DataHandler(source)); mbp.setFileName(name); mmp.addBodyPart(mbp); } // 郵件整體 sendMess.setSubject(subject); sendMess.setContent(mmp); // 傳送郵件 sendMess.setSender(new InternetAddress("[email protected]")); //注意這個很重要,能否成功傳送的關鍵程式碼。如果不寫則會顯示代發,會被遮蔽掉。 sendMess.setRecipients(Message.RecipientType.TO, receiveAddress); Transport.send(sendMess); System.out.println("傳送成功"); } catch (MessagingException ex) { ex.printStackTrace(); } } }
接收郵件程式碼:
package com.ge.test;
import java.io.*;
import java.text.*;
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
/**
* 有一封郵件就需要建立一個ReciveMail物件
*/
public class ReciveOneMail {
private MimeMessage mimeMessage = null;
private String saveAttachPath = ""; //附件下載後的存放目錄
private StringBuffer bodytext = new StringBuffer();//存放郵件內容
private String dateformat = "yy-MM-dd HH:mm"; //預設的日前顯示格式
public ReciveOneMail(MimeMessage mimeMessage) {
this.mimeMessage = mimeMessage;
}
public void setMimeMessage(MimeMessage mimeMessage) {
this.mimeMessage = mimeMessage;
}
/**
* 獲得發件人的地址和姓名
*/
public String getFrom() throws Exception {
InternetAddress address[] = (InternetAddress[]) mimeMessage.getFrom();
String from = address[0].getAddress();
if (from == null)
from = "";
String personal = address[0].getPersonal();
if (personal == null)
personal = "";
String fromaddr = personal + "<" + from + ">";
return fromaddr;
}
/**
* 獲得郵件的收件人,抄送,和密送的地址和姓名,根據所傳遞的引數的不同 "to"----收件人 "cc"---抄送人地址 "bcc"---密送人地址
*/
public String getMailAddress(String type) throws Exception {
String mailaddr = "";
String addtype = type.toUpperCase();
InternetAddress[] address = null;
if (addtype.equals("TO") || addtype.equals("CC")|| addtype.equals("BCC")) {
if (addtype.equals("TO")) {
address = (InternetAddress[]) mimeMessage.getRecipients(Message.RecipientType.TO);
} else if (addtype.equals("CC")) {
address = (InternetAddress[]) mimeMessage.getRecipients(Message.RecipientType.CC);
} else {
address = (InternetAddress[]) mimeMessage.getRecipients(Message.RecipientType.BCC);
}
if (address != null) {
for (int i = 0; i < address.length; i++) {
String email = address[i].getAddress();
if (email == null)
email = "";
else {
email = MimeUtility.decodeText(email);
}
String personal = address[i].getPersonal();
if (personal == null)
personal = "";
else {
personal = MimeUtility.decodeText(personal);
}
String compositeto = personal + "<" + email + ">";
mailaddr += "," + compositeto;
}
mailaddr = mailaddr.substring(1);
}
} else {
throw new Exception("Error emailaddr type!");
}
return mailaddr;
}
/**
* 獲得郵件主題
*/
public String getSubject() throws MessagingException {
String subject = "";
try {
subject = MimeUtility.decodeText(mimeMessage.getSubject());
if (subject == null)
subject = "";
} catch (Exception exce) {}
return subject;
}
/**
* 獲得郵件傳送日期
*/
public String getSentDate() throws Exception {
Date sentdate = mimeMessage.getSentDate();
SimpleDateFormat format = new SimpleDateFormat(dateformat);
return format.format(sentdate);
}
/**
* 獲得郵件正文內容
*/
public String getBodyText() {
return bodytext.toString();
}
/**
* 解析郵件,把得到的郵件內容儲存到一個StringBuffer物件中,解析郵件 主要是根據MimeType型別的不同執行不同的操作,一步一步的解析
*/
public void getMailContent(Part part) throws Exception {
String contenttype = part.getContentType();
int nameindex = contenttype.indexOf("name");
boolean conname = false;
if (nameindex != -1)
conname = true;
System.out.println("CONTENTTYPE: " + contenttype);
if (part.isMimeType("text/plain") && !conname) {
// System.out.println("text/plain");
bodytext.append((String) part.getContent());
} else if (part.isMimeType("text/html") && !conname) {
// System.out.println("text/html");
bodytext.append((String) part.getContent());
} else if (part.isMimeType("multipart/*")) {
// System.out.println("multipart/*");
Multipart multipart = (Multipart) part.getContent();
int counts = multipart.getCount();
for (int i = 0; i < counts; i++) {
getMailContent(multipart.getBodyPart(i));
}
} else if (part.isMimeType("message/rfc822")) {
// System.out.println("message/rfc822");
getMailContent((Part) part.getContent());
} else {}
}
/**
* 判斷此郵件是否需要回執,如果需要回執返回"true",否則返回"false"
*/
public boolean getReplySign() throws MessagingException {
boolean replysign = false;
String needreply[] = mimeMessage
.getHeader("Disposition-Notification-To");
if (needreply != null) {
replysign = true;
}
return replysign;
}
/**
* 獲得此郵件的Message-ID
*/
public String getMessageId() throws MessagingException {
return mimeMessage.getMessageID();
}
/**
* 【判斷此郵件是否已讀,如果未讀返回返回false,反之返回true】
*/
public boolean isNew() throws MessagingException {
boolean isnew = false;
Flags flags = ((Message) mimeMessage).getFlags();
Flags.Flag[] flag = flags.getSystemFlags();
System.out.println("flags's length: " + flag.length);
for (int i = 0; i < flag.length; i++) {
if (flag[i] == Flags.Flag.SEEN) {
isnew = true;
System.out.println("seen Message.......");
break;
}
}
return isnew;
}
/**
* 判斷此郵件是否包含附件
*/
public boolean isContainAttach(Part part) throws Exception {
boolean attachflag = false;
String contentType = part.getContentType();
if (part.isMimeType("multipart/*")) {
Multipart mp = (Multipart) part.getContent();
for (int i = 0; i < mp.getCount(); i++) {
BodyPart mpart = mp.getBodyPart(i);
String disposition = mpart.getDisposition();
if ((disposition != null)
&& ((disposition.equals(Part.ATTACHMENT)) || (disposition
.equals(Part.INLINE))))
attachflag = true;
else if (mpart.isMimeType("multipart/*")) {
attachflag = isContainAttach((Part) mpart);
} else {
String contype = mpart.getContentType();
if (contype.toLowerCase().indexOf("application") != -1)
attachflag = true;
if (contype.toLowerCase().indexOf("name") != -1)
attachflag = true;
}
}
} else if (part.isMimeType("message/rfc822")) {
attachflag = isContainAttach((Part) part.getContent());
}
return attachflag;
}
/**
* 【儲存附件】
*/
public void saveAttachMent(Part part) throws Exception {
System.out.println("login......saveAttachMent................");
String fileName = "";
if (part.isMimeType("multipart/*")) {
Multipart mp = (Multipart) part.getContent();
for (int i = 0; i < mp.getCount(); i++) {
BodyPart mpart = mp.getBodyPart(i);
String disposition = mpart.getDisposition();
if ((disposition != null)
&& ((disposition.equals(Part.ATTACHMENT)) || (disposition
.equals(Part.INLINE)))) {
fileName = mpart.getFileName();
if (fileName.toLowerCase().indexOf("gb2312") != -1) {
fileName = MimeUtility.decodeText(fileName);
}
saveFile(fileName, mpart.getInputStream());
} else if (mpart.isMimeType("multipart/*")) {
saveAttachMent(mpart);
} else {
fileName = mpart.getFileName();
if ((fileName != null)
&& (fileName.toLowerCase().indexOf("GB2312") != -1)) {
fileName = MimeUtility.decodeText(fileName);
saveFile(fileName, mpart.getInputStream());
}
}
}
} else if (part.isMimeType("message/rfc822")) {
saveAttachMent((Part) part.getContent());
}
}
/**
* 【設定附件存放路徑】
*/
public void setAttachPath(String attachpath) {
this.saveAttachPath = attachpath;
}
/**
* 【設定日期顯示格式】
*/
public void setDateFormat(String format) throws Exception {
this.dateformat = format;
}
/**
* 【獲得附件存放路徑】
*/
public String getAttachPath() {
return saveAttachPath;
}
/**
* 【真正的儲存附件到指定目錄裡】
*/
private void saveFile(String fileName, InputStream in) throws Exception {
System.out.println("login.........saveFile...........");
String osName = System.getProperty("os.name");
String storedir = getAttachPath();
String separator = "";
if (osName == null)
osName = "";
if (osName.toLowerCase().indexOf("win") != -1) {
separator = "\\";
if (storedir == null || storedir.equals(""))
storedir = "c:\\tmp";
} else {
separator = "/";
storedir = "/tmp";
}
File storefile = new File(storedir + separator + fileName);
System.out.println("storefile's path: " + storefile.toString());
// for(int i=0;storefile.exists();i++){
// storefile = new File(storedir+separator+fileName+i);
// }
BufferedOutputStream bos = null;
BufferedInputStream bis = null;
try {
bos = new BufferedOutputStream(new FileOutputStream(storefile));
bis = new BufferedInputStream(in);
int c;
while ((c = bis.read()) != -1) {
bos.write(c);
bos.flush();
}
System.out.println("寫入成功。。。。。。。。");
} catch (Exception exception) {
exception.printStackTrace();
throw new Exception("檔案儲存失敗!");
} finally {
bos.close();
bis.close();
}
}
/**
* PraseMimeMessage類測試
*/
public static void main(String args[]) throws Exception {
Properties props = System.getProperties();
props.put("mail.smtp.host", "42.96.155.24");
props.put("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(props, null);
URLName urln = new URLName("pop3", "42.96.155.24", 110, null,
"qiang", "220316");
Store store = session.getStore(urln);
store.connect();
Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
Message message[] = folder.getMessages();
System.out.println("Messages's length: " + message.length);
ReciveOneMail pmm = null;
for (int i = 0; i < message.length; i++) {
System.out.println("======================");
pmm = new ReciveOneMail((MimeMessage) message[1]);
System.out.println("Message " + i + " subject: " + pmm.getSubject());
System.out.println("Message " + i + " sentdate: "+ pmm.getSentDate());
System.out.println("Message " + i + " replysign: "+ pmm.getReplySign());
System.out.println("Message " + i + " hasRead: " + pmm.isNew());
System.out.println("Message " + i + " containAttachment: "+ pmm.isContainAttach((Part) message[i]));
System.out.println("Message " + i + " form: " + pmm.getFrom());
System.out.println("Message " + i + " to: "+ pmm.getMailAddress("to"));
System.out.println("Message " + i + " cc: "+ pmm.getMailAddress("cc"));
System.out.println("Message " + i + " bcc: "+ pmm.getMailAddress("bcc"));
pmm.setDateFormat("yy年MM月dd日 HH:mm");
System.out.println("Message " + i + " sentdate: "+ pmm.getSentDate());
System.out.println("Message " + i + " Message-ID: "+ pmm.getMessageId());
// 獲得郵件內容===============
pmm.getMailContent((Part) message[1]);
System.out.println("Message " + 1 + " bodycontent: \r\n"
+ pmm.getBodyText());
pmm.setAttachPath("c:\\");
pmm.saveAttachMent((Part) message[i]); //注意下載是下載到本地磁碟的,而不是雲上面的伺服器的。
}
}
}
<strong><span style="font-size:14px;">
</span></strong>
這樣利於java傳送郵件或者接收郵件的功能就實現了,當然這主要是實現郵件系統中一些簡單的功能,如果大家想做更多或者更復雜的功能還是說程式碼有問題可以聯絡我
這是我QQ:208017534 。歡迎大家一起學習,一起進步。
相關推薦
使用 JavaMail 實現郵件傳送與收取
因為上一篇已經實現了James的配置,那接下來就是利用javaMail實現郵件的傳送和收取。 傳送郵件的程式碼: package com.ge.test; import java.util.Properties; import javax.activation.
使用JavaMail實現郵件傳送
電子郵件協議 電子郵件在網路中傳輸和網頁一樣需要遵從特定的協議,常用的電子郵件協議包括 SMTP,POP3,IMAP。其中郵件的建立和傳送只需要用到 SMTP協議,所以本文也只會涉及到SMTP協議。SMTP 是 Simple Mail Transfer Protocol
JavaMail實現郵件傳送功能
最近的專案要使用javamail進行郵件傳送,寫這篇部落格總結下 傳送簡單的郵件 在進行郵件傳送之前要引入javamail的Maven依賴 dependency> <groupId>javamail</groupId> &l
JavaMail實踐--實現郵件傳送
一、介紹 1、主要功能: 實現普通郵件的傳送 實現帶有HTML標籤的內容傳送 實現帶有附件的郵件傳送 2、API JavaMail mail.jar 1.4.5 JAF(版本 1.1.1) activation.jar 3、QQ郵箱的認證
利用JavaMail實現郵件的收取
昨天寫了一個利用JavaMail傳送郵件的示例,本著有始有終的原則。今天寫了一篇利用JavaMail收取郵件的示例。由於實力有限,程式碼寫的不周到的地方,請大家見亮。本人只是寫了一個簡單的例子,在實際專案開發中,還有很多東西需要讀者自己去斟酌和修改。廢話不多說,直接
SpringBoot2.0高階案例(03):整合 JavaMail ,實現非同步傳送郵件
本文原始碼 碼雲地址:知了一笑 https://gitee.com/cicadasmile/middle-ware-parent
Java實現郵件傳送(傳統方式)
package jl.bh.shy.utils; import java.util.Properties; import javax.mail.Address; import javax.mail.Session; import javax.mail.Transport; impor
JAVA在不基於XML配置檔案的情況下實現郵件傳送功能(郵箱轟炸)
今天要講的是如何用Java程式碼實現簡單郵件傳送和複雜郵件傳送的功能,這裡我使用的是QQ郵箱,你們也可以嘗試使用其他的郵箱哦~ 想實現郵件傳送功能首先郵箱賬號必須要開啟 SMTP 服務,在網頁登入郵箱後點擊設定→賬戶然後下拉,如圖 &nb
Log4j2配置SMTP郵件實現郵件傳送
大綱: 官網配置資訊 實際使用 一、官網配置資訊 官網SMTPAppender配置 <?xml version="1.0" encoding="UTF-8"?> <Configuration status="
Java 基於JavaMail的郵件傳送
http://blog.csdn.net/xietansheng/article/details/51673073 http://blog.csdn.net/xietansheng/article/details/51722660 電子郵件的應用非常廣泛,例如在某網站註冊了
使用java實現郵件傳送功能(已封裝)
現如今,用郵件傳送訊息的人越來越少,可是並不影響我們學習java。 以下給大家帶來自己寫的封裝類,可以直接使用。 首先,需要jar包: 普通javaweb專案:mail.jar maven管理專案: <dependency> &
SpringBoot實現郵件傳送及其工具類封裝
SpringBoot郵件傳送工具類 環境:JDK8、IDEA 依賴:SpringBoot-1.5.10、spring-boot-starter-mail、spring-boot-starter-thymeleaf、spring-boot-start
Java實現郵件傳送(很簡單)
Java實現郵件傳送,需要指定郵件伺服器,和自己的郵箱賬號和密碼,謹記 自己的郵箱必須得到到客戶端授權碼,尤其是新開的郵箱,具體看程式碼,包括附件傳送 public class EmailUtils { private static String from = ""; //郵箱賬號 p
SpringBoot實現郵件傳送
開發工具:IDEA、Gradle 1.首先需要匯入相關jar包,在build.gradle內加入座標: implementation('org.springframework.boot:spring-boot-starter-mail') 2.在application.
SpringBoot快速實現郵件傳送功能-百測百靈
2018年11月10日星期六 隨筆 筆記 springboot整合郵件傳送 一、匯入依賴包 org.springframework.boot spring-boot-starter-mail 二、開啟服務(一個即可) 三、傳送簡訊:配置郵件客戶端到1069
9、ssm整合activeMQ、JAVAMail實現郵件非同步註冊和登陸功能
1、前言 註冊某個網站的時候,往往要你用郵箱註冊,傳送郵件的功能很簡單,但是在點選註冊傳送郵件的時候,總不能等郵件傳送完畢之後才能跳轉頁面吧?或者說,我們應該將發郵件的這個過程異步出去,讓他自己慢慢去發郵件,我的主執行緒直接跳轉到其他頁面,等郵件到了,使用者點
springMVC實現郵件傳送
MailUtil中的Constants是作者自定義的一個工具類,該類的主要作用是從配置檔案中獲取發件人資訊,包括髮件人伺服器、發件人郵箱、發件人賬戶和密碼等。 DataUtil.objToStr(String str)方法的主要作用是判斷str是否為null或空字串,若是,則返回空
C#實現郵件傳送的功能
1.實現原理: 微軟封裝好的MailMessage類:主要處理髮送郵件的內容(如:收發人地址、標題、主體、圖片等等) 微軟封裝好的SmtpClient類:主要處理用smtp方式傳送此郵件的配置資訊(如:郵件伺服器、傳送埠號、驗證方式等等) SmtpClient主要進行了三層的封裝:Socket
基於JavaMail的郵件傳送
通過javamail 實現傳送郵件。注意:伺服器有些埠是沒有開放的 需要去開放埠。 有些郵箱是需要開啟對應授權服務的。1.maven依賴:<!-- https://mvnrepository.com/artifact/javax.mail/javax.mail-api
Java+Selenium3框架設計篇5-如何實現郵件傳送測試報告
本篇繼續回答網友的問題,這個主題是如何通過郵件傳送測試報告。通過郵件傳送測試報告,這個很重要,也很有必要。不管你使用什麼自動化測試框架,都建議添加發送測試報告的功能。先來設計我們的傳送郵件的場景:假如我們測試報告是固定的名稱,放在固定的路徑下。 1.下載jav