Java发送Email简单实现

时间:2022-12-25 21:11:39

需要的jar有2个:activation.jar下载地址: JavaBeans Activation Framework (JAF)
mail.jar下载地址 : JavaMail API

找不到的可以去我的资源里面直接下载这两个jar包
activation.jar&&mail.jar

1.邮件实体类

package com.ndcims.core.utils.test;

/**
* TODO 邮件的实体类,记录发送邮件所需要的信息
* @author 洋洋懒懒小公举
* @Date 创建于 2017-9-7 上午10:24:27
* @version v1.0
* @Copyright 2017 www.rinpo.com Inc. All rights reserved.
*/

public class Email {

private String host; // smtp服务器
private String text; // 邮件文本内容
private String fromUser; // 发件人地址
private String fromPwd; // 用来发送邮件的用户名密码(163的授权码)
private String to; // 收件人地址
private String affix; // 附件地址
private String affixName; // 附件名称
private String subject; // 邮件标题

public void setAddress(String host,String fromUser,String fromPwd, String to) {
this.fromUser = fromUser;
this.to = to;
this.host = host;
this.fromPwd = fromPwd;
}

public void setAffix(String affix, String affixName) {
this.affix = affix;
this.affixName = affixName;
}

public void setContent(String subject, String text) {
this.subject = subject;
this.text = text;
}
public String getHost() {
return host;
}

public void setHost(String host) {
this.host = host;
}

public String getText() {
return text;
}

public void setText(String text) {
this.text = text;
}

public String getFromUser() {
return fromUser;
}

public void setFromUser(String fromUser) {
this.fromUser = fromUser;
}

public String getFromPwd() {
return fromPwd;
}

public void setFromPwd(String fromPwd) {
this.fromPwd = fromPwd;
}

public String getTo() {
return to;
}

public void setTo(String to) {
this.to = to;
}

public String getAffix() {
return affix;
}

public void setAffix(String affix) {
this.affix = affix;
}

public String getAffixName() {
return affixName;
}

public void setAffixName(String affixName) {
this.affixName = affixName;
}

public String getSubject() {
return subject;
}

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

2.发送邮件方法及应用举例

package com.ndcims.cms.utilTest;

import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
import javax.mail.Message;
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;

import com.ndcims.core.utils.ToolKits;
import com.ndcims.core.utils.test.Email;

/**
* TODO 发送邮件的方法类
* @author 洋洋懒懒小公举
* @Date 创建于 2017-9-7 下午5:00:04
* @version v1.0
* @Copyright 2017 www.rinpo.com Inc. All rights reserved.
*/

public class DemoSendEmail {

/**
* TODO 发送邮件
* @param email
* @author 洋洋懒懒小公举
* @Date Create at 2017-9-7 下午4:59:51
*/

public void send(Email email) {

Properties props = new Properties();

// 设置发送邮件的邮件服务器的属性(这里使用网易的smtp服务器)
props.put("mail.smtp.host", email.getHost());
// 需要经过授权,也就是有户名和密码的校验,这样才能通过验证(一定要有这一条)
props.put("mail.smtp.auth", "true");

// 用刚刚设置好的props对象构建一个session
Session session = Session.getDefaultInstance(props);

// 有了这句便可以在发送邮件的过程中在console处显示过程信息,供调试使
// 用(你可以在控制台(console)上看到发送邮件的过程)
session.setDebug(true);

// 用session为参数定义消息对象
MimeMessage message = new MimeMessage(session);
try {
// 加载发件人地址
message.setFrom(new InternetAddress(email.getFromUser()));
// 加载收件人地址
message.addRecipient(Message.RecipientType.TO, new InternetAddress(email.getTo()));
// 加载标题
if(ToolKits.isNotEmpty(email.getSubject())){
message.setSubject(email.getSubject());
}
// 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
Multipart multipart = new MimeMultipart();

// 设置邮件的文本内容
if(ToolKits.isNotEmpty(email.getText())){
BodyPart contentPart = new MimeBodyPart();
contentPart.setText(email.getText());
multipart.addBodyPart(contentPart);
}
if(ToolKits.isNotEmpty(email.getAffix()) && ToolKits.isNotEmpty(email.getAffixName())){
// 添加附件
BodyPart messageBodyPart = new MimeBodyPart();
DataSource source = new FileDataSource(email.getAffix());
// 添加附件的内容
messageBodyPart.setDataHandler(new DataHandler(source));
// 添加附件的标题
// MimeUtility.encodeWord或者encodeText可以保证你的中文附件标题名在发送时不会变成乱码
String filename = MimeUtility.encodeText(email.getAffixName());
filename = filename.replaceAll("\r", "").replaceAll("\n", "");
messageBodyPart.setFileName(filename);
multipart.addBodyPart(messageBodyPart);
}
// 将multipart对象放到message中
message.setContent(multipart);
// 保存邮件
message.saveChanges();
// 发送邮件
Transport transport = session.getTransport("smtp");
// 连接服务器的邮箱
transport.connect(email.getHost(), email.getFromUser(), email.getFromPwd());

/*这里可以多发几封邮件
* String[] love = {"亲","爱","的","I","Love","U"};
for (int i = 0; i < love.length; i++) {
message.setSubject(love[i]);
transport.sendMessage(message, message.getAllRecipients());
}*/


// 把邮件发送出去
transport.sendMessage(message, message.getAllRecipients());
transport.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* TODO 发送邮件示例
* @param args
* @author 洋洋懒懒小公举
* @Date Create at 2017-9-7 下午4:59:35
*/

public static void main(String[] args) {
Email email = new Email();
// 设置发件人地址,发件人授权码、收件人地址和邮件标题 [授权码和你平时登录的密码是不一样的]
email.setAddress("smtp.163.com","email1@163.com","password","email2@qq.com");
// 设置要发送附件的位置和标题
email.setAffix("f:/test.txt", "test.txt");
//设置需要发送的主题和正文
email.setContent("邮件主题", "这个是测试的邮件内容");
/**
* 设置smtp服务器以及邮箱的帐号和密码
* 用QQ 邮箱作为发生者不好使 (原因不明)
* 163 邮箱可以,但是必须开启 POP3/SMTP服务 和 IMAP/SMTP服务
* 因为程序属于第三方登录,所以登录密码必须使用163的授权码
*/

DemoSendEmail t = new DemoSendEmail();
t.send(email);
}
}

这些我认为够了,其他的再根据实际情况锦上添花~