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

Java邮件发送:基于JavaMail

2017-05-15 19:18 369 查看
        最近需要写一个项目自动发包的功能,需要每次提新需求的时候都有邮件通知相关人,写了一个邮件发送的工具类,这里用到的java里面的javamail模块,但是在下载的jdk里面是不包含这个模块的,所以需要我们自己去下载,我这里是使用Maven
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
下面是我写的工具类

import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Date;
import java.util.Properties;
/**邮件发送公共类
* @author chenhongjie
*/
public class MailUtil {
private String[] receiveMailAccount;
private  String[] ccMailAccount;
private String text;//邮件内容
private String title;
public MailUtil(String[] receiveMailAccount,String[] ccMailAccount){
this.receiveMailAccount=receiveMailAccount;
this.ccMailAccount=ccMailAccount;
}
public MailUtil(String[] receiveMailAccount){
this.receiveMailAccount=receiveMailAccount;
}
public static String sendEmailAccount = PropertiesUtil.getValue("sendEmailAccount");
public static String sendEmailPassword = PropertiesUtil.getValue("sendEmailPassword");
public static String myEmailSMTPHost = PropertiesUtil.getValue("myEmailSMTPHost");
/**
*发送邮件
* @param title   邮件标题
* @param text    邮件内容
*/
public void sendMail(String title,String text){
this.title=title;
this.text=text;
// 1. 创建参数配置, 用于连接邮件服务器的参数配置
try {
Properties props = new Properties();                    // 参数配置
props.setProperty("mail.transport.protocol", "smtp");   // 使用的协议(JavaMail规范要求)
props.setProperty("mail.smtp.host", myEmailSMTPHost);   // 发件人的邮箱的 SMTP 服务器地址
props.setProperty("mail.smtp.auth", "true");            // 需要请求认证
Session session = Session.getDefaultInstance(props);
session.setDebug(false);// 设置为debug模式, 可以查看详细的发送 log
// 3. 创建一封邮件
MimeMessage message = null;
message= createMimeMessage(session);
// 4. 根据 Session 获取邮件传输对象
Transport transport = session.getTransport();
transport.connect(sendEmailAccount, sendEmailPassword);
// 6. 发送邮件, 发到所有的收件地址, message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人
transport.sendMessage(message, message.getAllRecipients());
// 7. 关闭连接
transport.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 创建一封只包含文本的简单邮件
*
* @param session 和服务器交互的会话
* @param sendMail 发件人邮箱
* @param receiveMail 收件人邮箱
* @return
* @throws Exception
*/
private  MimeMessage createMimeMessage(Session session){
try {
// 1. 创建一封邮件
MimeMessage message = new MimeMessage(session);
// 2. From: 发件人
message.setFrom(new InternetAddress(sendEmailAccount, "Sinozo项目管理", "UTF-8"));
// 3. To: 收件人(可以增加多个收件人、抄送、密送)
if(receiveMailAccount!=null){
for(String receive:receiveMailAccount){
message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receive,receive, "UTF-8"));
}
}
// Cc: 抄送
if(ccMailAccount!=null){
for(String cc:ccMailAccount){
message.setRecipient(MimeMessage.RecipientType.CC, new InternetAddress(cc,cc, "UTF-8"));
}
}
// 4. Subject: 邮件主题
message.setSubject(title, "UTF-8");
// 5. Content: 邮件正文(可以使用html标签)
message.setContent(text, "text/html;charset=UTF-8");
// 6. 设置发件时间
message.setSentDate(new Date());
// 7. 保存设置
message.saveChanges();
return message;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args){
//邮件功能使用方法
String receiveMailAccount[]={"chenhongjie@sinozo.com"};
//String ccMailAccount[]={"huangzhiyi@sinozo.com"};
//MailUtil mailUtil = new MailUtil(receiveMailAccount,ccMailAccount);
MailUtil mailUtil = new MailUtil(receiveMailAccount);
mailUtil.sendMail("测试类123","我是一个测试<br><a href='http://www.yyjava.com'>星创</a>");
}
}


其中PropertiesUtil是我自己写的一个读取配置文件的工具类,因为我把发送邮箱和发送邮箱的密码都写到配置文件里面去了

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class PropertiesUtil {

public static String getValue(String key){
Properties prop=new Properties();
InputStream in=new PropertiesUtil().getClass().getResourceAsStream("/sinozoPushAdminConfigDefault/env.properties");
try {
prop.load(in);
} catch (IOException e) {
e.printStackTrace();
}
return prop.getProperty(key);
}
public static void main(String[] args) {
System.out.println(getValue("cloudflareDownDomain"));
}
}


我的配置文件如下

sendEmailAccount=xxxxx@sinozo.com
sendEmailPassword=xxxxxxx
myEmailSMTPHost=smtp.xxxxx.com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: