Java Web stmp發(fā)送帶附件郵件(附SSL版)
本文實(shí)例為大家分享了Java Web stmp發(fā)送帶附件郵件的具體代碼,供大家參考,具體內(nèi)容如下
public class MailFileSendUtils {
private Properties props; //系統(tǒng)屬性
private Session session; //郵件會(huì)話對(duì)象
private MimeMessage mimeMsg; //MIME郵件對(duì)象
private Multipart mp; //Multipart對(duì)象,郵件內(nèi)容,標(biāo)題,附件等內(nèi)容均添加到其中后再生成MimeMessage對(duì)象
/**
* Constructor
* @param
*/
public MailFileSendUtils(){
props = System.getProperties();
props.put("mail.smtp.auth","false");
session = Session.getDefaultInstance(props, null);
session.setDebug(true);
mimeMsg = new MimeMessage(session);
mp = new MimeMultipart();
}
/**
* Constructor
* @param smtp 郵件發(fā)送服務(wù)器
*/
public MailFileSendUtils(String smtp, String username, String password){
props = System.getProperties();
props.put("mail.smtp.auth","true");
props.put("mail.smtp.host", smtp);
props.put("username", username);
props.put("password", password);
session = Session.getDefaultInstance(props, null);
session.setDebug(true);
mimeMsg = new MimeMessage(session);
mp = new MimeMultipart();
}
/**
* 發(fā)送郵件
*/
public boolean sendMail(String from, String[] to, String subject, String content, String filename) {
try {
//設(shè)置發(fā)信人
mimeMsg.setFrom(new InternetAddress(from));
//設(shè)置接收人
for (int i = 0; i < to.length; i++) {
mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to[i]));
}
//設(shè)置抄送人
// for (int i = 0; i < copyto.length; i++) {
// mimeMsg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(copyto[i]));
// }
//設(shè)置主題
mimeMsg.setSubject(subject);
//設(shè)置正文
BodyPart bp = new MimeBodyPart();
bp.setContent(content, "text/html;charset=utf-8");
mp.addBodyPart(bp);
//設(shè)置附件
bp = new MimeBodyPart();
FileDataSource fileds = new FileDataSource(filename);
bp.setDataHandler(new DataHandler(fileds));
bp.setFileName(MimeUtility.encodeText(fileds.getName(),"UTF-8","B"));
mp.addBodyPart(bp);
mimeMsg.setContent(mp);
mimeMsg.saveChanges();
//發(fā)送郵件
if(props.get("mail.smtp.auth").equals("true")){
Transport transport = session.getTransport("smtp");
transport.connect((String)props.get("mail.smtp.host"), (String)props.get("username"), (String)props.get("password"));
transport.sendMessage(mimeMsg, mimeMsg.getRecipients(Message.RecipientType.TO));
// transport.sendMessage(mimeMsg, mimeMsg.getRecipients(Message.RecipientType.CC));
transport.close();
}else{
Transport.send(mimeMsg);
}
System.out.println("郵件發(fā)送成功");
} catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return true;
}
// public void toSendMail(SendMailParam sendMailParam){
// MailFileSendUtils email = new MailFileSendUtils(sendMailParam.getSmtp(), sendMailParam.getUsername(), sendMailParam.getPassword());
// email.sendMail(sendMailParam.getFrom(), sendMailParam.getTo(), sendMailParam.getSubject(), sendMailParam.getContent(), sendMailParam.getFilepath());
// }
public static void main(String[] args) {
String smtp = "smtp.exmail.qq.com";
String username = "發(fā)送的郵箱賬號(hào)";
String password = "發(fā)送的郵箱密碼";
String from = "發(fā)送的郵箱";
String[] to = {"接收郵件的郵箱"};
// String[] copyto = {"抄送的郵箱"};
String subject = "主題6";
String content = "郵件內(nèi)容6";
String filename = "附件的文件";
MailFileSendUtils email = new MailFileSendUtils(smtp, username, password);
// email.sendMail(from, to, copyto, subject, content, filename);
email.sendMail(from, to, subject, content, filename);
}
}
(附:SSL版)
public class MailFileSendUtils {
private Properties props; //系統(tǒng)屬性
private Session session; //郵件會(huì)話對(duì)象
private MimeMessage mimeMsg; //MIME郵件對(duì)象
private Multipart mp; //Multipart對(duì)象,郵件內(nèi)容,標(biāo)題,附件等內(nèi)容均添加到其中后再生成MimeMessage對(duì)象
/**
* Constructor
* @param
*/
public MailFileSendUtils(){
props = System.getProperties();
props.put("mail.smtp.auth","false");
session = Session.getDefaultInstance(props, null);
session.setDebug(true);
mimeMsg = new MimeMessage(session);
mp = new MimeMultipart();
}
/**
* Constructor
* @param smtp 郵件發(fā)送服務(wù)器
*/
public MailFileSendUtils(String smtp,
String username,
String password){
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
props = System.getProperties();
MailSSLSocketFactory sf = null;
try {
sf = new MailSSLSocketFactory();
} catch (GeneralSecurityException e) {
}
sf.setTrustAllHosts(true);
props.put("mail.smtp.auth","true");
props.put("mail.smtp.host", smtp);
props.put("mail.smtp.socketFactory.class", SSL_FACTORY);
props.put("mail.smtp.socketFactory.fallback", "false");
props.put("mail.smtp.ssl.enable", "true");
props.put("mail.smtp.port", "465");
props.put("mail.smtp.ssl.socketFactory", sf);
// props.put("username", username);
// props.put("password", password);
session = Session.getInstance(props, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
session.setDebug(true);
mimeMsg = new MimeMessage(session);
mp = new MimeMultipart();
}
/**
* 發(fā)送郵件
*/
public boolean sendMail(String from,
String[] to,
String subject,
String content,
String filename) {
try {
//設(shè)置發(fā)信人
mimeMsg.setFrom(new InternetAddress(from));
//設(shè)置接收人
for (int i = 0; i < to.length; i++) {
mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to[i]));
}
//設(shè)置抄送人
// for (int i = 0; i < copyto.length; i++) {
// mimeMsg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(copyto[i]));
// }
//設(shè)置主題
mimeMsg.setSubject(subject);
//設(shè)置正文
BodyPart bp = new MimeBodyPart();
bp.setContent(content, "text/html;charset=utf-8");
mp.addBodyPart(bp);
//設(shè)置附件
bp = new MimeBodyPart();
FileDataSource fileds = new FileDataSource(filename);
bp.setDataHandler(new DataHandler(fileds));
bp.setFileName(MimeUtility.encodeText(fileds.getName(),"UTF-8","B"));
mp.addBodyPart(bp);
mimeMsg.setContent(mp);
mimeMsg.saveChanges();
//發(fā)送郵件
if(props.get("mail.smtp.auth").equals("true")){
Transport transport = session.getTransport("smtp");
transport.connect((String)props.get("mail.smtp.host"), (String)props.get("username"), (String)props.get("password"));
transport.sendMessage(mimeMsg, mimeMsg.getRecipients(Message.RecipientType.TO));
// transport.sendMessage(mimeMsg, mimeMsg.getRecipients(Message.RecipientType.CC));
transport.close();
}else{
Transport.send(mimeMsg);
}
System.out.println("郵件發(fā)送成功");
} catch (MessagingException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return true;
}
public boolean toSendMail(SendMailParam sendMailParam){
MailFileSendUtils email = new MailFileSendUtils(
sendMailParam.getSmtp(),
sendMailParam.getUsername(),
sendMailParam.getPassword());
email.sendMail(
sendMailParam.getFrom(),
sendMailParam.getTo(),
sendMailParam.getSubject(),
sendMailParam.getContent(),
sendMailParam.getFilepath());
return true;
}
// public static void main(String[] args) {
// String smtp = "smtp.mxhichina.com";
// String username = "郵箱";
// String password = "郵箱密碼";
// String from = "誰(shuí)去發(fā)";
// String[] to = {"發(fā)給誰(shuí)"};
//// String[] copyto = {"抄送的郵箱"};
// String subject = "huawei";
// String content = "郵件內(nèi)容6666";
// String filename = "gdt-3583118353-ad-20170823.xls";
// MailFileSendUtils email = new MailFileSendUtils(smtp, username, password);
//// email.sendMail(from, to, copyto, subject, content, filename);
// email.sendMail(from, to, subject, content, filename);
// }
}
在項(xiàng)目中使用這套工具,main方法我注釋掉,然后使用toSendMail(SendMailParam sendMailParam)。
這里定義的SendMailParam 為:
public class SendMailParam {
private String smtp;
private String username;
private String password;
private String from;//發(fā)送人
private String[] to;//接收人
// String[] copyto = {"909891736@qq.com"};
private String subject;//郵件主題
private String content;//郵件內(nèi)容
private String filepath;//文件拿到的路徑
public SendMailParam(){
this.smtp = "smtp.exmail.qq.com";//例子
this.username = "郵箱賬號(hào)";
this.password = "郵箱密碼";
this.from = "郵箱";
this.subject = "";
this.content = "";
this.filepath = "";
}
public String getSmtp() {
return smtp;
}
public void setSmtp(String smtp) {
this.smtp = smtp;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
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 = to;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getFilepath() {
return filepath;
}
public void setFilepath(String filepath) {
this.filepath = filepath;
}
}
maven依賴包
<dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.7</version> </dependency>
gradle依賴包
compile "javax.mail:mail:1.4.7"
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java中RSA加密解密的實(shí)現(xiàn)方法分析
這篇文章主要介紹了Java中RSA加密解密的實(shí)現(xiàn)方法,結(jié)合具體實(shí)例形式分析了java實(shí)現(xiàn)RSA加密解密算法的具體步驟與相關(guān)操作技巧,并附帶了關(guān)于RSA算法密鑰長(zhǎng)度/密文長(zhǎng)度/明文長(zhǎng)度的參考說(shuō)明,需要的朋友可以參考下2017-07-07
詳解在Spring-Boot中實(shí)現(xiàn)通用Auth認(rèn)證的幾種方式
這篇文章主要介紹了詳解在Spring-Boot中實(shí)現(xiàn)通用Auth認(rèn)證的幾種方式,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-07
SpringMVC多線程下無(wú)法獲取請(qǐng)求的原因和解決方法
從問(wèn)題出發(fā),逐步講透在SpringMVC中使用RequestContextHolder對(duì)象在多線程情況下無(wú)法獲取請(qǐng)求的真實(shí)原因,本文將和大家一起深入剖析SpringMVC多線程下無(wú)法獲取請(qǐng)求的原因和解決,需要的朋友可以參考下2024-04-04
Springboot為什么加載不上application.yml的配置文件
這篇文章主要介紹了Springboot為什么加載不上application.yml的配置文件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
SpringBoot 如何自定義請(qǐng)求參數(shù)校驗(yàn)
這篇文章主要介紹了SpringBoot 如何自定義請(qǐng)求參數(shù)校驗(yàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
如何將DeepSeek 集成到 Java 的 Spring Boot&
本文介紹了如何將DeepSeek集成到Java的SpringBoot項(xiàng)目中,包括準(zhǔn)備工作、集成步驟和示例說(shuō)明,感興趣的朋友一起看看吧2025-02-02
idea快速實(shí)現(xiàn)將SpringBoot項(xiàng)目打包Docker鏡像并部署
本文主要介紹了idea快速實(shí)現(xiàn)將SpringBoot項(xiàng)目打包Docker鏡像并部署,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04

