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

原创 2007年10月09日 11:37:00

关于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里面相应的参数就可以了。

绝对好用的代码。

 

天气预报源码

  • 2016年09月05日 14:22
  • 29.18MB
  • 下载

java_mail收发邮件

一、邮件简介 示例:创建一个邮件并写到磁盘 package mail; import javax.mail.*; import javax.mail.internet.*; public ...
  • qq1978366308
  • qq1978366308
  • 2016-10-11 18:00:31
  • 92

[疯狂Java笔记]AWT:布局管理器、绝对布局、FlowLayout流式布局

1. 对容器中的组件进行合理的布局——布局管理器:     1) 当然用户可以自己手动测量定位来设置组件在容器中的绝对位置和绝对大小,但这很麻烦,并且牺牲了平台无关性;     2) 单通常在数学上,...
  • Lirx_Tech
  • Lirx_Tech
  • 2016-02-29 22:19:00
  • 1897

绝对好名V2011最新破解版

  • 2012年12月09日 23:10
  • 23.81MB
  • 下载

绝对秒数与DATE互转(PLSQL版)

 --将绝对秒数为1429056000转为DATE SELECT TO_DATE('1970-1-1','YYYY-MM-DD')+(1429056000/(3600*24))  FROM D...
  • cackeme
  • cackeme
  • 2015-04-15 13:22:36
  • 1585

Excel中的相对引用和绝对引用详解

在表格里面,经常会拖动函数来整理数据。 但不同的引用方式,可能导致拖动函数的结果不同。引用方式1、= a1,这种引用方式会在拖动的时候行列都改变。 2、=a1,这种引用方式会在拖动的时候列改变。3...
  • lijf2001
  • lijf2001
  • 2017-10-25 22:45:07
  • 290

c++中求绝对素数

/*生命周期:占用的内存 作用域:作用的范围*/ /*求一个绝对素数,颠倒前后都为素数,13,31*/ #include using namespace std; bool isprime(...
  • qq_37161280
  • qq_37161280
  • 2017-06-01 22:27:50
  • 398

java swing 之绝对布局

Swing 中窗体具有默认的布局管理器,如JFrame 使用是边界布局。虽然布局管理器能够简化程序的开发,但是为了获取最大的灵活性,可以使用绝对布局,即不使用任何布局管理器,是哦那个该布局的步骤如下:...
  • u014112584
  • u014112584
  • 2014-05-01 15:37:01
  • 6052

关于HTML学习重点-绝对布局和相对布局总结

其实这篇文章早就该写了,很久写了关于HTML布局相关的经验总结,一直在百度云上,只是偶尔查询翻到对应资料,担心日后很难找到,所以最后还是决心以文章的形式记录下来供大家参考查阅,实现这篇文章应有的价值;...
  • lixiang987654321
  • lixiang987654321
  • 2016-07-24 11:29:22
  • 4477

绝对中位差

今天读paper的时候看到一个概念叫做median absolute deviation,翻译过来好像叫做绝对中位差,好像还挺有用。根据维基百科的解释在这里做一个整理。 定义式为: 在统计学中,绝...
  • jzwong
  • jzwong
  • 2016-03-23 16:34:45
  • 4164
收藏助手
不良信息举报
您举报文章: java_mail收发邮件,绝对简单,绝对可用
举报原因:
原因补充:

(最多只允许输入30个字)