java jmail_java jmail
發(fā)送郵件的主要步驟
1.設(shè)置發(fā)送的協(xié)議,也就是設(shè)置smtp和驗(yàn)證機(jī)制(一般協(xié)議都是通過Properties鍵值形式來設(shè)置)
2.發(fā)送郵件需要的幾個(gè)重要類Session ,Message,Transport
3.Session對象可以通過Session的getInstance(java.util.Properties props)
或getInstance(java.util.Properties props, Authenticator authenticator) ?Authenticator 可以理解為密碼和用戶名的驗(yàn)證器
或getDefaultInstance(java.util.Properties props)
或getDefaultInstance(java.util.Properties props, Authenticator authenticator)
4.郵件的一些重要內(nèi)容都是通過Message設(shè)置,比例內(nèi)容,主題,接收人..
接收人可以通過Message的setRecipients(Message.RecipientType type,Address address)
Message.RecipientType 有三個(gè)重要屬性 1.BCC(密送),2.CC(抄送) ,3.TO(收件人)
5.可以通過Transport.send(Message msg)發(fā)送郵件
一般發(fā)送簡單的郵件上面幾個(gè)步驟就可以實(shí)現(xiàn)了,但是要發(fā)送一封復(fù)雜的郵件(有附件和文本,圖片)還需要以下步驟
A.發(fā)送復(fù)雜郵件需要這個(gè)兩個(gè)重要類MimeBodyPart 和 MimeMultipart
先要搞清楚文本和圖片的關(guān)系是related,而文本和圖片再加上附件的關(guān)系就是mixed
B.文本用一個(gè)MimeBodyPart對象保存
C.圖片也是用一個(gè)MimeBodyPart對象保存
D.用一個(gè)MimeMultipart A對象來保存,保存文本的MimeBodyPart對象和保存圖片的MimeBodyPart對象
這個(gè)MimeMultipart對象 通過構(gòu)造函數(shù) new MimeMultipart("related")獲取
E.附件也是用一個(gè)MimeBodyPart C對象保存
F.用一個(gè)總MimeBodyPart B對象來保存MimeMultipart A對象
G.還得用一個(gè)總的MimeMultipart all對象來保存MimeBodyPart C對象和MimeBodyPart B對象
這個(gè)all對象通過構(gòu)造函數(shù) new MimeMultipart("mixed")獲取
H.最后用Message.setContent(Multipart mp)方法保存總的郵件
I.可以通過Transport.send(Message msg)發(fā)送郵件
現(xiàn)在發(fā)送一份簡單的郵件,郵件內(nèi)容只含有一些文字
Code:
package com.michael.email;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
// @author Michael.Wu
//JavaMail 發(fā)送郵件
public class JavaEmail {
public static void main(String[] args) throws AddressException, MessagingException {
Properties properties = new Properties();
properties.setProperty("mail.transport.protocol", "smtp");//發(fā)送郵件協(xié)議
properties.setProperty("mail.smtp.auth", "true");//需要驗(yàn)證
// properties.setProperty("mail.debug", "true");//設(shè)置debug模式 后臺輸出郵件發(fā)送的過程
Session session = Session.getInstance(properties);
session.setDebug(true);//debug模式
//郵件信息
Message messgae = new MimeMessage(session);
messgae.setFrom(new InternetAddress("whyao@sina.cn"));//設(shè)置發(fā)送人
messgae.setText("what's up man");//設(shè)置郵件內(nèi)容
messgae.setSubject("哥們該吃飯了");//設(shè)置郵件主題
//發(fā)送郵件
Transport tran = session.getTransport();
// tran.connect("smtp.sohu.com", 25, "wuhuiyao@sohu.com", "xxxx");//連接到新浪郵箱服務(wù)器
tran.connect("smtp.sina.com", 25, "whyao@sina.cn", "xxxxxxx");//連接到新浪郵箱服務(wù)器
// tran.connect("smtp.qq.com", 25, "Michael8@qq.vip.com", "xxxx");//連接到QQ郵箱服務(wù)器
tran.sendMessage(messgae, new Address[]{ new InternetAddress("Michael8@qq.vip.com")});//設(shè)置郵件接收人
tran.close();
}
}
====================================================================================
把郵件的用戶名和密碼改為你們自己的,就可以發(fā)送郵件了。有一個(gè)地方得注意,設(shè)置發(fā)送人和和你當(dāng)前 ? ? ? 發(fā)送郵件用的賬號要相同,不然會報(bào)異常或會收不到郵件。以前發(fā)送人和發(fā)送郵件的賬號是可以不同的現(xiàn) ? ? ? 在就不行,可能是郵箱服務(wù)商不允許的原因吧。
接下來發(fā)送一份復(fù)雜的郵件(含有附件和圖片,文本)
Code:
package com.michael.email;
import java.io.File;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.Message.RecipientType;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
//@author Michael.wu
// 發(fā)送復(fù)雜的郵件(文本內(nèi)容,附件,圖片)
public class JavaEmail3 {
public static void main(String[] args) throws MessagingException {
//發(fā)送郵件的協(xié)議
Properties properties = new Properties();
properties.setProperty("mail.smtp.auth","true");//設(shè)置驗(yàn)證機(jī)制
properties.setProperty("mail.transport.protocol","smtp");//發(fā)送郵件協(xié)議
properties.setProperty("mail.smtp.host","smtp.sina.com");//設(shè)置郵箱服務(wù)器地址
properties.setProperty("mail.smtp.port","25");
Session session = Session.getInstance(properties,new MyAuthenticator());
session.setDebug(true);
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("whyao@sina.cn"));
message.setSubject("一封復(fù)雜的郵件");
message.setRecipients(RecipientType.TO,InternetAddress.parse("michael8@vip.qq.com"));//接收人
message.setRecipients(RecipientType.CC,InternetAddress.parse("1348800595@qq.com"));//抄送人
message.setRecipients(RecipientType.BCC,InternetAddress.parse("1348800595@qq.com"));//密送人
MimeBodyPart bodyPartAttch = createAttachMent("C:\\Users\\Administrator\\Desktop\\mail.jar");//附件
MimeBodyPart bodyPartContentAndPic = createContentAndPic("I just want to Fuck","C:\\Users\\Administrator\\Desktop\\0.jpg");//文本內(nèi)容
MimeMultipart mimeMuti = new MimeMultipart("mixed");
mimeMuti.addBodyPart(bodyPartAttch);
mimeMuti.addBodyPart(bodyPartContentAndPic);
message.setContent(mimeMuti);
message.saveChanges();
//message.setContent("Michael", "text/html;charset=gbk");
Transport.send(message);
}
//創(chuàng)建附件
public static MimeBodyPart createAttachMent(String path) throws MessagingException{
MimeBodyPart mimeBodyPart = new MimeBodyPart();
FileDataSource dataSource = new FileDataSource( new File(path));
mimeBodyPart.setDataHandler(new DataHandler(dataSource));
mimeBodyPart.setFileName(dataSource.getName());
return mimeBodyPart;
}
//創(chuàng)建文本和圖片
public static MimeBodyPart createContentAndPic(String content,String path) throws MessagingException{
MimeMultipart mimeMutiPart = new MimeMultipart("related");
//圖片
MimeBodyPart picBodyPart = new MimeBodyPart();
FileDataSource fileDataSource = new FileDataSource( new File(path));
picBodyPart.setDataHandler(new DataHandler(fileDataSource));
picBodyPart.setFileName(fileDataSource.getName());
mimeMutiPart.addBodyPart(picBodyPart);
//文本
MimeBodyPart contentBodyPart = new MimeBodyPart();
contentBodyPart.setContent(content,"text/html;charset=gbk");
mimeMutiPart.addBodyPart(contentBodyPart);
//圖片和文本結(jié)合
MimeBodyPart allBodyPart = new MimeBodyPart();
allBodyPart.setContent(mimeMutiPart);
return allBodyPart;
}
}
Code:
package com.michael.email;
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
public class MyAuthenticator extends Authenticator {
private static final String userName = "whyao@sina.cn";
private static final String passWord = "xxxxxxx";
// * @author Michael.wu
//* 密碼和用戶的驗(yàn)證
public MyAuthenticator() {
super();
}
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(userName, passWord);
}
}
//注意上面通過Main方法發(fā)送出去的郵件,圖片會以附件的形式顯示。如果你想把圖片當(dāng)做背景圖或者是想在文本中插一張圖片,還要把上面的createContentAndPic方法改改。
code:
//創(chuàng)建文本和圖片
public static MimeBodyPart createContentAndPic(String content,String path) throws MessagingException, UnsupportedEncodingException{
MimeMultipart mimeMutiPart = new MimeMultipart("related");
//圖片
MimeBodyPart picBodyPart = new MimeBodyPart();
FileDataSource fileDataSource = new FileDataSource( new File(path));
picBodyPart.setDataHandler(new DataHandler(fileDataSource));
picBodyPart.setFileName(MimeUtility.encodeText("米克個(gè)人照"));//解決中文亂碼問題
picBodyPart.setHeader("Content-Location", "http://www.michael.com/mike.jpg");
//http://www.michael.com/mike.jpg這個(gè)路徑是后面文本圖片的路徑
//文本
MimeBodyPart contentBodyPart = new MimeBodyPart();
//img的src要和setHeader中設(shè)置的值一樣
contentBodyPart.setContent(content+"","text/html;charset=gbk");
mimeMutiPart.addBodyPart(contentBodyPart);
mimeMutiPart.addBodyPart(picBodyPart);
//圖片和文本結(jié)合
MimeBodyPart allBodyPart = new MimeBodyPart();
allBodyPart.setContent(mimeMutiPart);
return allBodyPart;
}
//通過上面的程序發(fā)送出的郵件,在Foxmail中打開,圖片會在文本中正常顯示。而在QQ郵箱 新浪郵箱 打開這封郵件,圖片會以附件的形式顯示,在文本中顯示不出來。這到底是什么原因,或是還要設(shè)置什么。我還沒有弄明白。希望看到這篇博客的網(wǎng)友,知道是什么原因的,還得請你們也告訴我一聲,謝謝。
總結(jié)
以上是生活随笔為你收集整理的java jmail_java jmail的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php面向对象封装mysql_php m
- 下一篇: centos7配置 console口_玩