利用Javamail发送邮件(支持附件)

本文介绍使用JavaMail API发送带有HTML内容及附件的电子邮件的方法。通过实例演示如何配置邮件服务器参数、设置邮件内容和附件,并实现邮件发送功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

准备Javamail包,下载地址[url]http://www.oracle.com/technetwork/java/index-138643.html[/url],具体实现如下:

package org.asheng.util;

import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;

import org.asheng.model.Email;

/**
* 邮件发送器,支持附件
* @author Harrison Wang
*/
public class MailSender {

/* 定义邮件身份验证器 */
private EmailAuthenticator authenticator;

/**
* 以文本方式发送邮件
* @param email 待发送邮件的信息
* @return 成功则返回true,反之则返回false
*/
public boolean sendTextMail(Email email) {
// 获取邮件会话属性
Properties props = email.getProperties();
// 判断是否需要身份验证,如需身份验证,则创建一个身份验证器
if (email.isValidate()) {
authenticator = new EmailAuthenticator(email.getUserName(),
email.getPassword());
}
// 根据邮件会话属性和密码验证器构造一个发送邮件的session
Session session = Session.getDefaultInstance(props, authenticator);
// 根据session创建一个邮件消息
Message message = new MimeMessage(session);
try {
// 创建邮件发送者地址
Address from = new InternetAddress(email.getFormAddress());
// 设置邮件消息发送者
message.setFrom(from);
// 创建邮件的接收者地址,并设置到邮件消息中
Address to = new InternetAddress(email.getToAddress());
message.setRecipient(Message.RecipientType.TO, to);
// 设置邮件消息主题
message.setSubject(email.getSubject());
// 设置邮件消息发送的时间
message.setSentDate(new Date());
// 设置邮件消息主要内容
message.setText(email.getContent());
// 发送邮件
Transport.send(message);
return true;
} catch (AddressException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
return false;
}

/**
* 以HTML方式发送邮件
* @param email 待发送邮件的信息
* @return 成功则返回true,反之则返回false
*/
public boolean sendHtmlMail(Email email) {
// 获取邮件会话属性
Properties props = email.getProperties();
// 判断是否需要身份验证,如需身份验证,则创建一个身份验证器
if (email.isValidate()) {
authenticator = new EmailAuthenticator(email.getUserName(),
email.getPassword());
}
// 根据邮件会话属性和密码验证器构造一个发送邮件的session
Session session = Session.getDefaultInstance(props, authenticator);
// 根据session创建一个邮件消息
Message message = new MimeMessage(session);
try {
// 创建邮件发送者地址
Address from = new InternetAddress(email.getFormAddress());
// 设置邮件消息发送者
message.setFrom(from);
// 创建邮件的接收者地址,并设置到邮件消息中
Address to = new InternetAddress(email.getToAddress());
message.setRecipient(Message.RecipientType.TO, to);
// 设置邮件消息主题
message.setSubject(email.getSubject());
// 设置邮件消息发送的时间
message.setSentDate(new Date());

// MimeMultipart类是一个容器类,包含MimeBodyPart类型的对象
Multipart multipart = new MimeMultipart();

// 创建一个包含HTML内容的MimeBodyPart
BodyPart html = new MimeBodyPart();
// 设置HTML内容
html.setContent(email.getContent(),"text/html; charset=UTF-8");
// 添加到Multipart容器类中
multipart.addBodyPart(html);

// 创建一个包含附件的 MimeBodyPart
BodyPart attachmentInfo = new MimeBodyPart();
// 得到数据源
FileDataSource dataSource = new FileDataSource(
email.getAttachmentName());
// 得到附件本身并绑定到对象BodyPart中
attachmentInfo.setDataHandler(new DataHandler(dataSource));
// 设置附件名称,处理中文文件名
attachmentInfo.setFileName(MimeUtility.encodeWord(
dataSource.getName(), "text/html; charset=UTF-8", "UTF-8"));
// 添加到Multipart容器类中
multipart.addBodyPart(attachmentInfo);

// 将MimeMultipart对象设置为邮件内容
message.setContent(multipart);

// 发送邮件
Transport.send(message);
return true;
} catch (AddressException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return false;
}

public static void main(String[] args) {
MailSender sms = new MailSender();
Email email = new Email();
email.setServerHost("smtp.163.com");
email.setServerPort("25");
email.setUserName("harrison@163.com");
email.setPassword("**********");
email.setFormAddress("harrison@163.com");
email.setToAddress("harrison@qq.com");
email.setSubject("harrison 你好!");
email.setContent("<font color='red'>Hello Harrison!</font>");
email.setAttachmentName("D:/Download/Converter.rar");
// sms.sendTextMail(email);
sms.sendHtmlMail(email);

}

}




package org.asheng.model;

import java.io.Serializable;
import java.util.Date;
import java.util.Properties;

/**
* 邮件基本信息类
* @author Harrison Wang
*/
public class Email implements Serializable {
private static final long serialVersionUID = 1L;

// 发送邮件的服务器主机地址
private String serverHost;
// 发送邮件的服务器端口
private String serverPort = "25";
// 邮件发送者email地址
private String formAddress;
// 邮件接收者email地址
private String toAddress;

// 登录邮件发送服务器的用户名
private String userName;
// 登录邮件发送服务器的密码
private String password;

// 是否需要身份验证
private boolean validate = true;

// 邮件主题
private String subject;
// 邮件文本内容
private String content;
// 邮件附件的文件名
private String attachmentName;
// 邮件发送时间
private Date sendTime;

/**
* 获取邮件会话属性
* @return 返回邮件会话属性
*/
public Properties getProperties() {
Properties props = new Properties();
props.setProperty("mail.smtp.host", serverHost);
props.setProperty("mail.smtp.port", serverPort);
props.setProperty("mail.smtp.auth", validate ? "true" : "false");
return props;
}

public String getServerHost() {
return serverHost;
}

public void setServerHost(String serverHost) {
this.serverHost = serverHost;
}

public String getServerPort() {
return serverPort;
}

public void setServerPort(String serverPort) {
this.serverPort = serverPort;
}

public String getFormAddress() {
return formAddress;
}

public void setFormAddress(String formAddress) {
this.formAddress = formAddress;
}

public String getToAddress() {
return toAddress;
}

public void setToAddress(String toAddress) {
this.toAddress = toAddress;
}

public String getUserName() {
return userName;
}

public void setUserName(String userName) {
this.userName = userName;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

public boolean isValidate() {
return validate;
}

public void setValidate(boolean validate) {
this.validate = validate;
}

public String getSubject() {
return subject;
}

public void setSubject(String subject) {
this.subject = subject;
}

public String getContent() {
return content;
}

public void setContent(String content) {
this.content = content;
}

public String getAttachmentName() {
return attachmentName;
}

public void setAttachmentName(String attachmentName) {
this.attachmentName = attachmentName;
}

public Date getSendTime() {
return sendTime;
}

public void setSendTime(Date sendTime) {
this.sendTime = sendTime;
}

}




package org.asheng.util;

import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;

public class EmailAuthenticator extends Authenticator {

private String userName;
private String password;

public EmailAuthenticator() {
}

public EmailAuthenticator(String userName, String password) {
this.userName = userName;
this.password = password;
}

@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(userName, password);
}

}

资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在当今的软件开发领域,自动化构建与发布是提升开发效率和项目质量的关键环节。Jenkins Pipeline作为一种强大的自动化工具,能够有效助力Java项目的快速构建、测试及部署。本文将详细介绍如何利用Jenkins Pipeline实现Java项目的自动化构建与发布。 Jenkins Pipeline简介 Jenkins Pipeline是运行在Jenkins上的一套工作流框架,它将原本分散在单个或多个节点上独立运行的任务串联起来,实现复杂流程的编排与可视化。它是Jenkins 2.X的核心特性之一,推动了Jenkins从持续集成(CI)向持续交付(CD)及DevOps的转变。 创建Pipeline项目 要使用Jenkins Pipeline自动化构建发布Java项目,首先需要创建Pipeline项目。具体步骤如下: 登录Jenkins,点击“新建项”,选择“Pipeline”。 输入项目名称和描述,点击“确定”。 在Pipeline脚本中定义项目字典、发版脚本和预发布脚本。 编写Pipeline脚本 Pipeline脚本是Jenkins Pipeline的核心,用于定义自动化构建和发布的流程。以下是一个简单的Pipeline脚本示例: 在上述脚本中,定义了四个阶段:Checkout、Build、Push package和Deploy/Rollback。每个阶段都可以根据实际需求进行配置和调整。 通过Jenkins Pipeline自动化构建发布Java项目,可以显著提升开发效率和项目质量。借助Pipeline,我们能够轻松实现自动化构建、测试和部署,从而提高项目的整体质量和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值