jar包下載下傳位址:
https://repo1.maven.org/maven2/javax/mail/mail/1.5.0-b01/mail-1.5.0-b01.jar
https://www-eu.apache.org/dist//commons/email/binaries/commons-email-1.5-bin.zip
以下執行個體均為QQ郵箱或網易郵箱測試,不同類型郵箱發送者參數不同,一般開啟服務的時候回有提示,注意檢視
發送者QQ郵箱需要設定:
1、打開QQ郵箱-->賬号-->賬戶安全,開啟pop3/SMTP服務
2、開啟以後,點選上圖生成授權碼的地方生成授權碼,發送的時候需要使用它作為密碼
3、在QQ郵箱幫助中心可繼續檢視服務的其他參數,如下兩圖中的發送郵件伺服器smtp.qq.com、發送端口587或者465等都是需要的參數:
郵件發送測試背景代碼:
@Test
public void testCommonsEmail() throws EmailException {
//1、定義一個附件并設定附件屬性
//1.1檔案
File file = new File("E:/大二程式代碼集/java/eclipse/Mail/src/attch.txt");
//1.2附件
EmailAttachment attach = new EmailAttachment();
attach.setPath(file.getAbsolutePath());
attach.setDisposition(EmailAttachment.ATTACHMENT);
attach.setDescription("我隻是一個附件描述");//描述
attach.setName(file.getName());//附件名
//2、定義一個帶附件的郵件并設定相關屬性 并将附件挂在郵件中
MultiPartEmail mail = new MultiPartEmail();
mail.setHostName("smtp.qq.com");//發送郵件的伺服器
mail.setSmtpPort(587);//發送郵件的伺服器端口号
mail.setAuthenticator(new DefaultAuthenticator("[email protected]","授權碼"));//使用者名為發送者郵箱号,密碼為授權碼,注意在QQ郵箱設定網頁擷取
mail.setSSLOnConnect(true);//使用SSL
mail.setFrom("[email protected]");//發送者郵箱号
mail.setSubject("郵件主題");
mail.setMsg("郵件正文");
mail.addTo("[email protected]");//接收者郵箱号
mail.attach(attach);//将附件挂上郵件中
//3、發送
mail.send();
}
結果:
打開手機檢視:
163郵箱同樣需要開啟服務:
工具封裝示例,我認為這個類我寫得很不好,懶得改就這樣吧:
package mail;
import java.io.File;
import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.MultiPartEmail;
import org.apache.commons.mail.SimpleEmail;
/**
* 郵件發送工具
* @author LuoPiao
*
*/
public class EmailUtil {
//發送者郵箱
private String userName;
//郵箱授權碼
private String password;
//發送郵件的伺服器
private String smtp;
public static final String SMTPQQ="smtp.qq.com";
public static final String SMTP163="smtp.163.com";
//伺服器端口号
private Integer port=null;
public static final Integer PORTQQ1=587;
public static final Integer PORTQQ2=465;
//字元編碼集的設定
private String encode;//不設定預設為utf-8
/**
* 不提供端口号
* @param userName發件人
* @param password授權碼
* @param smtp發送郵件伺服器
*/
public EmailUtil(String userName, String password, String smtp) {
this.userName = userName;
this.password = password;
this.smtp = smtp;
this.encode="utf-8";
}
/**
* 初始化發件環境
* @param userName發件人
* @param password授權碼
* @param smtp發送郵件伺服器
* @param encode字元編碼集
*/
public EmailUtil(String userName, String password, String smtp,String encode) {
this.userName = userName;
this.password = password;
this.smtp = smtp;
this.encode=encode;
}
/**
* 初始化發件環境
* @param userName發件人
* @param password授權碼
* @param smtp發件伺服器
* @param port端口号
*/
public EmailUtil(String userName, String password, String smtp, Integer port) {
this.userName = userName;
this.password = password;
this.smtp = smtp;
this.port = port;
this.encode="utf-8";
}
/**
* 初始化發件環境
* @param userName發件人
* @param password授權碼
* @param smtp發件伺服器
* @param port伺服器端口号
* @param encode字元編碼集
*/
public EmailUtil(String userName, String password, String smtp, Integer port, String encode) {
this.userName = userName;
this.password = password;
this.smtp = smtp;
this.port = port;
this.encode = encode;
}
/**
* 發送簡單郵件
* @param message正文
* @param subject主題
* @param ToEmail收件人
* @return
*/
public boolean sendSimpleEmail(String message,String subject,String ToEmail) {
SimpleEmail email=new SimpleEmail();
try {
email.setFrom(userName);
email.setAuthentication(userName, password);
email.setHostName(smtp);
email.setCharset(encode);
email.setHostName(smtp);
if(port!=null) {
email.setSmtpPort(port);
}
email.setMsg(message);
email.setSubject(subject);
email.addTo(ToEmail);
email.send();
return true;
} catch (EmailException e) {
return false;
}
}
/**
* 發送帶附件郵件
* @param message
* @param subject
* @param ToEmail
* @param files 可為0到多
* @return
*/
public boolean sendEmailAttach(String message,String subject,String ToEmail,File...files) {
MultiPartEmail email = new MultiPartEmail();
for (int i = 0; i < files.length; i++) {
EmailAttachment attach = new EmailAttachment();//建立附件
attach.setPath(files[i].getAbsolutePath());//附件位址
attach.setDisposition(EmailAttachment.ATTACHMENT);
attach.setDescription(files[i].getName());//附件描述
attach.setName(files[i].getName());//附件名稱
try {
email.attach(attach);//添加附件到郵件,可添加多個
} catch (EmailException e) {
return false;
}
}
try {
email.setFrom(userName);
email.setAuthentication(userName, password);
email.setHostName(smtp);
email.setCharset(encode);
email.setHostName(smtp);
if(port!=null) {
email.setSmtpPort(port);
}
email.setMsg(message);
email.setSubject(subject);
email.addTo(ToEmail);
email.send();
return true;
} catch (EmailException e) {
return false;
}
}
}
測試代碼:
EmailUtil eu=new EmailUtil("[email protected]", "xxx", EmailUtil.SMTPQQ,EmailUtil.PORTQQ1);
Boolean flag=eu.sendSimpleEmail("測試ing", "主題", "[email protected]");
EmailUtil eu1=new EmailUtil("[email protected]", "xxxx", EmailUtil.SMTP163);
Boolean flag1=eu1.sendEmailAttach("測試ing1", "主題1", "[email protected]");
System.out.println(flag1);
EmailUtil eu2=new EmailUtil("[email protected]", "xxxx", EmailUtil.SMTPQQ);
File file = new File("E:/大二程式代碼集/java/eclipse/Mail/src/attch.txt");
Boolean flag2=eu2.sendEmailAttach("測試ing3", "主題2", "[email protected]",file,file,file);
System.out.println(flag2);
測試過均有效,但是發送相同附件可能會被網易郵箱認為發送的是垃圾郵件,被系統退回來