Java 发送带附件的邮件
上一篇已经讲了如何用 Java 发送一个简单的邮件,然而有时我们发送邮件需要发送文件,我们来看看如何用java 发送带附件的邮件。
废话不多说,直接上代码:
需要的依赖:
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
代码:
public class MailTest {
public static final String SMTP_SERVER = "smtp.163.com"; //SMTP服务器地址
public static final String SMTP_PORT = "465"; //请求的端口
public static final String ACCOUNT = "*******@163.com"; //验证的用户
public static final String PWD = "*************"; //密码
@Test
public void test() throws UnsupportedEncodingException, MessagingException {
//创建邮件配置
Properties props = new Properties();
props.setProperty("mail.transport.protocol","smtp"); //配置协议
props.setProperty("mail.smtp.host",SMTP_SERVER); //配置请求的SMTP 服务器地址
props.setProperty("mail.smtp.port",SMTP_PORT); //配置请求的端口
props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
props.setProperty("mail.smtp.auth","true"); //是否验证
props.setProperty("mail.smtp.ssl.enable","true"); //是否使用SSL
//根据邮件配置创建会话,注意 session 别导错包
Session session = Session.getDefaultInstance(props);
//开启debug 模式,可以看到更多详细的日志
session.setDebug(true);
//创建邮件
MimeMessage message = createEmil(session);
//获取传输通道
Transport transport = session.getTransport();
transport.connect(ACCOUNT,PWD);
//连接,并发送邮件
transport.sendMessage(message,message.getAllRecipients());
}
private MimeMessage createEmil(Session session) throws UnsupportedEncodingException, MessagingException {
//根据会话创建邮件
MimeMessage msg = new MimeMessage(session);
//设置发送邮件方
msg.setFrom(new InternetAddress(ACCOUNT,"昵称","UTF-8"));
//设置接受邮件方
msg.setRecipient(Message.RecipientType.TO,
new InternetAddress("847707713@qq.com");
//设置邮件标题
msg.setSubject("附件测试","utf-8");
//创建多重消息
Multipart multipart = new MimeMultipart();
//创建消息部分
BodyPart bodyPart = new MimeBodyPart();
bodyPart.setText("发送附件测试");
//设置文本消息部分
multipart.addBodyPart(bodyPart);
//附件部分
bodyPart = new MimeBodyPart();
DataSource source = new FileDataSource("F:/aaa.txt");
bodyPart.setDataHandler(new DataHandler(source));
bodyPart.setFileName("test.txt");
multipart.addBodyPart(bodyPart);
msg.setContent(multipart);
//保存设置
msg.saveChanges();
return msg;
}
}
发送邮件附件 与上一节对比可以看出,要加的代码并不是很多。
这里首先需要创建一个 multipart 对象,multipart 对象可以包含多个BodyPart对象,BodyPart可以是文本消息,也可以是附件。
如果要发送多个附件,只需要仿照上面的附件部分代码,更改文件路径即可。