自己通过学习多人的代码,并整理了一个简单,调用方便的通过javaMail发送邮件。只需填写发件邮箱地址,密码;收件人地址,附件,选择是否保存,设置自己发送邮件时的昵称就ok了。代码自动匹配设置smtp服务地址和端口。
发送邮件需要邮箱地址和密码,开启POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务。各大邮箱使用外部登录验证的方式不一样,有些需要使用授权码登录链接,有些只需要邮箱登录密码,这个得根据你使用的邮箱服务平台的规定了。这里我收集了下面的邮箱smtp服务地址和端口,【QQ、Foxmail、139、126、163、Google(gmail)、Exchange、Outlook、sina.cn、sina.com】这些足以够用了吧!不多说,看代码。
使用方法
public static void main(String[] args) throws Exception {
List<String> map = new ArrayList<>();
map.add("123456@qq.com");
map.add("456789@qq.com");
map.add("hahaha123@gmail.com");
new SendEmail("hahaha123@gmail.com", "密码")
.setDebug(true)
.setMyNickName("这是我的昵称")
.addFile("C:/Users/25171/Pictures/timg.jpg")//添加附件
.addFile("C:/Users/25171/Desktop/QQ图片20180317192741.jpg")
// .addFile(List<String> list)//添加附件集合
.setSaveEmail("C:/User/2517/Desktop/name.eml")//保存邮件
.addRecipientT0("251716795@qq.com")//添加收件人地址
// .addRecipientT0(map)//添加收件人地址集合
// .addRecipientCC(map)//添加密送收件人地址
// .addRecipientBCC(map)//添加抄送收件人地址
.createMail("标题", "发送的内容", "text/html;charset=utf-8")
.sendEmail(new SendEmail.Callback() {
@Override
public void success(String s) {
System.out.println(s);//发送完成后回调接口
}
@Override
public void error(String s, Exception e) {
System.out.println(s);
e.printStackTrace();//异常失败的回调接口
}
});
}
主体工具代码
package com.sai.mail;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.util.*;
public class SendEmail {
public interface Callback {
void success(String s);
void error(String s, Exception e);
}
private Callback callback; //信息回调接口
private Properties properties;//系统属性对象
private String mailAccount; //发送邮箱地址
private String mailPassword; //验证密码
private Session session; //邮件会话对象
private String myNickName; //昵称,发送时自己的昵称
private boolean debug = false;//debug模式
private boolean isSaveEmail = false;
private String pathName = "exc.eml";//邮件保存时的
public SendEmail(String mailAccount, String mailPassword) {
this.mailAccount = mailAccount;
this.mailPassword = mailPassword;
}
public SendEmail setSaveEmail(String pathName) {
isSaveEmail = true;
this.pathName = pathName;
return this;
}