JSP: 使用网易邮箱发送带附件的电子邮件
JSP代码:使用javax.mail和activation发送邮件
首先我们需要两个jar包,javax.mail.jar和activation.jar,官方下载地址:
JAF:JavaBeans Activation Framework
JMA:JavaMail API
不管使用什么邮箱发送右键,我们都需要打开SMTP服务,比如网易邮箱:
开启服务之后,你就已经设置成功了一个授权码。请记住:用JSP验证邮箱登录的时候,用户名为邮箱名,密码为授权码,而不是登录邮箱用的密码。
完事具备,上代码:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.*, java.text.*, java.time.*, java.io.*"%>
<%@ page import="javax.mail.*, javax.mail.internet.*, javax.activation.*"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="author" content="赵利昂">
<title>E-mail something</title>
</head>
<body>
<%-- 从网易邮箱向QQ邮箱发送消息 --%>
<%
String from = "[email protected]"; // 发件人
String to = "[email protected]"; //收件人
String host = "smtp.163.com"; // 指定发送邮件的主机
Properties props = System.getProperties(); // 获取系统属性
props.setProperty("mail.smtp.host", host); // 设置邮件服务器
props.put("mail.smtp.auth", "true"); // 设置用户认证方式
session.invalidate(); // 使默认session暂时失效,否则发送消息系统变为一次性
try
{
// 创建默认的 MimeMessage对象
MimeMessage message = new MimeMessage(Session.getDefaultInstance(props, new Authenticator() {
@Override
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("[email protected]", "XXXXXXXX"); //发件人的用户名和授权码
}
}));
message.setFrom(new InternetAddress(from)); // 设置from字段
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); // 设置to字段
message.setSubject("What's for dinner?"); // 设置邮件标题
BodyPart messageBodyPart = new MimeBodyPart(); // 创建消息部分
messageBodyPart.setText("I'm thinking, two pizzas."); // 设置邮件消息主体
Multipart multipart = new MimeMultipart(); // 创建多重消息(总消息)
multipart.addBodyPart(messageBodyPart); // 添加消息的文本部分
messageBodyPart = new MimeBodyPart(); // 重新新建对象,以便添加附件
DataSource source = new FileDataSource(new File("D:\\104.txt")); // 附件
messageBodyPart.setDataHandler(new DataHandler(source)); // 附件的处理器
messageBodyPart.setFileName("BirthdayCard"); // 附件重命名
multipart.addBodyPart(messageBodyPart); // 添加附件至总消息
message.setContent(multipart); // 将总消息设置成要发送的消息
Transport.send(message); // 发送总消息
out.println("<h1>邮件发送成功。</h1><br />");
}
catch (MessagingException mex)
{
out.println("<h1>邮件发送失败。附加消息:</h1>" + mex.getMessage() + "<br />");
mex.printStackTrace();
}
%>
</body>
</html>