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

[Java Web]stmp发送带附件邮件(附SSL版)

2017-05-18 10:45 459 查看
public class MailFileSendUtils {

private Properties props; //系统属性
private Session session; //邮件会话对象
private MimeMessage mimeMsg; //MIME邮件对象
private Multipart mp; //Multipart对象,邮件内容,标题,附件等内容均添加到其中后再生成MimeMessage对象

/**
* Constructor
* @param
*/
public MailFileSendUtils(){
props = System.getProperties();
props.put("mail.smtp.auth","false");
session = Session.getDefaultInstance(props, null);
session.setDebug(true);
mimeMsg = new MimeMessage(session);
mp = new MimeMultipart();
}

/**
* Constructor
* @param smtp 邮件发送服务器
*/
public MailFileSendUtils(String smtp, String username, String password){
props = System.getProperties();
props.put("mail.smtp.auth","true");
props.put("mail.smtp.host", smtp);
props.put("username", username);
props.put("password", password);
session = Session.getDefaultInstance(props, null);
session.setDebug(true);
mimeMsg = new MimeMessage(session);
mp = new MimeMultipart();
}

/**
* 发送邮件
*/
public boolean sendMail(String from, String[] to, String subject, String content, String filename) {
try {
//设置发信人
mimeMsg.setFrom(new InternetAddress(from));
//设置接收人
for (int i = 0; i < to.length; i++) {
mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to[i]));
}
//设置抄送人
//            for (int i = 0; i < copyto.length; i++) {
//                mimeMsg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(copyto[i]));
//            }
//设置主题
mimeMsg.setSubject(subject);
//设置正文
BodyPart bp = new MimeBodyPart();
bp.setContent(content, "text/html;charset=utf-8");
mp.addBodyPart(bp);
//设置附件
bp = new MimeBodyPart();
FileDataSource fileds = new FileDataSource(filename);
bp.setDataHandler(new DataHandler(fileds));
bp.setFileName(MimeUtility.encodeText(fileds.getName(),"UTF-8","B"));
mp.addBodyPart(bp);
mimeMsg.setContent(mp);
mimeMsg.saveChanges();
//发送邮件
if(props.get("mail.smtp.auth").equals("true")){
Transport transport = session.getTransport("smtp");
transport.connect((String)props.get("mail.smtp.host"), (String)props.get("username"), (String)props.get("password"));
transport.sendMessage(mimeMsg, mimeMsg.getRecipients(Message.RecipientType.TO));
//                transport.sendMessage(mimeMsg, mimeMsg.getRecipients(Message.RecipientType.CC));
transport.close();
}else{
Transport.send(mimeMsg);
}
System.out.println("邮件发送成功");
} catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return true;
}

//    public void toSendMail(SendMailParam sendMailParam){
//        MailFileSendUtils email = new MailFileSendUtils(sendMailParam.getSmtp(), sendMailParam.getUsername(), sendMailParam.getPassword());
//        email.sendMail(sendMailParam.getFrom(), sendMailParam.getTo(), sendMailParam.getSubject(), sendMailParam.getContent(), sendMailParam.getFilepath());
//    }

public static void main(String[] args) {
String smtp = "smtp.exmail.qq.com";
String username = "发送的邮箱账号";
String password = "发送的邮箱密码";
String from = "发送的邮箱";
String[] to = {"接收邮件的邮箱"};
//        String[] copyto = {"抄送的邮箱"};
String subject = "主题6";
String content = "邮件内容6";
String filename = "附件的文件";
MailFileSendUtils email = new MailFileSendUtils(smtp, username, password);
//        email.sendMail(from, to, copyto, subject, content, filename);
email.sendMail(from, to, subject, content, filename);
}

}


(附:SSL版)

public class MailFileSendUtils {

private Properties props; //系统属性
private Session session; //邮件会话对象
private MimeMessage mimeMsg; //MIME邮件对象
private Multipart mp; //Multipart对象,邮件内容,标题,附件等内容均添加到其中后再生成MimeMessage对象

/**
* Constructor
* @param
*/
public MailFileSendUtils(){
props = System.getProperties();
props.put("mail.smtp.auth","false");
session = Session.getDefaultInstance(props, null);
session.setDebug(true);
mimeMsg = new MimeMessage(session);
mp = new MimeMultipart();
}

/**
* Constructor
* @param smtp 邮件发送服务器
*/
public MailFileSendUtils(String smtp,
String username,
String password){
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
props = System.getProperties();
MailSSLSocketFactory sf = null;
try {
sf = new MailSSLSocketFactory();
} catch (GeneralSecurityException e) {
}
sf.setTrustAllHosts(true);
props.put("mail.smtp.auth","true");
props.put("mail.smtp.host", smtp);
props.put("mail.smtp.socketFactory.class", SSL_FACTORY);
props.put("mail.smtp.socketFactory.fallback", "false");
props.put("mail.smtp.ssl.enable", "true");
props.put("mail.smtp.port", "465");
props.put("mail.smtp.ssl.socketFactory", sf);

//        props.put("username", username);
//        props.put("password", password);
session = Session.getInstance(props, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
session.setDebug(true);
mimeMsg = new MimeMessage(session);
mp = new MimeMultipart();
}

/**
* 发送邮件
*/
public boolean sendMail(String from,
String[] to,
String subject,
String content,
String filename) {
try {
//设置发信人
mimeMsg.setFrom(new InternetAddress(from));
//设置接收人
for (int i = 0; i < to.length; i++) {
mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to[i]));
}
//设置抄送人
//            for (int i = 0; i < copyto.length; i++) {
//                mimeMsg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(copyto[i]));
//            }
//设置主题
mimeMsg.setSubject(subject);
//设置正文
BodyPart bp = new MimeBodyPart();
bp.setContent(content, "text/html;charset=utf-8");
mp.addBodyPart(bp);
//设置附件
bp = new MimeBodyPart();
FileDataSource fileds = new FileDataSource(filename);
bp.setDataHandler(new DataHandler(fileds));
bp.setFileName(MimeUtility.encodeText(fileds.getName(),"UTF-8","B"));
mp.addBodyPart(bp);
mimeMsg.setContent(mp);
mimeMsg.saveChanges();
//发送邮件
if(props.get("mail.smtp.auth").equals("true")){
Transport transport = session.getTransport("smtp");
transport.connect((String)props.get("mail.smtp.host"), (String)props.get("username"), (String)props.get("password"));
transport.sendMessage(mimeMsg, mimeMsg.getRecipients(Message.RecipientType.TO));
//                transport.sendMessage(mimeMsg, mimeMsg.getRecipients(Message.RecipientType.CC));
transport.close();
}else{
Transport.send(mimeMsg);
}
System.out.println("邮件发送成功");
} catch (MessagingException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return true;
}

public boolean toSendMail(SendMailParam sendMailParam){
MailFileSendUtils email = new MailFileSendUtils(
sendMailParam.getSmtp(),
sendMailParam.getUsername(),
sendMailParam.getPassword());
email.sendMail(
sendMailParam.getFrom(),
sendMailParam.getTo(),
sendMailParam.getSubject(),
sendMailParam.getContent(),
sendMailParam.getFilepath());
return true;
}

//    public static void main(String[] args) {
//        String smtp = "smtp.mxhichina.com";
//        String username = "邮箱";
//        String password = "邮箱密码";
//        String from = "谁去发";
//        String[] to = {"发给谁"};
////        String[] copyto = {"抄送的邮箱"};
//        String subject = "huawei";
//        String content = "邮件内容6666";
//        String filename = "gdt-3583118353-ad-20170823.xls";
//        MailFileSendUtils email = new MailFileSendUtils(smtp, username, password);
////        email.sendMail(from, to, copyto, subject, content, filename);
//        email.sendMail(from, to, subject, content, filename);
//    }

}


在项目中使用这套工具,main方法我注释掉,然后使用toSendMail(SendMailParam sendMailParam)。

这里定义的SendMailParam 为:

public class SendMailParam {
private String smtp;
private String username;
private String password;
private String from;//发送人
private String[] to;//接收人
//        String[] copyto = {"909891736@qq.com"};
private String subject;//邮件主题
private String content;//邮件内容
private String filepath;//文件拿到的路径

public SendMailParam(){
this.smtp = "smtp.exmail.qq.com";//例子
this.username = "邮箱账号";
this.password = "邮箱密码";
this.from = "邮箱";
this.subject = "";
this.content = "";
this.filepath = "";
}

public String getSmtp() {
return smtp;
}

public void setSmtp(String smtp) {
this.smtp = smtp;
}

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 String getFrom() {
return from;
}

public void setFrom(String from) {
this.from = from;
}

public String[] getTo() {
return to;
}

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

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 String getFilepath() {
return filepath;
}

public void setFilepath(String filepath) {
this.filepath = filepath;
}
}


maven依赖包

<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>


gradle依赖包

compile "javax.mail:mail:1.4.7"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: