`
tcl1122
  • 浏览: 29733 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

javaMail 代码实现

 
阅读更多
http://gaoqifang.blog.51cto.com/2270113/758306

说明:1、本程序可实现网页文件、普通文件的发送。

             2、实现邮件发送需要三个jar包的支持:commons-codec-1.3.jar、commons-httpclient-3.0.jar(这两个jar包实现抓取互联网网页内容)以及mail.jar



具体实现:

一、首先建立MailAuthenticator类,继承自javax.mail.Authenticator类。此类实现发件箱的登陆验证。


package com.company.simplemail;

import javax.mail.Authenticator;

import javax.mail.PasswordAuthentication;

/**
* 服务器邮箱登录验证
*/
public class MailAuthenticator extends Authenticator {
   
//     用户名(登录邮箱)
  private String username;

//     密码
  private String password;

  /**
    * 初始化邮箱和密码
    * @param username 邮箱
    * @param password 密码
    */
  public MailAuthenticator(String username, String password){
    this.username = username;
    this.password = password;
  }

  String getPassword() {
    return password;
  }

  @Override
  protected PasswordAuthentication getPasswordAuthentication() {
    return new PasswordAuthentication(username, password);
  }

  String getUsername() {
    return username;
  }

  public void setPassword(String password) {
    this.password = password;
  }

  public void setUsername(String username) {
    this.username = username;
  }

}



二、 建立SimpleMailSender类,此类实现邮件的单发、群发等等,是邮件发送的核心类。


package com.company.simplemail;

import java.util.List;
import java.util.Properties;

import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
import javax.mail.internet.MimeMultipart;


/**
* 简单邮件发送器,可单发,群发。
*/
public class SimpleMailSender {
//  发送邮件的props文件
  private final transient Properties props = System.getProperties();

//    邮件服务器登录验证
  private transient MailAuthenticator authenticator;

//    邮箱session
  private transient Session session;
   
  /**
    * 初始化邮件发送器
    * @param smtpHostName SMTP邮件服务器地址
    * @param username 发送邮件的用户名(地址)
    * @param password 发送邮件的密码
    */
  public SimpleMailSender(final String smtpHostName, final String username,
      final String password) {
    init(username, password, smtpHostName);
  }

  /**
    * 初始化邮件发送器
    * @param username 发送邮件的用户名(地址),并以此解析SMTP服务器地址
    * @param password 发送邮件的密码
    */
  public SimpleMailSender(final String username, final String password) {
    // 通过邮箱地址解析出smtp服务器,对大多数邮箱都管用
    final String smtpHostName = "smtp." + username.split("@")[1];
    init(username, password, smtpHostName);
  }

  /**
    * 初始化
    * @param username 发送邮件的用户名(地址)
    * @param password 密码
    * @param smtpHostName SMTP主机地址
    */
  private void init(String username, String password, String smtpHostName) {
    // 初始化props
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.host", smtpHostName);
    // 验证
    authenticator = new MailAuthenticator(username, password);
    // 创建session
    session = Session.getInstance(props, authenticator);
  }

  /**
    * 发送邮件
    * @param recipient收件人邮箱地址
    * @param subject邮件主题
    * @param content邮件内容
    * @throws AddressException
    * @throws MessagingException
    */
  public void send(String recipient, String subject, String content)
      throws AddressException, MessagingException {
    // 创建mime类型邮件
    final MimeMessage message = new MimeMessage(session);
    // 设置发信人
    message.setFrom(new InternetAddress(authenticator.getUsername()));
    // 设置收件人
    message.setRecipient(RecipientType.TO, new InternetAddress(recipient));
    // 设置主题
    message.setSubject(subject);
    // 设置邮件内容
    Multipart mp = new MimeMultipart("related");
                MimeBodyPart mbp = new MimeBodyPart();
                mbp.setContent(content.toString(),"text/html;charset=utf-8");
                mp.addBodyPart(mbp);
                message.setContent(mp);
    
    
    // 设置邮件内容
  //  message.setContent(content.toString(), "text/html;charset=utf-8");
    // 发送
    Transport.send(message);
  }

  /**
    * 群发邮件
    * @param recipients收件人们
    * @param subject 主题
    * @param content 内容
    * @throws AddressException
    * @throws MessagingException
    */
  public void send(List<String> recipients, String subject, String content)
      throws AddressException, MessagingException {
    // 创建mime类型邮件
    final MimeMessage message = new MimeMessage(session);
    // 设置发信人
    message.setFrom(new InternetAddress(authenticator.getUsername()));
    // 设置收件人们
    final int num = recipients.size();
    InternetAddress[] addresses = new InternetAddress[num];
    for (int i = 0; i < num; i++) {
      addresses[i] = new InternetAddress(recipients.get(i));
    }
    message.setRecipients(RecipientType.TO, addresses);
    // 设置主题
    message.setSubject(subject);
    // 设置邮件内容
    message.setContent(content.toString(), "text/html;charset=utf-8");
    // 发送
    Transport.send(message);
  }

  /**
    * 发送邮件
    * @param recipient收件人邮箱地址
    * @param mail邮件对象
    * @throws AddressException
    * @throws MessagingException
    *                          
    */
  public void send(String recipient, SimpleMail mail)
      throws AddressException, MessagingException {
    send(recipient, mail.getSubject(), mail.getContent());
  }

  /**
    * 群发邮件
    * @param recipients 收件人们
    * @param mail 邮件对 象 
    * @throws AddressException
    * @throws MessagingException
    */
  public void send(List<String> recipients, SimpleMail mail)
      throws AddressException, MessagingException {
    send(recipients, mail.getSubject(), mail.getContent());
  }
}





三、   建立SimpleMail类,这只是个普通邮件类,主要用来封装所要发送的邮件信息。


package com.company.simplemail;

public class SimpleMail {
  //邮件中的主题
  private String subject;
  //邮件的内容(正文)
  private String content;
  //可根据需要增加其他邮件元素

  public void setSubject(String subject) {
    this.subject = subject;
  }

  public void setContent(String content) {
    this.content = content;
  }

  public String getSubject() {
    return subject;
  }

  public String getContent() {
    return content;
  }
}





四、建立ReadHtmlFile类,此类用来读取网页文件(当然也能读取普通文件),将文件转换成String用来发送


package com.company.util;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.methods.GetMethod;

public class ReadHtmlFile {

  public static HttpClient client = new HttpClient();
   
  //读取普通文件
  public static String readFile(String filename) {
    File file = new File(filename);
    Reader reader = null;
    StringBuffer stb = new StringBuffer();
    int charread = 0;
    char[] temps = new char[100];
    try {
      reader = new InputStreamReader(new FileInputStream(file));
      while ((charread = reader.read(temps)) != -1) {
        if (charread == temps.length) {
          stb.append(temps);
          temps = new char[100];
          charread = 0;
        }
      }
      stb.append(temps);
      reader.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
    String str = stb.toString();
    return str;
  }

  /**
    *   
    * 所要发送的网页中,不要使用外联样式,脚本等,
    * 因为各大邮箱后台的过滤算法会过滤掉css,script等
    * 样式用标签style属性写
    * 图片、链接必须使用绝对地址 (http://.....) 形式才能接收显示
    * */
  public static String getSource(String url) {

    GetMethod method = new GetMethod(url);

    try {
      client.executeMethod(method);
    } catch (HttpException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
    InputStream in = null;
    try {
      in = method.getResponseBodyAsStream();
    } catch (IOException e1) {

      // e1.printStackTrace();
    }
    in = new BufferedInputStream(in);
    Reader r = new InputStreamReader(in);
    int c;
    StringBuffer buffer = new StringBuffer();

    try {
      while ((c = r.read()) != -1)
        buffer.append((char) c);
    } catch (IOException e) {
      e.printStackTrace();
    }
    try {
      in.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
    method.releaseConnection();

    return buffer.toString();
  }
}






五、建立测试类,可以发送邮件了!!!


package com.company.simplemail;

import java.util.ArrayList;
import java.util.List;

import org.junit.Test;

import com.company.util.ReadHtmlFile;

public class MailTest {
  /**
    * 单发
    * */
  @Test
  public void testSingleSend(){
    SimpleMail sm=new SimpleMail();
    sm.setSubject("第一封邮件");
    String str = ReadHtmlFile.getSource("http://www.baidu.com");
    //String str = ReadHtmlFile.readFile("这里填写你需要发送的本地文件路径");
    System.out.println(str);
    sm.setContent(str);
    SimpleMailSender sms=new SimpleMailSender(""这里填写你的发件箱","这里填写你的发件箱密码");
    try {
      sms.send("这里需要填写接收邮件的邮箱", sm);
      System.out.println("执行完成!!");
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
   
   
  /**
    * 群发
    *   
    * */
  @Test
  public void testMassSend(){
    SimpleMail sm=new SimpleMail();
    sm.setSubject("第一封邮件");
    String str = ReadHtmlFile.getSource("http://www.baidu.com");
    //String str = ReadHtmlFile.readFile("这里填写需要发送的本地文件路径");
    System.out.println(str);
    sm.setContent(str);
    SimpleMailSender sms=new SimpleMailSender("这里填写你的发件箱","这里填写你的发件箱密码");
    List<String> recipients=new ArrayList<String>();
    recipients.add("这里需要填写接收邮件的邮箱");
    recipients.add("这里需要填写接收邮件的邮箱");
    recipients.add("这里需要填写接收邮件的邮箱");
    recipients.add("这里需要填写接收邮件的邮箱");
    try {
      sms.send(recipients, sm);
      System.out.println("执行完成!!");
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}






最后再次强调:1,所要发送的网页中,不要使用外联样式,脚本等,因为各大邮箱后台的过滤算法会过滤掉css,script等。
                  2,样式用标签style属性写
                  3, 图片、链接必须使用绝对地址 (http://.....) 形式才能接收显示

                  4,一般用于发送的网页文件都是按上面说的要求,自己另外制作的,专门用于邮件发送的网页。在互联网上抓取的网页发送后,一般都不能在收件箱中完美的显示
分享到:
评论

相关推荐

    javaMail代码

    其次,`javamail-1_4_1.zip` 是 JavaMail 的一个版本库,其中包含库文件、示例代码和相关的 JAR 包,供开发者在项目中使用。开发者可以解压此文件,将 JAR 包添加到项目的类路径中。 最后,`2008美河原创视频....

    JavaMail实现源代码和jar包

    这个压缩包包含了一组与 JavaMail 相关的源代码和必要的库文件,使得开发者可以快速地理解和实现邮件功能。 1. **mail.jar**:这是一个核心的 JavaMail JAR 文件,包含了 JavaMail API 的所有类和接口,如 `javax....

    利用javamail api实现的邮件发送类

    以下是一个基于JavaMail API 实现邮件发送的类的基本结构和关键知识点: 1. **导入必要的库** 首先,我们需要导入JavaMail API 的相关jar包,如`javax.mail` 和 `javax.mail.internet` 包。在现代项目中,这些依赖...

    javaMail代码记录 javaMail代码记录

    JavaMail通常与JavaMail Service Provider Interface (JAF/JSP)一起使用,后者负责实现具体的邮件协议。 #### 二、关键类与接口 - **`javax.mail.Session`**:创建邮件会话,是整个JavaMail API的核心。 - **`javax...

    JAVAMAIL集合发送图片,附件,内容,HTML等得JAVAMAIL代码

    本资源是一个集合发送图片,附件,内容,HTML等得JAVAMAIL代码,并且可以同时发送多个附件多个图片,只需填充VO类,即可直接调用并发送邮件,例子已经写好,只要填充上必要值即可,经163,qq,sina测试没有问题,有...

    JavaMail完全实现

    在Java应用程序中,通过JavaMail我们可以方便地实现SMTP(简单邮件传输协议)发送邮件、POP3(邮局协议)和IMAP(因特网消息访问协议)接收邮件等功能。在结合Spring框架时,JavaMail的使用变得更加灵活和高效。 在...

    简单javamail的实现(HelloWorld)

    下面是一个简单的JavaMail发送邮件的示例代码: ```java import javax.mail.*; import javax.mail.internet.*; public class HelloWorldMail { public static void main(String[] args) throws Exception { // ...

    JAVAMail GUI实现!

    JavaMail是一个强大的开源库,它允许开发者在Java应用程序中实现电子邮件的发送和接收。这个库提供了丰富的API,可以处理各种复杂的邮件操作,如添加附件、设置SMTP服务器等。本项目"JAVAMail GUI实现!"是基于...

    基于JaVaMail的Web邮件客户端的设计与实现

    ### 基于JavaMail的Web邮件客户端设计与实现的关键知识点 #### 一、JavaMail简介 JavaMail API是Sun Microsystems提供的一套用于发送、接收和处理电子邮件的标准接口集合。它建立在JavaBeans的基础上,提供了丰富...

    spring+javamail代码示例

    在IT行业中,Spring框架是Java应用开发的基石,它提供了丰富的功能来简化应用程序的构建,而JavaMail API则是一个用于处理电子邮件的库。本示例将深入探讨如何结合Spring框架和JavaMail API来发送电子邮件,这在许多...

    已经实现了的javamail发邮件代码

    根据提供的代码片段,我们将详细分析如何使用 JavaMail 实现邮件的发送功能。 ##### 1. 导入必需的类库 ```java import java.util.Date; import java.util.Properties; import javax.mail.Message; import javax....

    javamail代码发送QQ邮件

    JavaMail 是一个强大的开源库,...请注意,根据QQ邮箱的策略,可能需要定期更新授权码,因此在实现自动发送邮件的系统时,需要考虑到这一点。同时,保持对JavaMail API的最新版本更新,以获取最新的功能和安全修复。

    使用jsp实现javaMail邮箱功能开发

    本项目旨在利用JSP和JavaMail API实现在Web应用中发送邮件的功能,主要涉及POP3协议。下面将详细阐述这个过程中的关键知识点。 1. JSP基础: JSP是Java平台上的服务器端脚本语言,它允许开发者在HTML页面中嵌入...

    javaMail实现文件接收与发送

    总结起来,JavaMail是Java开发中处理邮件通信的重要工具,它通过简单的API实现了邮件的发送和接收,广泛应用于各种企业级应用和自动化任务中。通过深入理解和实践,你可以轻松地构建出满足各种需求的邮件功能。

    javamail 1.4.3 mail.jar 1.4.3 jar 包+源代码下载 天涯浪子

    这个标题提到的是JavaMail的1.4.3版本,其中包含了mail.jar库文件以及对应的源代码。mail.jar是JavaMail的核心库,包含了处理SMTP(简单邮件传输协议)、POP3(邮局协议)和IMAP(因特网消息访问协议)等邮件协议的...

    韩顺平jsp购物网源码(包含javaMail)

    【标题】"韩顺平jsp购物网源码(包含javaMail)"是一个关于构建基于JSP的电子商务网站的示例项目,其中集成了javaMail功能,用于实现电子邮件的发送。这个资源是为学习JSP和JavaMail技术的学生或开发者提供的实践...

    james和javamail实现邮件收发(带发送附件)

    在提供的压缩包文件“james+javaMail收发邮件”中,可能包含了示例代码和配置文件,供开发者参考和学习如何在实际项目中实现邮件收发功能,特别是处理中文内容和附件。通过理解和实践这些示例,开发者可以更好地掌握...

    使用JavaMail实现发送邮件

    本篇将深入探讨如何使用JavaMail实现发送邮件,以及相关的源码分析。 首先,我们需要了解JavaMail的基本组件。`javax.mail`库主要包含以下关键接口和类: 1. `Session`:这是JavaMail的核心,代表与邮件服务器的...

    javamail实现邮箱与邮箱发送邮件

    在提供的压缩包文件"javamail实例"中,可能包含了上述代码的完整实现以及其他相关的示例,这些示例可以帮助你更好地理解和使用JavaMail API,比如添加附件、设置HTML格式的邮件内容等。通过深入研究和实践这些示例,...

    javaMail源代码,可以使用QQ邮箱等发送邮件

    这个压缩包包含的源代码示例展示了如何使用JavaMail API通过QQ邮箱发送邮件,这对于开发者来说是一个实用的工具,尤其是在开发用户注册验证或通知功能时。让我们深入探讨一下JavaMail的核心概念以及如何使用它与QQ...

Global site tag (gtag.js) - Google Analytics