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);
测试过均有效,但是发送相同附件可能会被网易邮箱认为发送的是垃圾邮件,被系统退回来