zoukankan      html  css  js  c++  java
  • Java自动发送带图片邮件(带附件)

    网上类似的代码很多,但是在实际使用中大多并不能运行,这次刚好项目要用到这个功能,就把代码贴出来,供大家参考。

    代码直接就能够运行,并且我在上面有了详细的注释,不过还有几个注意点需要告知,特别是第一次使用的朋友,一定要注意以下几点:

    1.一定要开启邮箱的SMTP服务,这个具体的我不多说了,网上这个很多,基本上都有图,直接了当

    2.开启SMTP后,代码里面的密码并非是邮箱的登录密码,而是邮箱生成的授权码,这个在完成第一步后邮箱会显示你的授权码。

    3.目前我看到的主要关于自动发邮件的错误一般是530,关于这个错误只需要加上

    props.setProperty("mail.smtp.starttls.enable", "true"); 

    这条代码就够了。


    package com.jjrt.eid.utils;
    
    import javax.mail.*;  
    import javax.mail.internet.*;  
    import java.util.*;  
    import javax.activation.*;  
    
    /**
     * 自动发送邮件(带附件)
     * @作者:JackHisen(GWD)
     * @项目名:eid-server-20170416
     * @时间:2017-4-27 上午10:58:39
     * @version 1.0
     */
    public class EmailSend {
    
        private MimeMessage mimeMsg;      //MIME邮件对象
        private Session session;          //邮件会话对象
        private Properties props;         //系统属性
        private boolean needAuth=false;   //smtp是否需要认证
        private String username="";       //smtp认证用户名和密码
        private String password="";    
        private Multipart mp;             //Multipart对象,邮件内容、标题、附件等内容
        
        public EmailSend(){
            //setSmtpHost(getConfig.mailHost); //如果没有指定有加你服务
            createMimeMessage();
        }
        
        public EmailSend(String smtp){
            setSmtpHost(smtp);
            createMimeMessage(); 
        }
        
        public void setSmtpHost(String hostName){
            System.out.println("设置系统属性:mail.stmp.host="+hostName);
            if(props==null) props=System.getProperties();                 //获取系统属性
            props.put("mail.smtp.host",hostName);                         //设置SMTP主机
            props.setProperty("mail.smtp.starttls.enable", "true"); //在邮箱中设置了SMTP服务开启后依然报530错误,一般是由于缺少这句代码引起的
        }
        
        public boolean createMimeMessage(){
            try{
                System.out.println("准备获取邮件会话对象!");
                session=Session.getDefaultInstance(props,null);
            }catch(Exception e){
                System.err.println("获取邮件会话对象时发生错误!"+e);
                return false;
            }
            System.out.println("准备创建MIME邮件对象");
            try{
                mimeMsg =new MimeMessage(session);//创建MIME邮件对象
                mp=new MimeMultipart();
                
                return true;
            }catch(Exception e){
                System.err.println("创建MIME邮件对象失败"+e);
                return false;
            }
        }
        
        public void setNeedAnth(boolean need){
            System.out.println("设置smtp身份认证:mail.smtp.auth="+need);
            if(props==null) props=System.getProperties();
            
            if(need){
                props.put("mail.smtp.auth", "true");
            }else{
                props.put("mail.smtp.auth", false);
            }
        }
        
        public void setNamePass(String name,String pass){
            username=name;
            password=pass;
        }
        
        public boolean setSubject(String mailSubject){
            System.out.print("设置邮件主题");
            try{
                mimeMsg.setSubject(mailSubject);
                return true;
            }catch(Exception e){
                System.err.println("设置邮件主题发生错误");
                return false;
            }
        }
        
        /**
         * 
         * @param companyName 公司名称
         * @param appName 应用名称
         * @param ContactName 联系人姓名
         * @param num 联系人手机号
         * @param email 联系人邮箱
         * @param logoUrl logo图片的地址
         * @return
         */
        public boolean setBody(String companyName,String appName,String ContactName,String num,String email,String logoUrl){
            try{
                BodyPart bp=new MimeBodyPart();
                //bp.setContent("<meta http-equiv=Content-Type content=text/html; charset=UTF-8/>"+mailBody+ "<img src="G://gwd.jpg">","text/html;charset=gb2312");
                bp.setContent(
                              "<meta http-equiv=Content-Type content=text/html; charset=UTF-8/>"+
                              "尊敬的"+companyName+":"+"<br/>"+
                              "恭喜您的“"+appName+"应用”已经成功注册成为“公安部公民网络身份识别系统”的XXX应用!" +"<br/>"+
                              "您的注册信息见本邮件的附件。"+"<br/>"+"请注意妥善保存好您的注册信息!"+
                              "<h2>"+ContactName+"</h2>"+
                              "<h2>客户经理</h2>"+"<br/>"+ 
                              "<img src='"+logoUrl+"' width="120px">"+"<br/>"+ //logoUrl为服务器上照片地址
                              "上海XXXXXX科技有限公司"+"<br/>"+
                              "手机:+86-"+num+"<br/>"+
                              "Email:"+"<a>"+email+"</a>"+"<br/>"+
                              "地址:上海市闵行区紫竹科技园区紫星路XXXX", 
                                 "text/html;charset=gb2312");
                
                mp.addBodyPart(bp);
                
                return true;
            }catch(Exception e){
                System.err.println("设置邮件正文时发生错误!"+e);
                return false;
            }
        }
        
        /**
         * 添加附件
         * @param filename
         * @return
         */
        public boolean addFileAffix(String filename){
            System.out.println("增加邮件附件:"+filename);
            try{
                BodyPart bp=new MimeBodyPart();
                FileDataSource fileds=new FileDataSource(filename);
                bp.setDataHandler(new DataHandler(fileds));
                bp.setFileName(fileds.getName());
                mp.addBodyPart(bp);
                return true;
            }catch(Exception e){
                System.err.println("增加邮件附件"+filename+"发生错误:"+e);
                return false;
            }
        }
        
        public boolean setForm(String from){
            System.out.println("设置发信人");
            try{
                mimeMsg.setFrom(new InternetAddress(from));
                return true;
            }catch(Exception e){
                return false;
            }
        }
        
        public boolean setTo(String to){
            if(to==null) return false;
            try{
                mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
                return true;
            }catch(Exception e){
                return false;
            }
        }
        
        public boolean setCopyTp(String copyto){
            if(copyto==null) return false;
            try{
                mimeMsg.setRecipients(Message.RecipientType.CC, (Address[])InternetAddress.parse(copyto));
                return true;
            }catch(Exception e){
                return false;
            }
        }
        
        public boolean sendout(){
            try{
                mimeMsg.setContent(mp);
                //mimeMsg.saveChanges();
                
                System.out.println("正在发送邮件....");
                
                Session mailSession=Session.getInstance(props,null);
                Transport transport=mailSession.getTransport("smtp");
                transport.connect((String)props.get("mail.smtp.host"),username,password);
                transport.sendMessage(mimeMsg, mimeMsg.getRecipients(Message.RecipientType.TO));
                
                System.out.println("发送邮件成功!");
                transport.close();
                
                return true;
            }catch(Exception e){
                System.out.println("邮件发送失败!"+e);
                return false;
            }
        }
        
        /**
         * 发送邮件
         * @param companyName 公司名称
         * @param appName 应用名称
         * @param contactName 联系人姓名
         * @param num 联系人手机号
         * @param contactEmail 联系人邮箱
         * @param logoUrl logo图片地址
         * @param title 邮件主题
         * @param email 发件人
         * @param passwd 邮件授权码
         * @param toEmail 收件人
         * @param enclosureName 附件路径
         */
        public  Boolean sendToSomebody(String companyName,String appName,String contactName,String num,String contactEmail,String logoUrl,String title,String email,String passwd,String toEmail,String enclosureName ){
            boolean bool=false;
            //指明让那个smtp转发
            EmailSend themail=new EmailSend("smtp.qq.com");
            
            //校验身份
            themail.setNeedAnth(true);
            
            //邮件标题
            if(themail.setSubject(title)==false) return bool;
            //将要发送的内容放入邮件体
            if(themail.setBody(companyName,appName,contactName,num,contactEmail,logoUrl)==false) return bool;
            
            //发往哪里
            if(themail.setTo(toEmail)==false) return bool;
            //谁发送的
            if(themail.setForm("XXXXXXX@qq.com")==false) return bool;
            
            //发送附件
            enclosureName=transferPath(enclosureName);
            if(themail.addFileAffix(enclosureName)==false) return bool;
            //将在163网站上的邮件用户名和密码放入邮件体
            themail.setNamePass(email,passwd);//密码为授权码,不是邮件登录密码
            //发送
            if(themail.sendout()==false) return bool;
            bool=true;
            return bool;
        }
        
        /**
         * 将附件地址进行字符转义
         * @param filepath 附件路径(包括附件名)
         * @return
         */
        public  String transferPath(String filepath){
            filepath.replace("/", "//");
            return filepath;
        }
        
        
    }
    
    
    
    


  • 相关阅读:
    按照步长切图
    labelme标记的.json转换成图片
    具有中文名称图片格式的读取
    如何用labelme标注图片产生box训练
    weblogic修改密码&密码重置
    Oracle中统计数据占用空间大小
    Maven篇----10 常见问题记录
    Maven篇----09 一些有趣的特性使用
    Maven篇----08 pom.xml详解
    Maven篇----07 如何将普通java项目转换为maven项目
  • 原文地址:https://www.cnblogs.com/gwd1154978352/p/6831908.html
Copyright © 2011-2022 走看看