Javamail简单的发送邮件附件实例
1.自定义工具类
无聊学了一下简单的附件发送,下面是我自己包装的工具类,方便使用。
有需要的可以的直接用~~~,下面写的挺细,希望对有需要的有所帮助,本人菜鸟一枚,大神勿喷!!
package com.hy;
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.Map;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
public class Multipart_Test {
static String send = null;// 发送方邮箱
static String sender = null;// 发件人
static String pwd = null;// 密码
static String receive = null;// 接收方邮箱
static String receiver = null;// 收件人
static String port = null;// 服务器端口
static String server = null;// 邮件服务器
public Multipart_Test() {
}
public Multipart_Test(String send, String sender, String pwd, String port, String server, Map<String, String> map,
String subject, String attachmentPath, String text) {
// 配置服务器属性
Properties properties = System.getProperties();
// properties.put("mail.debug", "true");//开启debug调试
properties.put("mail.transport.protocol", "smtp");// 发送邮件协议名称
properties.put("mail.smtp.host", server);// 发送邮件服务器
properties.put("mail.smtp.auth", "true");// 是否开启密码验证
properties.put("mail.smtp.port", port);// 邮箱端口
properties.put("mail.smtp.starttls.enable", "true");// starttls提供一种方式将纯文本连接升级为加密连接(TLS或SSL)
// 获取邮箱服务器配置环境信息
System.out.println("尝试连接--------------");
Session session = Session.getDefaultInstance(properties, new Authenticator() {
// 设置用户信息 ,在发送邮件时会调用验证
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(send, pwd);
}
});
System.out.println("连接到邮箱");
// Session session = Session.getDefaultInstance(properties);
try {
// 创建信息对象
MimeMessage message = new MimeMessage(session);
// 创建发送方地址
InternetAddress fAddress = new InternetAddress(send, sender, "utf-8");
message.setFrom(fAddress);
//设置接收方及接收类型(收件人:to,抄送:cc,暗送:bcc);
InternetAddress[] tAddresses = new InternetAddress[map.size()];
int i = 0;
for (String K : map.keySet()) {
InternetAddress to = new InternetAddress(K, map.get(K), "utf-8");
tAddresses[i++] = to;
}
message.setRecipients(Message.RecipientType.BCC, tAddresses);
//设置发送日期
message.setSentDate(new Date());
//设置回复
message.reply(true);
//设置主题
message.setSubject(subject);
// 设置发送的信息
// 创建附件
// 整封邮件的Mime消息体
Multipart mp = new MimeMultipart();
// 附件2
MimeBodyPart mbp = new MimeBodyPart();
// 正文内容
MimeBodyPart content = new MimeBodyPart();
// 数据源
DataSource ds = new FileDataSource(new File(attachmentPath));
// 数据处理
DataHandler dh = new DataHandler(ds);
// 将处理后的数据存入附件
mbp.setDataHandler(dh);
// 设置附件名
mbp.setFileName(ds.getName());
// 添加附件
mp.addBodyPart(mbp);
// 添加正文
mp.addBodyPart(content);
// 设置邮件的Mime消息体
message.setContent(mp, "utf-8");
content.setText(text);
message.saveChanges();
// Transport transport = session.getTransport("smtp");
// System.out.println("尝试连接--------------");
// transport.connect(server,send,pwd);
// System.out.println("连接到邮箱");
// transport.sendMessage(message, message.getAllRecipients());
// transport.close();
// 发送信息
// Transport.send(message);
Transport.send(message, message.getAllRecipients());
System.out.println("发送成功");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
2.测试类
package com.hy;
import java.util.HashMap;
import java.util.Map;
import javax.mail.internet.AddressException;
public class Info {
public static void main(String[] args) throws AddressException {
String send = "******@qq.com";// 发送方邮箱
String sender = "MrS";// 发件人
String pwd = "izdrxeseoirtbecf";// 发送方密码(smtp邮箱授权码)
String port = "587";// 发送服务器端口号q~465or587 163邮箱~25
String server = "smtp.qq.com";// 邮件服务器/smtp.qq.com~smtp.163.com
String[] receive = { "******@163.com", "******@qq.com" };// 收件人邮箱
String[] receiver = { "test1", "test2"};// 收件人
Map<String, String> map = null;// 存储收件人及其邮箱地址
String subject = "Test_Send_Email";// 邮件标题
String attachmentPath = "/******/aaa.gif";// 附件路径
String text = "淡定~老铁们------this is a test!!";// 正文内容
map = new HashMap<>();
for (int i = 0; i < receive.length; i++) {
map.put(receive[i], receiver[i]);
}
new Multipart_Test(send, sender, pwd, port, server, map, subject, attachmentPath, text);
}
}