您的位置:首页 > 编程语言 > Java开发

Mail Java实现邮件发送(带附件)

2017-07-16 17:25 609 查看

发送邮件代码:

public void sendEmail(EmailData data) {
if(data.getAttachmentList().size() <= 0) {
logger.error("[EmailService] [sendEmail] attachment is empty!!");
return;
}

logger.info("[EmailService] [sendEmail] [form:{}] [pass:{}] [to:{}] [subject:{}]",
data.getFromUser(), data.getFromPass(), data.getToUsers(), data.getSubject());

Session session = getSession(data.getFromUser(), data.getFromPass());
MimeMessage message = new MimeMessage(session);

try {
//加载发件人地址
message.setFrom(new InternetAddress(data.getFromUser()));
//加载收件人地址
String[] arr = data.getToUsers().split(",");
int receiverCount = arr.length;
if(receiverCount > 0) {
InternetAddress[] address = new InternetAddress[receiverCount];
for (int i = 0; i < receiverCount; i++) {
address[i] = new InternetAddress(arr[i]);
logger.info("[EmailService] [sendEmail] [to address:{}]", arr[i]);
}
message.addRecipients(Message.RecipientType.TO, address);
}

//加载标题
message.setSubject(data.getSubject());
//向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
Multipart multipart = new MimeMultipart();
//设置邮件的文本内容
BodyPart contentPart = new MimeBodyPart();
contentPart.setText("");
multipart.addBodyPart(contentPart);

//添加附件信息
addAttachments(multipart, data.getAttachmentList());
//将multipart对象放到message中
message.setContent(multipart);

//发送邮件
Transport.send(message);
logger.info("[EmailService] [sendEmail] [email send success!!]");
} catch (Exception e) {
logger.error("", e);
}
}


获取Session,并进行验证:

/**
* 获取Session
* @param username 发件人邮箱
* @param password 发件人密码
* @date 2017年4月13日
*/
private Session getSession(final String username, final String password) {
Properties props = new Properties();
props.put("mail.smtp.host", "smtp.exmail.qq.com");
props.put("mail.smtp.port", 465);
props.put("mail.smtp.auth", "true");

Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
Session session = Session.getDefaultInstance(props, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
session.setDebug(true);
return session;
}


添加附件至邮件中:

/**
* 将附件信息添加至邮件中
* @param list
* @date 2017年4月11日
*/
private void addAttachments(Multipart multipart, List<Attachment> attachmentList) throws MessagingException {
for(Attachment attachment : attachmentList) {
// 添加附件
BodyPart messageBodyPart = new MimeBodyPart();
DataSource source = new FileDataSource(attachment.getPath());

// 添加附件的内容
messageBodyPart.setDataHandler(new DataHandler(source));

// 添加附件的标题
// 这里很重要,通过下面的Base64编码的转换可以保证你的中文附件标题名在发送时不会变成乱码
sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
messageBodyPart.setFileName("=?GBK?B?" + enc.encode(attachment.getName().getBytes()) + "?=");
multipart.addBodyPart(messageBodyPart);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: