邮件系统

懒得说了,直接上代码

依赖

<dependency>
	<groupId>javax.mail</groupId>
	<artifactId>mail</artifactId>
	<version>1.4.7</version>
</dependency>
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-context-support</artifactId>
	<version>4.3.3</version>
</dependency>
还有spring的4个基础核心包
logger包,这里就不做列举了

核心代码

package com.noryar.common.utils;

import java.io.File;
import java.util.Date;
import java.util.Properties;

import javax.activation.FileDataSource;
import javax.mail.internet.MimeMessage;

import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;


/**
 * 系统发送邮件类.<br>
 * 邮件内容需要封装在EmailDTO中,该工具类使用方式案例:<br>
 * Emailer.getEmailer.sendSimpleEmail(EmailDTO emailDTO);或者Emailer.getEmailer.sendMineEmail(EmailDTO emailDTO);
 * @author Administrator
 *
 */
public class Emailer {
    private static Logger logger = LoggerFactory.getLogger(Emailer.class);
    /**
     *实例化SimpleMailMessage.
     */
    private SimpleMailMessage smm = null;
    /**
     *实例化MailSender.
     */
    private JavaMailSender jms = null;
    public Emailer(final EmailDTO emailDTO) {
        String host = emailDTO.getHost();
        String from = emailDTO.getUsername();
        String password = emailDTO.getPassword();
        if(StringUtils.isBlank(host)||StringUtils.isBlank(from)||StringUtils.isBlank(password)){
            throw new RuntimeException("邮箱未正确定义");
        }else{
            String username = from.substring(0, from.indexOf("@"));
            smm = new SimpleMailMessage();
            smm.setFrom(from);
            JavaMailSenderImpl impl = new JavaMailSenderImpl();
            impl.setDefaultEncoding("UTF-8");
            impl.setHost(host);
            impl.setUsername(username);
            impl.setPassword(password);
            Properties prop = new Properties();
            prop.put("mail.smtp.auth", true);
            prop.put("mail.debug", true);
            impl.setJavaMailProperties(prop);
            jms = impl;
        }
    }
    /**
     * 发送普通text邮件.
     * @param emailDTO emailDTO
     * @return String
     * @throws Exception e.
     */
    public boolean sendSimpleEmail(final EmailDTO emailDTO)throws Exception {
        //发送者
        smm.setTo(emailDTO.getToAddress());
        //标题
        smm.setSubject(emailDTO.getSubject());
        //内容
        smm.setText(emailDTO.getText());
        //发送
        jms.send(smm);
        return true;
    }
    /**
     * 发送内嵌html邮件.
     * @param emailDTO emailDTO
     * @return boolean
     * @throws Exception e.
     */
    public boolean sendMineEmail(final EmailDTO emailDTO)throws Exception {
        MimeMessage mime = jms.createMimeMessage();
        MimeMessageHelper mimehelper = new MimeMessageHelper(mime, true);
        //设置发送人
        mimehelper.setFrom(smm.getFrom());
        //设置收件人
        mimehelper.setTo(emailDTO.getToAddress());
        //设置发送日期
        mimehelper.setSentDate(new Date());
        //设置主题
        mimehelper.setSubject(emailDTO.getSubject());
        //设置邮件内容为HTML超文本格式
        mimehelper.setText(emailDTO.getText(), true);
        // 邮件附件
        File[] files = emailDTO.getFiles();
        if(null != files && files.length>=1){
            for (File file : files) {
                if(!file.exists()){
                    throw new RuntimeException("邮件发送失败,附件:【"+file.getName()+"】不存在");
                }
                mimehelper.addAttachment(file.getName(), new FileDataSource(file));
            }
        }
        //将邮件发送
        jms.send(mime);
        return true;
    }
    /**
     * 群发普通text文件.
     * @param emailDTO emailDTO
     * @return 成功与否
     * @throws Exception 异常
     */
    public boolean sendAllSimpleEmail(final EmailDTO emailDTO) throws Exception{
        String[] tos = emailDTO.getToAllAddress();
        if(null == tos || tos.length == 0){
            return false;
        }
        String back = emailDTO.getToAddress();
        for (String to : tos) {
            emailDTO.setToAddress(to);
            if(!sendSimpleEmail(emailDTO)){
                logger.info("发送给:【"+to+"】失败。");
            }
        }
        emailDTO.setToAddress(back);
        return true;
    }
    /**
     * 群发内嵌html邮件.
     * @param emailDTO emailDTO
     * @return 成功与否
     * @throws Exception 异常
     */
    public boolean sendAllMineEmail(final EmailDTO emailDTO) throws Exception{
        String[] tos = emailDTO.getToAllAddress();
        if(null == tos || tos.length == 0){
            return false;
        }
        String back = emailDTO.getToAddress();
        for (String to : tos) {
            emailDTO.setToAddress(to);
            if(!sendMineEmail(emailDTO)){
                logger.info("发送给:【"+to+"】失败。");
            }
        }
        emailDTO.setToAddress(back);
        return true;
    }
}

DTO实体

package com.noryar.common.utils;

import java.io.File;

/**
 * emailDTO.
 * @author Administrator
 *
 */
public class EmailDTO implements java.io.Serializable {
    /**
     * .
     */
    private static final long serialVersionUID = -3903692662228924615L;
    /**
     * 发送邮箱协议地址.
     */
    private String host;
    /**
     * 发送邮箱账户.
     */
    private String username;
    /**
     * 邮箱密码.
     */
    private String password;
    /**
     * 接收地址.
     */
    private String toAddress;
    /**
     * 群发接收地址.
     */
    private String[] toAllAddress;
    /**
     * 邮件名.
     */
    private String subject;
    /**
     * 邮件内容.
     */
    private String text;
    /**
     * 邮件附件.
     */
    private File[] files;
    
    public String getHost() {
        return host;
    }
    public void setHost(String host) {
        this.host = host;
    }
    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;
    }
    /**
     * .
     * @return toAddress.
     */
    public String getToAddress() {
        return toAddress;
    }
    /**
     * .
     * @param toAddress toAddress.
     */
    public void setToAddress(final String toAddress) {
        this.toAddress = toAddress;
    }
    public String[] getToAllAddress() {
        return toAllAddress;
    }
    public void setToAllAddress(String[] toAllAddress) {
        this.toAllAddress = toAllAddress;
    }
    /**
     * .
     * @return subject.
     */
    public String getSubject() {
        return subject;
    }
    /**
     * .
     * @param subject subject.
     */
    public void setSubject(final String subject) {
        this.subject = subject;
    }
    /**
     * .
     * @return text.
     */
    public String getText() {
        return text;
    }
    /**
     * .
     * @param text text.
     */
    public void setText(final String text) {
        this.text = text;
    }
    public File[] getFiles() {
        return files;
    }
    public void setFiles(File[] files) {
        this.files = files;
    }
}


使用方式

1.      使用说明:

1.      EmailDTO

参数:host         发件人邮箱协议地址,类型String

参数:username    发件人邮箱账户,类型String

参数:password     发件人邮箱密码,类型String

参数:toAddress    收件人地址,类型String

参数:toAllAddress  群发收件人地址,类型String[]

参数:subject      邮件主题,类型String

参数:text                  邮件内容,类型String

参数:files         邮件附件,类型java.io.File[]

2.      Emailer

方法:getEmailer             获取邮件发送器

方法:sendSimpleEmail     发送文本邮件,参数:EmailDTO

方法:sendMineEmail      发送内嵌html的邮件,参数:EmailDTO

方法:sendAllSimpleEmail   群发文本邮件,参数EmailDTO

方法:sendAllMineEmail    群发内嵌html的邮件,参数EmailDTO

3.      案例

EmailDTOemailDTO = new EmailDTO();

emailDTO.setHost(“smtp.gmail.com”);

emailDTO.setUsername(“xxx@gmail.com”);

emailDTO.setPassword(“密码…”);

emailDTO.setSubject("主题");

emailDTO.setText("你好");

emailDTO.setToAddress("邮箱号");

new Emailer(emailDTO).sendSimpleEmail(emailDTO);

 

注意,如果邮件带有附件,请使用sendMineEmail方法或sendAllMineEmail方法

常见错误

550

如果邮箱报550错误,user not permission,说明邮箱需要进行第三方授权,对于126邮箱或163邮箱来说

首先登入网页客户端

然后设置,授权第三方,设置授权密码,最后以授权密码进行代码开发

535

密码错误,邮箱主机错误,或者是没有用授权密码

530 ssl

需要在源代码的构造器中,加入以下代码
            MailSSLSocketFactory sf = new MailSSLSocketFactory();
            sf.setTrustAllHosts(true);
            prop.put("mail.smtp.ssl.enable", "true");
            prop.put("mail.smtp.ssl.socketFactory", sf);



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值