使用JavaMail发送邮件的Java类

使用JavaMail发送邮件需要用到mail.jar和activtion.jar两个包。

该类实现了较完整的邮件发送功能,包括以HTML格式发送,添加附件和抄送人。下面是具体的代码:

Mail.java:

package cn.cgw.util.mail;  

import java.util.Properties;  

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;  

public class Mail {   

    private MimeMessage mimeMsg; //MIME邮件对象
    private Session session; //邮件会话对象
    private Properties props; //系统属性
    private boolean needAuth = false; //smtp是否需要认证
    //smtp认证用户名和密码
    private String username;
    private String password;
    private Multipart mp; //Multipart对象,邮件内容,标题,附件等内容均添加到其中后再生成MimeMessage对象   

    /**
     * Constructor
     * @param smtp 邮件发送服务器
     */
    public Mail(String smtp){
        setSmtpHost(smtp);
        createMimeMessage();
    }   

    /**
     * 设置邮件发送服务器
     * @param hostName String
     */
    public void setSmtpHost(String hostName) {
        System.out.println("设置系统属性:mail.smtp.host = "+hostName);
        if(props == null)
            props = System.getProperties(); //获得系统属性对象
        props.put("mail.smtp.host",hostName); //设置SMTP主机
    }   

    /**
     * 创建MIME邮件对象
     * @return
     */
    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;
        }
    }     

    /**
     * 设置SMTP是否需要验证
     * @param need
     */
    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");
        }
    }   

    /**
     * 设置用户名和密码
     * @param name
     * @param pass
     */
    public void setNamePass(String name,String pass) {
        username = name;
        password = pass;
    }   

    /**
     * 设置邮件主题
     * @param mailSubject
     * @return
     */
    public boolean setSubject(String mailSubject) {
        System.out.println("设置邮件主题!");
        try{
            mimeMsg.setSubject(mailSubject);
            return true;
        }
        catch(Exception e) {
            System.err.println("设置邮件主题发生错误!");
            return false;
        }
    }  

    /**
     * 设置邮件正文
     * @param mailBody String
     */
    public boolean setBody(String mailBody) {
        try{
            BodyPart bp = new MimeBodyPart();
            bp.setContent(""+mailBody,"text/html;charset=GBK");
            mp.addBodyPart(bp);   

            return true;
        } catch(Exception e){
        System.err.println("设置邮件正文时发生错误!"+e);
        return false;
        }
    }
    /**
     * 添加附件
     * @param filename String
     */
    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;
        }
    }   

    /**
     * 设置发信人
	 * 查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/Java/
     * @param from String
     */
    public boolean setFrom(String from) {
        System.out.println("设置发信人!");
        try{
            mimeMsg.setFrom(new InternetAddress(from)); //设置发信人
            return true;
        } catch(Exception e) {
            return false;
        }
    }
    /**
     * 设置收信人
     * @param to String
     */
    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;
        }
    }   

    /**
     * 设置抄送人
     * @param copyto String
     */
    public boolean setCopyTo(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));
            transport.sendMessage(mimeMsg,mimeMsg.getRecipients(Message.RecipientType.CC));
            //transport.send(mimeMsg);   

            System.out.println("发送邮件成功!");
            transport.close();   

            return true;
        } catch(Exception e) {
            System.err.println("邮件发送失败!"+e);
            return false;
        }
    }   

    /**
     * 调用sendOut方法完成邮件发送
     * @param smtp
     * @param from
     * @param to
     * @param subject
     * @param content
     * @param username
     * @param password
     * @return boolean
     */
    public static boolean send(String smtp,String from,String to,String subject,String content,String username,String password) {
        Mail theMail = new Mail(smtp);
        theMail.setNeedAuth(true); //需要验证  

        if(!theMail.setSubject(subject)) return false;
        if(!theMail.setBody(content)) return false;
        if(!theMail.setTo(to)) return false;
        if(!theMail.setFrom(from)) return false;
        theMail.setNamePass(username,password);  

        if(!theMail.sendOut()) return false;
        return true;
    }  

    /**
     * 调用sendOut方法完成邮件发送,带抄送
     * @param smtp
     * @param from
     * @param to
     * @param copyto
     * @param subject
     * @param content
     * @param username
     * @param password
     * @return boolean
     */
    public static boolean sendAndCc(String smtp,String from,String to,String copyto,String subject,String content,String username,String password) {
        Mail theMail = new Mail(smtp);
        theMail.setNeedAuth(true); //需要验证  

        if(!theMail.setSubject(subject)) return false;
        if(!theMail.setBody(content)) return false;
        if(!theMail.setTo(to)) return false;
        if(!theMail.setCopyTo(copyto)) return false;
        if(!theMail.setFrom(from)) return false;
        theMail.setNamePass(username,password);  

        if(!theMail.sendOut()) return false;
        return true;
    }  

    /**
     * 调用sendOut方法完成邮件发送,带附件
     * @param smtp
     * @param from
     * @param to
     * @param subject
     * @param content
     * @param username
     * @param password
     * @param filename 附件路径
     * @return
     */
    public static boolean send(String smtp,String from,String to,String subject,String content,String username,String password,String filename) {
        Mail theMail = new Mail(smtp);
        theMail.setNeedAuth(true); //需要验证  

        if(!theMail.setSubject(subject)) return false;
        if(!theMail.setBody(content)) return false;
        if(!theMail.addFileAffix(filename)) return false;
        if(!theMail.setTo(to)) return false;
        if(!theMail.setFrom(from)) return false;
        theMail.setNamePass(username,password);  

        if(!theMail.sendOut()) return false;
        return true;
    }  

    /**
     * 调用sendOut方法完成邮件发送,带附件和抄送
     * @param smtp
     * @param from
     * @param to
     * @param copyto
     * @param subject
     * @param content
     * @param username
     * @param password
     * @param filename
     * @return
     */
    public static boolean sendAndCc(String smtp,String from,String to,String copyto,String subject,String content,String username,String password,String filename) {
        Mail theMail = new Mail(smtp);
        theMail.setNeedAuth(true); //需要验证  

        if(!theMail.setSubject(subject)) return false;
        if(!theMail.setBody(content)) return false;
        if(!theMail.addFileAffix(filename)) return false;
        if(!theMail.setTo(to)) return false;
        if(!theMail.setCopyTo(copyto)) return false;
        if(!theMail.setFrom(from)) return false;
        theMail.setNamePass(username,password);  

        if(!theMail.sendOut()) return false;
        return true;
    }  

}

测试代码:

public static void main(String[] args){
    String smtp = "SMTP服务器";
    String from = "发信人";
    String to = "收信人";
    String copyto = "抄送人";
    String subject = "邮件主题";
    String content = "邮件内容";
    String username="用户名";
    String password="密码";
    String filename = "附件路径,如:F:\\笔记<a>\\struts2</a>与mvc.txt";
    Mail.sendAndCc(smtp, from, to, copyto, subject, content, username, password, filename);
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索string
, 邮件
, return
, returnning
, smtp
, false
, param
, Java邮件javax.mail
java发送javax.mail
java mail 发送邮件、javamail发送html邮件、javamail发送qq邮件、javamail发送模板邮件、javamail发送邮件附件,以便于您获取更多的相关知识。

时间: 2024-10-29 08:20:38

使用JavaMail发送邮件的Java类的相关文章

基于java使用JavaMail发送邮件_java

一.邮件的相关概念 邮件协议.主要包括: SMTP协议:Simple Mail Transfer Protocol,即简单邮件传输协议,用于发送电子邮件 POP3协议:Post Office Protocol 3,即邮局协议的第三个版本,用于接收邮件 IMAP协议:Internet Message Access Protocol,即互联网消息访问协议,是POP3的替代协议 --------------------------------------------------------------

javamail发送邮件问题

问题描述 javamail发送邮件问题 java发送邮件,在网上能到找到很多代码,但是都是最后利用mian方法来测试,请问可以直接调用么? 我利用main方法测试成功了,可是直接在程序中调用的话,另外一个类里面调用send()方法,就报javax.mail.NoSuchProviderException: Unable to locate provider for protocol: smtp错误了.mail.java包等都导入成功了,请教这是什么问题啊 解决方案 检查下你的smtp服务器是否正

如何使用JavaMail发送邮件_java

现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件.邮件里面的内容可能包含了我们的注册的用户名和密码以及一个激活账户的超链接等信息.今天我们也来实现一个这样的功能,用户注册成功之后,就将用户的注册信息以Email的形式发送到用户的注册邮箱当中,实现发送邮件功能就得借助于JavaMail了. 一.搭建开发环境 1.1.创建Web项目 1.2.用户注册的Jsp页面 register.jsp <%@ page language="java" pag

Java使用JavaMail发送邮件的方法_java

本文实例讲述了Java使用JavaMail发送邮件的方法.分享给大家供大家参考,具体如下: 代码一.Email_Autherticator.java 服务器验证代码 import javax.mail.Authenticator; import javax.mail.PasswordAuthentication; public class Email_Autherticator extends Authenticator { String username = "你邮箱的用户名"; S

javamail发送邮件

发送邮件 /*在java版经常看到有人问如何用javamail发送邮件?如何接收邮件?如何访问多个文件夹等.问题零散,而历史的回复早已经淹没在问题的海洋之中. 本人之前所做过一个java项目,其中包含有WebMail功能,当初为用java实现而对javamail摸索了一段时间,总算有点收获.看到论坛中的经常有此方面的问题,因此把我的一些经验帖出来,希望对大家有些帮助. 此篇仅介绍用javamail实现发送邮件功能,其中涉及smtp认证,邮件附件发送,及HTML内容邮件等.其它有关多邮箱的实现,接

javamail发送邮件的简单实例

今天学习了一下JavaMail,javamail发送邮件确实是一个比较麻烦的问题. 为了以后使用方便,自己写了段代码,打成jar包,以方便以后使用.呵呵 以下三段代码是我的全部代码,朋友们如果想用,直接复制即可. 第一个类:MailSenderInfo.java package com.util.mail; /** *//** * 发送邮件需要使用的基本信息 *author by wangfun http://www.5a520.cn 小说520 */ import java.util.Prop

javamail发送邮件的简单实例(转)

  javamail发送邮件的简单实例 今天学习了一下JavaMail,javamail发送邮件确实是一个比较麻烦的问题.为了以后使用方便,自己写了段代码,打成jar包,以方便以后使用.呵呵 以下三段代码是我的全部代码,朋友们如果想用,直接复制即可. 第一个类:MailSenderInfo.java  package com.util.mail;    /**    * 发送邮件需要使用的基本信息  *author by wangfun   */     import java.util.Pro

使用JavaMail发送邮件保证成功的方法_java

前言 相信大家应该都知道,一般的开放的api给我们调用都会有个返回值或者状态码,来告诉我们执行成功与否.但是JavaMail却没有提供这样一个返回值. 所以在调用JavaMail发送邮件的时候,我们只能通过catch异常的方式来判断邮件是否发送成功.我们认为只要没有异常发生,那么邮件就能发送成功.那么我们就来分析一下JavaMail为什么没有提供返回值,和通过异常判断邮件发送成功状态是否靠谱. JavaMail发送邮件原理 在使用JavaMail进行发送邮件时,我们必须提供一个邮件会话.创建邮件

[JAVA100例]047、使用JavaMail发送邮件

import java.util.*; import java.io.*; import javax.mail.*; import javax.mail.internet.*; import javax.activation.*; /** * <p>Title: 使用javamail发送邮件</p> * <p>Description: 演示如何使用javamail包发送电子邮件.这个实例可发送多附件</p> * <p>Copyright: Cop