`

java_mail收发邮件,绝对简单,绝对可用

阅读更多

关于javamail,网上沸沸扬扬的说了一大堆,代码也是东一块西一块的。其实理论知识再说也不如真正给个简单的代码看看,这个代码绝对简单,绝对可以运行。

代码如下:至于lib包需要的可以从以下地址获得。

http://www2.cnalbum.cn/java/?C=D;O=D

ConstantsMail.java

package com.test.mail;

public class ConstantsMail {

    //"mail.smtp.host"  通常无需更改
    public static final String MAIL_SMTP_HOST = "mail.smtp.host";
    //"mail.smtp.auth"  通常无需更改
    public static final String MAIL_SMTP_AUTH = "mail.smtp.auth";
    //需要身份验证  通常无需更改
    public static final String TRUE = "true";
    //连接协议 "pop3"  通常无需更改
    public static final String POP3 = "pop3";
    //收件箱  通常无需更改
    public static final String INBOX = "INBOX";
   
   
    //连接的smtp服务器的名称
    public static final String CONN_SMTP_SERVER_NAME = "smtp.softbrain.com.cn";
    //连接服务器用户名 
    public static final String CONN_SERVER_USER_NAME = "jiangbin@softbrain.com.cn";
    //连接服务器密码 
    public static final String CONN_SERVER_PASSWORD = "softbrain";
   
   
    //邮件标题
    public static final String MAIL_TITLE = "title";
    //邮件内容
    public static final String MAIL_CONTENT = "content";
   
   
    //邮件接收格式
    public static final String MAIL_REC_PATTERN_1 = "text/html; charset=GB2312";
    public static final String MAIL_REC_PATTERN_2 = "texl/plain";
    public static final String MAIL_REC_PATTERN_3 = "multipart/alternative";
    public static final String MAIL_REC_PATTERN_4 = "multipart/related";
   
   
    //发件人地址和姓名 
    public static final String MAIL_SENDER_ADDRESS = "jiangbin@softbrain.com";
    public static final String MAIL_SENDER_NAME = "aaaaa";
    //收件人地址和姓名
    public static final String MAIL_RECEIVER_ADDRESS = "jiangbin19830421@163.com";
    public static final String MAIL_RECEIVER_NAME = "bbbbbb";
    //抄送人地址和姓名
    public static final String MAIL_COPYER_ADDRESS = "lanisha00006@163.com";
    public static final String MAIL_COPYER_NAME = "lanisha00006";
}

MailUtil.java

package com.test.mail;

import java.util.Properties;

import javax.mail.Folder;
import javax.mail.MessagingException;

public class MailUtil {

    //获得所有邮件
    public static int getMessageCount(Folder folder) throws MessagingException{
        int count = 0 ;
        if(folder != null)
            return folder.getMessageCount();
        return count ;
    }

    //获得新邮件的个数
    public static int getNewMessageCount(Folder folder) throws MessagingException{
        int count = 0 ;
        if(folder != null)
            return folder.getNewMessageCount();
        return count ;
    }
   
    //已经读取的邮件的个数
    public static int getUnreadMessageCount(Folder folder) throws MessagingException{
        int count = 0 ;
        if(folder != null)
            return folder.getUnreadMessageCount();
        return count ;
    }
   
    //初始化属性文件
    public static Properties initProps(){
        Properties props = new Properties();
        //设置smtp的服务器地址
        props.put(ConstantsMail.MAIL_SMTP_HOST,ConstantsMail.CONN_SMTP_SERVER_NAME);
        //设置smtp服务器要身份验证
        props.put(ConstantsMail.MAIL_SMTP_AUTH,ConstantsMail.TRUE);
        return props ;
    }
   
}

PopupAuthenticator.java

package com.test.mail;

import javax.mail.*;

public class PopupAuthenticator extends Authenticator{
    String username=null;
    String password=null;
    public PopupAuthenticator(){
    }
    public PasswordAuthentication performCheck(String user,String pass){
         this.username = user;
         this.password = pass;
        return getPasswordAuthentication();
    }
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(username, password);
    }
}

RecMail.java

package com.test.mail;

import java.util.Properties;

import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.internet.MimeMessage;

public class RecMail {

    public static void main(String[] args) {
        Properties props = MailUtil.initProps();
        try {
            PopupAuthenticator popAuthenticator = new PopupAuthenticator() ;
            //身份验证
            PasswordAuthentication auth = popAuthenticator.performCheck(ConstantsMail.CONN_SERVER_USER_NAME,ConstantsMail.CONN_SERVER_PASSWORD);
            //获得session实例
            Session session = Session.getInstance(props, popAuthenticator);
            //获得连接协议
            Store store = session.getStore(ConstantsMail.POP3);
            store.connect(ConstantsMail.CONN_SMTP_SERVER_NAME, ConstantsMail.CONN_SERVER_USER_NAME, ConstantsMail.CONN_SERVER_PASSWORD);
            Folder folder = store.getFolder(ConstantsMail.INBOX);
            folder.open(Folder.READ_WRITE);

            //邮件的总数
            System.out.println("总共有"+MailUtil.getMessageCount(folder)+"封邮件。");
            //新邮件的个数
            System.out.println("新邮件的个数是"+MailUtil.getNewMessageCount(folder)+"封");
            //邮件中没有读过的
            System.out.println("已经读取了"+MailUtil.getUnreadMessageCount(folder)+"封");
           
            Message messages[] = folder.getMessages();
            if(messages.length==0){
                System.out.println("未收到新邮件...");
            }
            for(int i=0;i<messages.length;i++){
                System.out.println("第"+(i+1)+"条:"+":"+((MimeMessage)messages[i]).getSubject());
            }
            folder.close(true);
            store.close();
         }catch (Exception e) {
            System.out.println("errors on "+e.getMessage());
         }
    }
}

SendMail.java

package com.test.mail;

import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
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;
import javax.mail.internet.MimeUtility;

public class SendMail {
    public static void main(String[] args) {
        System.out.println("sending message ......");
        Properties props = MailUtil.initProps();
        try {
            PopupAuthenticator popAuthenticator = new PopupAuthenticator() ;
            //身份验证
            PasswordAuthentication auth = popAuthenticator.performCheck(ConstantsMail.CONN_SERVER_USER_NAME,ConstantsMail.CONN_SERVER_PASSWORD);
            //获得session实例
            Session session = Session.getInstance(props, popAuthenticator);
           
            //发送人地址 后面显示是接收的邮箱中发件人的名字
            Address addressFrom = new InternetAddress(ConstantsMail.MAIL_SENDER_ADDRESS,ConstantsMail.MAIL_SENDER_NAME);
            //收件人地址 后面的参数是收件人打开邮件以后显示收件人的名称
            Address addressTo = new InternetAddress(ConstantsMail.MAIL_RECEIVER_ADDRESS,ConstantsMail.MAIL_RECEIVER_NAME);
            //抄送地址 后面的参数说明同收件人
            Address addressCopy = new InternetAddress(ConstantsMail.MAIL_COPYER_ADDRESS,ConstantsMail.MAIL_COPYER_NAME);
            //创建邮件体
            Message message = new MimeMessage(session);
            //设置邮件的内容
            //message.setContent(content, model);
            //message.setText("aaaaaaaaaaaaaaaaaaa");
            //设置邮件的标题
            message.setSubject(ConstantsMail.MAIL_TITLE);
            //发件人地址
            message.setFrom(addressFrom);
           
            //收件人地址,可以多次添加
            message.addRecipient(Message.RecipientType.TO,addressTo);
            //抄送人地址,可以多次添加
            message.addRecipient(Message.RecipientType.CC,addressCopy);
           
            //上传附件
            Multipart multipart = new MimeMultipart();
            MimeBodyPart bodypart = new MimeBodyPart();
            /*1 取得本地硬盘的文件上传
             *  本地的文件当不使用setFileName的时候可以把文件的内容显示在下面
             *  但是会出现乱码。。。。。。????
             */
            DataSource datasource =  new FileDataSource("E://my//集合.txt");
            bodypart.setDataHandler(new DataHandler(datasource));
            //文件下载时的标题,若不设置名称,则会把内容显示在下面,但是会出现乱码
            bodypart.setFileName(MimeUtility.encodeWord("测试附件.doc","gb2312", null));
            multipart.addBodyPart(bodypart);
           
            /*2 直接创建附件上传。并且附件内容为"11111111"
             *  自己创建的文件不能当作内容显示在下面,只能当作附件
             *  若不设置文件名setFileName,则会临时产生一个名字
             */
            MimeBodyPart bodypart1 = new MimeBodyPart();
            //以下2种方式都可以
            //bodypart1.setText("哈哈");
            bodypart1.setContent("哈哈哈",ConstantsMail.MAIL_REC_PATTERN_1);
            //文件下载时的标题
            bodypart1.setFileName(MimeUtility.encodeWord("测试1.txt","gb2312", null));
            multipart.addBodyPart(bodypart1);
           
            //设置上传文件,可以上传多个文件
            message.setContent(multipart);
            //附件测试end...
           
           
            message.saveChanges();

            Transport transport = session.getTransport("smtp");
            //连接发件人的服务器
            transport.connect(ConstantsMail.CONN_SMTP_SERVER_NAME, ConstantsMail.CONN_SERVER_USER_NAME, ConstantsMail.CONN_SERVER_PASSWORD);
            //发送至服务器
            Transport.send(message);
            //关闭连接
            transport.close();
            System.out.println("message send ......");
        } catch (Exception e) {
            System.out.println("errors on "+e.getMessage());
        }
    }
}

基本上是不用修改的,而且我觉得里面的说明应该是比较清楚的。

只需要修改ConstantsMail.java里面相应的参数就可以了。

绝对好用的代码。

 
分享到:
评论

相关推荐

    基于JAVA开发的邮件服务器

    首先,JavaMail API是Java平台上的核心库,它允许开发者在Java应用程序中处理邮件收发。JavaMail API提供了丰富的接口和类,用于创建、发送、读取和管理邮件。它支持标准的互联网邮件协议,如SMTP(Simple Mail ...

    基于java的邮件系统客户端源码.zip

    本篇文章将深入探讨一个基于Java的邮件系统客户端源码,该系统能够运行在任何支持Java的服务器系统平台上,实现了邮件收发的关键功能。 首先,邮件系统的核心在于对邮件协议的理解和实现。在这个Java邮件系统中,...

    java邮件系统设计[汇编].pdf

    Java邮件系统设计主要涉及互联网通信协议,特别是SMTP和POP3,以及邮件的发送、接收和地址格式。在设计这样的系统时,理解这些基础知识至关重要。 首先,SMTP(简单邮件传输协议)是Internet上发送电子邮件的标准...

    Android实现快速发送电子邮件

    最后,使用`startActivityForResult()`方法启动Intent,这将打开可用的邮件应用列表供用户选择: ```java startActivity(Intent.createChooser(intent, "请选择邮件应用")); ``` 5. **处理选择的应用:** ...

    java POP3验证

    Java POP3验证是一种在Java编程环境中实现邮件服务器身份验证的...这个过程涉及网络通信、身份验证以及邮件协议的理解,对于Java开发者来说是一项重要的技能,特别是在处理自动化邮件服务或应用中需要收发邮件的场景。

    javamail复制可用

    JavaMail API,作为Java平台中的一项强大工具,提供了丰富的功能支持,使开发者能够轻松地在应用程序中集成邮件收发能力。 #### 一、JavaMail简介 JavaMail是一个用于读取、写入、发送和接收电子邮件的Java库。它...

    Android Email程序源码.zip源码资源下载

    6. **SMTP/POP3/IMAP协议**:邮件应用需要与邮件服务器交互,这就涉及到SMTP(Simple Mail Transfer Protocol)用于发送邮件,POP3(Post Office Protocol version 3)或IMAP(Internet Message Access Protocol)...

    IMail

    这款软件支持多种协议,包括SMTP(Simple Mail Transfer Protocol)、POP3(Post Office Protocol version 3)和IMAP4(Internet Message Access Protocol version 4),使得用户能够通过各种邮件客户端进行收发邮件...

    bbs_邮箱管理系统_

    【邮箱管理系统】是一种用于组织和管理电子邮件的软件应用,它为用户提供了一站式的邮件收发、存储、搜索和管理服务。在IT行业中,构建这样的系统需要掌握多项关键技术和知识点。 首先,我们需要理解电子邮件的工作...

    J2EE核心技术

    12. **Java Mail**:Java Mail API允许开发人员在Java应用中收发电子邮件,支持多种邮件协议,如SMTP、POP3、IMAP等。 13. **JAF (JavaBeans Activation Framework)**:JAF提供了一种标准方式来识别、操作和激活...

    Javamail 代码

    JavaMail依赖于另一个项目——Java Activation Framework (JAF),后者提供了对邮件协议的支持,例如SMTP(Simple Mail Transfer Protocol)用于发送邮件,POP3(Post Office Protocol Version 3)或IMAP(Internet ...

    BlackBerry 应用程序开发者指南-高级-final

    BlackBerry的Mail API提供了一系列强大的工具,可以帮助开发者轻松地在其应用程序中集成邮件收发功能。 - **Mail API类**:详细列出了Mail API中可用的各种类及其功能,这些类包括但不限于`MailMessage`、`...

    2021-2022计算机二级等级考试试题及答案No.17407.docx

    6. 电子邮件的传递:电子邮件E-mail是通过邮件收发服务器进行传输的,答案是D。 7. CSS布局构建:在HTML中,`&lt;div&gt;`标签常用于构建页面布局,答案是B。 8. Java继承特性:Java中,一个类只能单一继承一个父类,但...

    2021-2022计算机二级等级考试试题及答案No.18841.docx

    18. 电子邮件协议:在Internet上,用于收发电子邮件的协议是POP3(Post Office Protocol version 3)和SMTP(Simple Mail Transfer Protocol)。 19. CSS样式:取消超级链接的下划线可以通过`text-decoration:none`...

    2021-2022计算机二级等级考试试题及答案No.9472.docx

    7. **电子邮件E-mail**:电子邮件系统依赖于邮件收发服务器来传输和接收电子文件。 8. **指针和数组**:在C/C++程序中,指针和指针的指针可以用来操作数组。给定程序的输出是2,4,因为指针p首先指向数组的第一个...

    2021-2022计算机二级等级考试试题及答案No.2398.docx

    10. 电子邮件:电子邮件(E-mail)通过邮件收发服务器来传递用户电子文件。 11. Web服务器控件:`Wizard`、`AdRotator`、`Calender`是Web服务器控件,而`Input`是HTML元素,不属于Web服务器控件。 12. 交叉表查询...

Global site tag (gtag.js) - Google Analytics