`
雪馨25
  • 浏览: 129584 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

【java】实现发送带附件email

阅读更多

一、目标

用java代码实现发送带附件email的功能

二、学习地址

http://wenku.baidu.com/view/0b5acc82e53a580216fcfe4e.html
http://redleaf.iteye.com/blog/78217

三、前期准备:

增加jar包:javamail1_4_5.zip

下载地址:​http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-eeplat-419426.html#javamail-1.4.5-oth-JPR

四、代码

 

public class SendMailService {
    private MailInformation mailInfor;
    private static SendMailService sendMailService;
    
    public void setMailInfor(MailInformation mailInfor) {
        this.mailInfor = mailInfor;
    }    

        public static SendMailService getService() {
        if (sendMailService == null) {
            sendMailService = new SendMailService();
        }
        return sendMailService;
    }
    /**
     * 此段代码用来发送普通带附件电子邮件
     */
    public void send() throws Exception {
        try {
            Properties props = new Properties(); // 获取系统环境
            Authenticator auth = new Email_Autherticator(); // 进行邮件服务器用户认证
            props.put("mail.smtp.host", mailInfor.getHost());
            props.put("mail.smtp.auth", "true");
            Session session = Session.getDefaultInstance(props, auth);
            // 用于在console中显示执行过程信息
            session.setDebug(true);
            // 设置session,和邮件服务器进行通讯。
            MimeMessage message = new MimeMessage(session);
            message.setSubject(mailInfor.getMail_subject()); // 设置邮件标题
            message.setSentDate(new Date()); // 设置邮件发送日期
            Address address = new InternetAddress(mailInfor.getSendEmail(),
                    mailInfor.getSendPassword());
            message.setFrom(address); // 设置邮件发送者的地址
            Address toAddress = new InternetAddress(mailInfor.getMail_to()); // 设置邮件接收方的地址
            message.addRecipient(Message.RecipientType.TO, toAddress);// 加载收件人地址

            message.setText(mailInfor.getMail_body()); // 设置邮件正文
            // 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
            Multipart multipart = new MimeMultipart();
            // 设置邮件的文本内容
            BodyPart contentPart = new MimeBodyPart();
            contentPart.setText(mailInfor.getMail_body());
            multipart.addBodyPart(contentPart);
            multipart.addBodyPart(contentPart);
            if (!mailInfor.getFile().isEmpty()) {// 有附件
                Enumeration efile = mailInfor.getFile().elements();
                while (efile.hasMoreElements()) {
                    contentPart = new MimeBodyPart();
                    String filename = efile.nextElement().toString(); // 选择出每一个附件名
                    FileDataSource fds = new FileDataSource(filename); // 得到数据源
                    contentPart.setDataHandler(new DataHandler(fds)); // 得到附件本身并至入BodyPart
                    // contentPart.setFileName(fds.getName());
                    // //得到文件名同样至入BodyPart,并解决中文名乱码问题
                    contentPart.setFileName(MimeUtility.encodeText(fds
                            .getName()));
                    multipart.addBodyPart(contentPart);
                }
                mailInfor.getFile().removeAllElements();
            }
            // 将multipart对象放到message中
            message.setContent(multipart, "text/html;charset=gb2312"); // Multipart加入到信件
            // 保存邮件
            message.saveChanges();
            Transport.send(message); // 发送邮件
            
            System.out.println("send ok!");

        } catch (Exception ex) {
            ex.printStackTrace();
            throw new Exception(ex.getMessage());
        }
    }

    /**
     * 用来进行服务器对用户的认证
     */
    class Email_Autherticator extends Authenticator {
        public Email_Autherticator() {
            super();
        }
        Email_Autherticator(String user, String pwd) {
            super();
            mailInfor.setSendEmail(user);
            mailInfor.setSendPassword(pwd);
        }
        public PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(mailInfor.getSendEmail(),
                    mailInfor.getSendPassword());
        }
    }
}

javaBean

public class MailInformation {
// 发送邮件的邮箱地址服务器
    private String host;
    // 这个是你的邮箱用户名以及邮件显示发送者邮箱
    private String sendEmail ;
    // 你的邮箱密码
    private String sendPassword ;
    //邮件发送者显示姓名
    private String sendName ;
     //待接收的邮箱
    private String mail_to ;
    //邮件标题
    private String mail_subject;
    //邮件内容
    private String mail_body ;
    //用于保存发送附件的文件名的集合  
    private Vector<String> file ;
    /**
     * 建立发邮件实体时传入发件人的email信息
     * @param sendEmail email地址
     * @param sendPassword email密码
     * @param sendName 发送邮件中显示发件人姓名
     */
    public MailInformation(String sendEmail,String sendPassword,String sendName){
        this.sendEmail = sendEmail;
        this.sendPassword = sendPassword;
        this.sendName = sendName;
    }
    /**
     * 163邮箱的host
     */
    public void set163Host(){
        host = "smtp.163.com";
    }
    /**
     * 126邮箱的host
     */
    public void set126Host(){
        host = "smtp.126.com";
    }
    /**
     * qq邮箱的host
     */
    public void setQQHost(){
        host = "smtp.qq.com";
    }
    /**
     * 雅虎邮箱的host
     */
    public void setYahooHost(){
        host = "smtp.mail.yahoo.com.cn ";
    }
    /**
     * 获得发送邮件的邮箱地址服务器
     * @return 地址服务器
     */
    public String getHost() {
        return host;
    }
    /**
     * 设置发送邮件的邮箱地址服务器
     * @param host
     */
    public void setHost(String host) {
        this.host = host;
    }
    /**
     * 设置发件人的email
     * @param sendEmail email
     */
    public void setSendEmail(String sendEmail) {
        this.sendEmail = sendEmail;
    }
    /**
     * 得到发件人的email
     * @return sendEmail email
     */
    public String getSendEmail() {
        return sendEmail ;
    }
    /**
     * 设置发件人的email密码
     * @param sendPassword 密码
     */
    public void setSendPassword(String sendPassword) {
        this.sendPassword = sendPassword;
    }
    /**
     * 得到发件人的email密码
     * @return sendPassword 密码
     */
    public String getSendPassword() {
        return sendPassword ;
    }
    /**
     * 得到邮件中显示的发件人姓名
     * @return 发件人姓名
     */
    public String getSendName() {
        return sendName;
    }
    /**
     * 设置邮件中显示的发件人姓名
     * @param sendName 发件人姓名
     */
    public void setSendName(String sendName) {
        this.sendName = sendName;
    }
    /**
     * 得到收件人email
     * @return 收件人email
     */
    public String getMail_to() {
        return mail_to;
    }
    /**
     * 设置收件人email
     * @param mail_to  收件人email
     */
    public void setMail_to(String mail_to) {
        this.mail_to = mail_to;
    }
    /**
     * 邮件标题
     * @return 邮件标题
     */
    public String getMail_subject() {
        return mail_subject;
    }
    /**
     * 设置邮件标题
     * @param mail_subject 邮件标题
     */
    public void setMail_subject(String mail_subject) {
        this.mail_subject = mail_subject;
    }
    /**
     * 得到邮件内容
     * @return 邮件内容
     */
    public String getMail_body() {
        return mail_body;
    }
    /**
     * 设置邮件内容
     * @param mail_body 邮件内容
     */
    public void setMail_body(String mail_body) {
        this.mail_body = mail_body;
    }
    /**
     * 得到附件所在的绝对路径
     * @return 绝对路径
     */
    public Vector<String> getFile() {
        return file;
    }
    /**
     * 天剑附件所在的绝对路径
     * @return 绝对路径
     */
    public void setFile(Vector<String> file) {
        this.file = file;
    }
}

五、调用方式

public static void main(String[] args) {
        SendMailService sendmail = SendMailService.getService();
        MailInformation mailInformation = new MailInformation(
                "发件人email", "发件人email密码", "发件人显示姓名");
        mailInformation.set163Host();
        mailInformation.setMail_subject("测试发送邮件");
        mailInformation.setMail_body("这是一封测试是否能够发送带附件邮件的信");
        mailInformation.setMail_to("收件人email");
        Vector<String> fileStr = new Vector<String>();
        fileStr.add("附件地址绝对路径");
        mailInformation.setFile(fileStr);
        sendmail.setMailInfor(mailInformation);
        try {
            sendmail.send();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

六、问题解决
1、发送邮件的邮箱地址服务器
需要搜索得到发件人邮箱的 SMTP服务器地址,比如126的:http://help.163.com/09/0219/10/52GOPOND007536NI.html

2、中文名附件乱码解决
解决地址:http://ben-sin.iteye.com/blog/387536
方法:contentPart.setFileName(MimeUtility.encodeText (fds.getName()));

 

分享到:
评论

相关推荐

    javaemail发送邮件(带附件)

    javaemail发送邮件(带附件)是使用Java技术实现的邮件发送功能,支持带附件的发送。下面是该功能的知识点总结: 1. 使用JavaMailSenderImpl类来发送邮件,需要设置SMTP服务器、用户名、密码等参数。 2. 使用...

    java 发送附件mail

    总结一下,Java发送带有附件的邮件涉及到JavaMail API的使用,包括配置SMTP服务器、创建邮件对象、添加内容和附件,以及发送邮件等步骤。理解这些步骤和相关类的作用是实现此功能的关键。在处理不同类型的邮件时,...

    java实现发送带有附件的邮件

    在Java编程语言中,发送带有附件的邮件是一个常见的任务,特别是在...希望这个详细的解释能帮助你在学习和实践中更好地理解和实现Java发送带有附件的邮件功能。记得在实际使用时替换示例中的SMTP服务器配置和文件路径。

    java email 发送带附件的邮件

    在本文中,我们将深入探讨如何使用JavaMail API来发送带有附件的电子邮件。 首先,我们需要理解JavaMail的基本组件。`javax.mail.Session`是JavaMail的核心,用于管理邮件会话和配置邮件服务器信息。`Message`对象...

    java代码实现QQ邮箱发送附件

    本示例将详细讲解如何使用Java实现通过QQ邮箱发送附件的功能。这个功能主要依赖于JavaMail API,它是一个开源库,为Java开发者提供了处理电子邮件的能力。 首先,我们需要在项目中引入JavaMail相关的依赖。如果你...

    java实现email发送

    本文将深入探讨如何使用Java实现电子邮件的发送功能,包括向多个收件人发送邮件。我们将主要涉及JavaMail API,它是一个用于处理邮件的开源库。 JavaMail API是Java平台上的标准API,提供了创建、发送和接收邮件的...

    java email和email附件发送

    3. **添加附件**:如果需要发送附件,可以使用`Multipart`对象来组合文本和附件。创建一个`MimeMultipart`实例,并添加`MimeBodyPart`来表示附件。 ```java MimeBodyPart attachmentPart = new MimeBodyPart(); ...

    java实现发送邮件功能源码+jar

    下面是一个简单的Java发送邮件的示例代码: ```java Properties props = new Properties(); props.put("mail.smtp.host", "smtp.example.com"); props.put("mail.smtp.port", "587"); props.put("mail.smtp....

    java实现发送email

    java实现发送email,已经经过调试,我把发送email这项功能封装成了一个实体类,可以添加多个附件,使用时可以直接调用使用。里面还有一个你很可能遇到的一个bug,已经给出解决方法。我把所需要的包也已经传上,放进...

    SpringBoot中整合Mail实现发送带附件的邮件示例代码

    在Spring Boot框架中,整合JavaMailSender接口可以轻松地实现实现发送电子邮件的功能,包括发送带附件的邮件。本文将详细介绍如何在Spring Boot项目中配置和使用JavaMailSender来发送带有附件的邮件。 首先,我们...

    java邮件发送(含附件发送)源码

    如果要发送附件,可以使用`Multipart`和`BodyPart`来构建复杂的邮件结构。 ```java Multipart multipart = new MimeMultipart(); // 添加文本正文 BodyPart messageBodyPart = new MimeBodyPart(); ...

    java 发送邮件带附件

    发送邮件到指定邮箱,可以携带附件,html,实现登录验证等功能。

    java简单的发送邮件、附件

    在使用Java发送邮件前,你需要在邮件服务提供商的账户设置中开启相应的服务。以QQ邮箱为例,你需要在QQ邮箱的设置中开启POP3/SMTP服务以及IMAP/SMTP服务。这些服务允许Java程序通过SMTP协议发送邮件,并可能通过POP3...

    java邮件发送例子 apache email demo

    在这个例子中,我们将深入探讨如何使用Apache Commons Email库在Java中实现邮件发送。 首先,你需要在项目中引入Apache Commons Email的依赖。如果是Maven项目,可以在pom.xml文件中添加以下依赖: ```xml ...

    java发送email邮件.

    demo介绍:http://blog.csdn.net/love_xiolan/article/details/56016576 java发送email邮件 1.发送普通email邮件 2.发送带附件的email邮件 3.邮件抄送和密送 4.发送html邮件 5.发送模板文件

    Java通过Apache提供的Commons Email工具类实现邮箱发送验证码

    总之,Apache Commons Email为Java开发者提供了一个强大且易于使用的邮件发送工具,通过简单的代码即可实现包括发送验证码在内的各种邮件功能。在实际开发中,结合业务需求进行适当的优化和扩展,可以极大地提升开发...

    利用Java并配置Foxmail发送邮箱(携带附件)

    发送附件是通过`Multipart`对象实现的,它允许我们组合多个部分,包括文本和二进制文件。首先,创建一个`MimeBodyPart`对象来表示附件,然后将其添加到`Multipart`: ```java MimeBodyPart attachmentPart = new ...

    java实现发送email小案例

    本篇文章将详细讲解如何使用Java实现一个简单的电子邮件发送案例。我们将关注以下关键知识点: 1. **JavaMail API**:JavaMail API 是Java平台上的标准库,用于处理电子邮件。它提供了丰富的接口和类来创建、发送和...

    java实现发送邮件,注册邮件激活账户

    首先,JavaMail API是Java中用于发送邮件的核心库。它提供了一系列接口和类,使得我们可以轻松地与SMTP(Simple Mail Transfer Protocol)服务器进行通信。要使用JavaMail,我们需要在项目中引入对应的依赖,如Maven...

    java 邮件发送,支持附件发送

    本教程将深入讲解如何使用Java实现邮件发送功能,包括添加附件和向多个收件人发送邮件。 首先,我们来看`Mailer.java`,这个类通常会封装邮件发送的核心逻辑。在Java中,我们主要依赖JavaMail API来实现邮件的发送...

Global site tag (gtag.js) - Google Analytics