java实现邮件发送代码及详解

    /**
     * 发送邮件
     * @param sysinfoMailConfig 邮件发送配置类
     * @param condition
     * @return
     * @throws Exception
     */
    public Map<String,String> sendMailInfo(SysinfoMailConfig sysinfoMailConfig, Map<String, String> condition) {
        Transport trans = null;
        Map<String,String> map=new HashMap<String,String>();
        map.put("state", "success");
        String message="邮件发送成功!";
        //接收人
        String to=condition.get("to");
        //抄送人
        String cc=condition.get("cc");
        try {
            Session session=null;
            Properties props = System.getProperties();
            props.put("mail.smtp.host", sysinfoMailConfig.getHost());//邮件服务器地址,如qq邮件为smtp.qq.com
            if("1".equals(sysinfoMailConfig.getIsauth())){ //服务器需要身份认证,可根据实际情况自行设置
                props.put("mail.smtp.auth","true");
                //sysinfoMailConfig.getUsername()为发件人邮箱用户名,sysinfoMailConfig.getPassword()为发件人邮箱密码
                SmtpAuth smtpAuth=new SmtpAuth(sysinfoMailConfig.getUsername(),sysinfoMailConfig.getPassword());
                session=Session.getDefaultInstance(props, smtpAuth);
            }else{
                props.put("mail.smtp.auth","false");
                session=Session.getDefaultInstance(props, null);
            }
            Message msg = new MimeMessage(session);
            //设置发件人邮箱及昵称
            Address from_address = new InternetAddress(sysinfoMailConfig.getSendadress(),sysinfoMailConfig.getDisplayname());
            msg.setFrom(from_address);
            //设置邮件接收人
            if(StringUtil.isNotBlank(to)){
                msg.setRecipients(Message.RecipientType.TO,  getInternetAddress(to));
            }
            //设置邮件抄送人
            if(StringUtil.isNotBlank(cc)){
                msg.setRecipients(Message.RecipientType.CC, getInternetAddress(cc));
            }
            msg.setSubject(condition.get("subject"));
            Multipart mp = new MimeMultipart();
            MimeBodyPart mbp_content = new MimeBodyPart();
            //condition.get("mailcontent")为邮件正文内容,为text/html格式
            mbp_content.setContent(condition.get("mailcontent"), "text/html;charset=UTF-8");
            mp.addBodyPart(mbp_content);
            msg.setContent(mp); //Multipart加入到信件
            msg.setSentDate(new Date()); //设置信件头的发送日期
            //发送信件
            msg.saveChanges();
            trans = session.getTransport("smtp");
            trans.connect(sysinfoMailConfig.getHost(), sysinfoMailConfig.getUsername(), sysinfoMailConfig.getPassword());
            trans.sendMessage(msg, msg.getAllRecipients());
        }catch(AuthenticationFailedException e){
            map.put("state", "failed");
            message="邮件发送失败!错误原因:身份验证错误!";
            log.error("--------------------"+condition.get("subject")+to+message+e+"--------------------");
        }catch (MessagingException e) {
            message="邮件发送失败!错误原因:"+e.getMessage();
            map.put("state", "failed");
            log.error("--------------------"+condition.get("subject")+to+message+e+"--------------------");
            Exception ex = null;
            if ((ex = e.getNextException()) != null) {
                log.error("--------------------"+condition.get("subject")+to+"邮件发送失败!错误原因:"+ex+"--------------------");
            }
        } catch (Exception e){
            message = "邮件发送失败!错误原因:"+e.getMessage();
            map.put("state", "failed");
            log.error("--------------------"+condition.get("subject")+to+message+e+"--------------------");
        }finally{
            if(trans!=null){
                try {
                    trans.close();
                } catch (MessagingException e) {
                    log.error("--------------------"+condition.get("subject")+to+e+"--------------------");
                }
            }
        }
        map.put("message", message);
        return map;
    }


    /**
     * 处理收件人邮箱及抄送人邮箱
     * @param mailAdress 多个以;分隔
     * @return
     * @throws Exception
     */
    public InternetAddress[] getInternetAddress(String mailAdress) throws Exception {
        if (mailAdress.length() == 0) {
            return null;
        }
        String []mailAdressArr=mailAdress.split(";");
        InternetAddress[] internetAddresses = new InternetAddress[mailAdressArr.length];
        for (int i = 0; i < mailAdressArr.length; i++) {
            internetAddresses[i]=new InternetAddress(mailAdressArr[i]);
        }
        return internetAddresses;
    }

    //内部类:服务器验证类
    public class SmtpAuth extends Authenticator {
        private String username,password;

        public SmtpAuth(String username,String password){
            this.username = username;
            this.password = password;
        }
        protected javax.mail.PasswordAuthentication getPasswordAuthentication() {
            return new javax.mail.PasswordAuthentication(username,password);
        }
    }

例如qq邮箱设置:

发送邮件时注意事项,对于有些邮箱可能会有拦截机制,注意不要频繁发送

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值