java发送邮件

来源:互联网 发布:如何寻找淘宝达人 编辑:程序博客网 时间:2024/06/05 18:12
package email;

import java.util.Properties;  
import javax.activation.DataHandler;  
import javax.activation.FileDataSource;  
import javax.mail.*;  
import javax.mail.internet.*;  
/**
 * 
 *@author yang
 *@类功能说明:测试发送邮件
 *@修改日期:2015-7-28 下午04:10:50
 *@修改说明:本程序用java来实现Email的发送,所用到的协议为:SMTP,端口号为25;
 *     方法:用Socket进行实现,打开客户端的Socket,并连接上服务器
 *      如:Socket sockClient = new Socket("smtp.qq.com",23);这表示发件方连接的是QQ邮箱的服务器,端口号为23
 *@创建时间:2015-7-28 下午04:10:50
 */
public class Email{  
       
    private MimeMessage mimeMsg;    //  整个MIME邮件对象 
    private Session     session;    //  专门用来发送邮件的Session会话 
    private Properties  props;      //  封装邮件发送时的一些配置信息的一个属性对象 
    private String      username;   //  发件人的用户名 
    private String      password;   //  发件人的密码
    private Multipart   mp;         //  用来实现附件添加的组件 
    /** 
     * 发送参数初始化,有的服务器不需要用户验证,所以这里对用户名和密码进行初始化"" 
     * SMTP服务器的地址,比如要用QQ邮箱,哪么应为:"smtp.qq.com",126为:"smtp.126.com" 
     */
    
    public Email(String smtp){  
        username = "";  
        password = "";  
        setSmtpHost(smtp);   // 设置邮件服务器  
        createMimeMessage(); // 创建邮件   
    }  
    /** 
     * 设置发送邮件的主机(JavaMail需要Properties来创建一个session对象。 
     * 它将寻找字符串"mail.smtp.host",属性值就是发送邮件的主机); 
     */  
    public void setSmtpHost(String hostName){  
        System.out.println("设置系统属性:mail.smtp.host = " + hostName);  
        if (props == null)  
            props = System.getProperties();  
        props.put("mail.smtp.host", hostName);  
    }  
    /** 
     * (这个Session类代表JavaMail 中的一个邮件session. 每一个基于 
     * JavaMail的应用程序至少有一个session但是可以有任意多的session。 在这个例子中, 
     * Session对象需要知道用来处理邮件的SMTP 服务器。 
     */  
    public boolean createMimeMessage(){  
        try{  
            System.out.println("准备获取邮件会话对象!");  
            // 用props对象来创建并初始化session对象  
            session = Session.getDefaultInstance(props, null);  
        }  
        catch (Exception e){  
            System.err.println("获取邮件会话对象时发生错误!" + e);  
            return false;  
        }  
        System.out.println("准备创建MIME邮件对象!");  
        try{  
            // 用session对象来创建并初始化邮件对象  
            mimeMsg = new MimeMessage(session);  
            // 生成附件组件的实例  
            mp = new MimeMultipart();  
        }  
        catch (Exception e){  
            System.err.println("创建MIME邮件对象失败!" + e);  
            return false;  
        }  
        return true;  
    }  
    /** 
     * 设置SMTP的身份认证 
     */  
    public void setNeedAuth(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){  
        System.out.println("程序得到用户名与密码");  
        username = name;  
        password = pass;  
    }  
    /** 
     * 设置邮件主题 
     *  
     * @param mailSubject 
     * @return 
     */  
    public boolean setSubject(String mailSubject){  
        System.out.println("设置邮件主题!");  
        try{  
            mimeMsg.setSubject(mailSubject);  
        }  
        catch (Exception e){  
            System.err.println("设置邮件主题发生错误!");  
            return false;  
        }  
        return true;  
    }  
    /** 
     * 设置邮件内容,并设置其为文本格式或HTML文件格式,编码方式为UTF-8 
     *  
     * @param mailBody 
     * @return 
     */  
    public boolean setBody(String mailBody){  
        try{  
            System.out.println("设置邮件体格式");  
            BodyPart bp = new MimeBodyPart();  
            bp.setContent("<meta http-equiv=Content-Type content=text/html; charset=UTF-8>" + mailBody,  
                            "text/html;charset=UTF-8");  
            // 在组件上添加邮件文本  
            mp.addBodyPart(bp);  
        }  
        catch (Exception e){  
            System.err.println("设置邮件正文时发生错误!" + e);  
            return false;  
        }  
        return true;  
    }  
    /** 
     * 增加发送附件 
     *  
     * @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);  
        }catch (Exception e){  
            System.err.println("增加邮件附件:" + filename + "发生错误!" + e);  
            return false;  
        }  
        return true;  
    }  
    /** 
     * 设置发件人地址 
     *  
     * @param from 
     *            发件人地址 
     * @return 
     */  
    public boolean setFrom(String from){  
        System.out.println("设置发信人!");  
        try {  
            mimeMsg.setFrom(new InternetAddress(from));  
        }catch (Exception e){  
            return false;  
        }  
        return true;  
    }  
    /** 
     * 设置收件人地址 
     *  
     * @param to 
     *            收件人的地址 
     * @return 
     */  
    public boolean setTo(String to){  
        System.out.println("设置收信人");  
        if (to == null)  
            return false;  
        try{  
            mimeMsg.setRecipients(javax.mail.Message.RecipientType.TO, InternetAddress.parse(to));  
        }catch (Exception e){  
            return false;  
        }  
        return true;  
    }  
    /** 
     * 发送附件 
     *  
     * @param copyto 
     * @return 
     */  
    public boolean setCopyTo(String copyto){  
        System.out.println("发送附件到");  
        if (copyto == null)  
            return false;  
        try{  
            mimeMsg.setRecipients(javax.mail.Message.RecipientType.CC, InternetAddress.parse(copyto));  
        }catch (Exception e){  
            return false;  
        }  
        return true;  
    }  
    /** 
     * 发送邮件 
     *  
     * @return 
     */  
    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(javax.mail.Message.RecipientType.TO));  
            System.out.println("发送邮件成功!");  
            transport.close();  
        }catch (Exception e){  
            System.err.println("邮件发送失败!" + e.getMessage());  
            e.printStackTrace();  
            return false;  
        }  
        return true;  
    }  
    
    
    public static void main(String[] args){  
        /** 
         *************切切注意******** 
         * 
         *注意  用此程序发邮件必须邮箱支持smtp服务  在2006年以后申请的163邮箱是不支持的 
         *我知道sina邮箱  sohu邮箱 qq邮箱支持  但是sina和qq邮箱需要手工设置开启此功能   
         *所以在测试时最好使用这三个邮箱    
         *sina邮箱的smtp设置方法如下 
         *登录sina邮箱 依次点击 邮箱设置--->帐户--->POP/SMTP设置 将开启复选框选中 然后保存 
         * 
         */  

        Email themail = new Email("smtp.126.com");//这里以网易126邮箱为例子  

// Email themail = new Email("smtp.exmail.qq.com");        //腾讯企业邮箱

        String mailbody = "<a href='http://www.wphtu.ah.cn/' target='_blank'>哈哈</a>发送成功了哦";//邮件正文  
        themail.setNeedAuth(true);  
        themail.setSubject("JAVA发邮件的测试"); //邮件主题  
        themail.setBody(mailbody); //邮件正文  
        themail.setTo("1714004716@qq.com"); //收件人地址  
        themail.setFrom("highfei2011@126.com");         //发件人地址  ,注意发件人的邮箱必须是126或者网易邮箱
        themail.addFileAffix("E:/log/md/error.log");                // 附件文件路径,例如:C:/222.jpg,*注;"/"的写法; 如果没有可以不写  
        themail.setNamePass("highfei2011@126.com", "*******");//发件人地址和密码 **改为相应邮箱密码  
        themail.sendout();  
        
        //注意如果在发送时报错:未找到类的错误,那么删除myEclipse安装目录下的:javaee.jar包
        //我的安装目录是D:/soft_install/plugins/com.genuitec.eclipse.j2eedt.core_8.6.0.me201007292038/data/libraryset/EE_5
    }  
1 0