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

java发送Email邮件

2016-11-01 21:03 393 查看
JAVA MAIL是利用现有的邮件账户发送邮件的工具,比如说,我在网易注册一个邮箱账户,通过JAVA Mail的操控,我可以不亲自登录网易邮箱,让程序自动的使用网易邮箱发送邮件。这一机制被广泛的用在注册激活和垃圾邮件的发送等方面。

本次以QQ邮箱为例。

1、开通邮箱的stmp功能,获取授权码,在登录时所用到的密码就是此授权码。








2、下载我们所需要的jar包,mailapi.jar和smtp.jar。




3、创建Email公用类。


package com.lumitest.util;

import java.util.ArrayList;
import java.util.List;

public class Email {

private String smtpServer; // SMTP服务器地址
private String port; // 端口
private String username; // 登录SMTP服务器的用户名
private String password; // 登录SMTP服务器的密码
private List<String> recipients = new ArrayList<String>(); // 收件人地址集合
private String subject; // 邮件主题
private String content; // 邮件正文
private List<String> attachmentNames = new ArrayList<String>(); // 附件路径信息集合

public Email() {
super();
}

public Email(String smtpServer, String port, String username,
String password, List<String> recipients, String subject,
String content, List<String> attachmentNames) {
super();
this.smtpServer = smtpServer;
this.port = port;
this.username = username;
this.password = password;
this.recipients = recipients;
this.subject = subject;
this.content = content;
this.attachmentNames = attachmentNames;
}

public String getSmtpServer() {
return smtpServer;
}

public void setSmtpServer(String smtpServer) {
this.smtpServer = smtpServer;
}

public String getPort() {
return port;
}

public void setPort(String port) {
this.port = port;
}

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 List<String> getRecipients() {
return recipients;
}

public void setRecipients(List<String> recipients) {
this.recipients = recipients;
}

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 List<String> getAttachmentNames() {
return attachmentNames;
}

public void setAttachmentNames(List<String> attachmentNames) {
this.attachmentNames = attachmentNames;
}

}


4、创建SendMailBySSL类,用于发送Email。


package com.lumitest.util;

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.Multipart;
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;
import javax.mail.internet.MimeUtility;

public class SendMailBySSL {

private final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";

/**
* 正式发邮件
**/
public boolean sendMail(Email email) {
Properties properties = new Properties();
properties.put("mail.smtp.host", email.getSmtpServer());
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.socketFactory.class", SSL_FACTORY); // 使用JSSE的SSL
properties.put("mail.smtp.socketFactory.fallback", "false"); // 只处理SSL的连接,对于非SSL的连接不做处理
properties.put("mail.smtp.port", email.getPort());
properties.put("mail.smtp.socketFactory.port", email.getPort());

Session session = Session.getInstance(properties);
//session.setDebug(true);   //调试模式
MimeMessage message = new MimeMessage(session);

try {
// 发件人
Address address = new InternetAddress(email.getUsername());
message.setFrom(address);
// 收件人
for (String recipient : email.getRecipients()) {
Address toAddress = new InternetAddress(recipient);
// 设置收件人,并设置其接收类型为TO,TO:代表有健的主要接收者。 CC:代表有健的抄送接收者。 BCC:代表邮件的暗送接收者。
message.setRecipient(MimeMessage.RecipientType.TO, toAddress);
}
// 主题
message.setSubject(email.getSubject());
// 时间
message.setSentDate(new Date());
Multipart multipart = new MimeMultipart();
// 添加文本
BodyPart text = new MimeBodyPart();
text.setText(email.getContent());
multipart.addBodyPart(text);
// 添加附件
if(email.getAttachmentNames() != null){
for (String fileName : email.getAttachmentNames()) {
BodyPart adjunct = new MimeBodyPart();
FileDataSource fileDataSource = new FileDataSource(fileName);
adjunct.setDataHandler(new DataHandler(fileDataSource));
adjunct.setFileName( MimeUtility.encodeText((fileDataSource.getName())));
multipart.addBodyPart(adjunct);
}
// 清空收件人集合,附件集合
email.getRecipients().clear();
email.getAttachmentNames().clear();
}
message.setContent(multipart);
message.saveChanges();
} catch (Exception e) {
e.printStackTrace();
return false;
}
try {
Transport transport = session.getTransport("smtp");
transport.connect(email.getSmtpServer(), email.getUsername(), email.getPassword());
transport.sendMessage(message, message.getAllRecipients());
transport.close();
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
}


5、创建Servlet命名为SendMailServlet,url为SendMailServlet。也可以在main方法中调用。


package com.lumitest.servlet;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.lumitest.util.Email;
import com.lumitest.util.SendMailBySSL;

/**
* 发送邮件的请求servlet
*
* @author 梦幻逝水
*
*/
public class SendMailServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

//收件人
List<String> recipients = new ArrayList<String>();
recipients.add("123456789@qq.com");
//主题
String subject = "这封邮件是为了测试SMTP的SSL加密传输";
//内容
String content = "这是这封邮件的正文";
//附件
List<String> attachmentNames = new ArrayList<String>();
attachmentNames.add("D://测试test.txt");

Email email = new Email("smtp.qq.com", "465","12356789@qq.com", "授权码", recipients, subject, content, attachmentNames);
new SendMailBySSL().sendMail(email);
}

}


6、效果展现




Demo源代码下载:https://www.yangjiace.xyz/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: