JAVA中发送邮件的方法不复杂,使用sun的JavaMail的架包就可以实现。

 一、下载JavaMail的架包,并导入项目中,如下:

二、附上代码例子,如下:

1、在main函数中对各项参数进行赋值(参数说明已进行备注),即可通过send函数进行发送邮件操作。

 public class TestEmail {

     private final static String TIMEOUT_MS = "20000";

     public static void main(String[] args) {
         String host = "smtp.exmail.qq.com";
         String user = "xxxxxx@qq.com";
         String password = "xxxxxx";
         String recipients = "xxxxxx@qq.com";
         String cc = "";
         String subject = "邮件发送测试";
         String content = "邮件正文:<br>你好!";
         //方式1:通过URL获取附件
 //        byte[] attachment = FileUtil.getBytesByUrl("http://127.0.0.1/project/test.pdf");
         //方式2:通过本地路径获取附件
         byte[] attachment = FileUtil.getBytesByFile("c://fujian.pdf");

         String attachmentName = "";
         try {
             attachmentName = MimeUtility.encodeWord("这是附件.pdf");
             send(host, user, password, recipients, cc, subject, content, attachment, attachmentName);
         } catch (Exception e) {
             e.printStackTrace();
         }
     }

     /**
      * @param host 邮件服务器主机名
      * @param user 用户名
      * @param password 密码
      * @param recipients 收件人
      * @param cc 抄送人
      * @param subject 主题
      * @param content 内容
      * @param attachment 附件 [没有传 null]
      * @param attachmentName 附件名称 [没有传 null]
      * @throws Exception
      */
     public static void send(final String host, final String user, final String password,
                      final String recipients, final String cc, final String subject, final String content,
                      final byte[] attachment,final String attachmentName) throws Exception {
         Properties props = new Properties();
         props.put("mail.smtp.host", host);
         props.put("mail.smtp.auth", "true");
         props.put("mail.smtp.timeout", TIMEOUT_MS);

         Authenticator auth = new Authenticator() {
             @Override
             protected PasswordAuthentication getPasswordAuthentication() {
                 return new PasswordAuthentication(user, password);
             }
         };
         Session session = Session.getInstance(props, auth);
         MimeMessage msg = new MimeMessage(session);
         msg.setFrom(new InternetAddress(user));
         msg.setRecipient(Message.RecipientType.TO, new InternetAddress(recipients));
         if (cc != null && cc.length() > 0) {
             msg.setRecipients(Message.RecipientType.CC, cc);
         }
         msg.setSubject(subject);
         // 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
         Multipart multipart = new MimeMultipart();
         // 添加邮件正文
         BodyPart contentPart = new MimeBodyPart();
         contentPart.setContent(content, "text/html;charset=UTF-8");
         multipart.addBodyPart(contentPart);
         // 添加附件的内容
         if (attachment!=null) {
             BodyPart attachmentBodyPart = new MimeBodyPart();
             DataSource source = new ByteArrayDataSource(attachment,"application/octet-stream");
             attachmentBodyPart.setDataHandler(new DataHandler(source));
             //MimeUtility.encodeWord可以避免文件名乱码
             attachmentBodyPart.setFileName(MimeUtility.encodeWord(attachmentName));
             multipart.addBodyPart(attachmentBodyPart);
         }
         // 将multipart对象放到message中
         msg.setContent(multipart);
         // 保存邮件
         msg.saveChanges();
         Transport.send(msg, msg.getAllRecipients());
     }
 }

2、上面的例子中,如果有附件,可对附件进行设置。附件传参类型为byte数组,这里举2个例子,方式1通过网址获取byte数组,如下。方式2通过本地文件获取byte数组。具体可以查看另一篇文章:JAVA中文件与Byte数组相互转换的方法

 public class FileUtil {

     public static byte[] getBytesByUrl(String urlStr) {
         try {
             URL url = new URL(urlStr);
             HttpURLConnection conn = (HttpURLConnection) url.openConnection();
             InputStream is = conn.getInputStream();
             BufferedInputStream bis = new BufferedInputStream(is);
             ByteArrayOutputStream baos = new ByteArrayOutputStream();
             final int BUFFER_SIZE = 2048;
             final int EOF = -1;
             int c;
             byte[] buf = new byte[BUFFER_SIZE];
             while (true) {
                 c = bis.read(buf);
                 if (c == EOF)
                     break;
                 baos.write(buf, 0, c);
             }
             conn.disconnect();
             is.close();

             byte[] data = baos.toByteArray();
             baos.flush();
             return data;

         } catch (Exception e) {
             e.printStackTrace();
         }
         return null;
     }
 }

JAVA中发送电子邮件的方法的更多相关文章

  1. 在ASP.NET中发送电子邮件的实例教程

    首先.导入命名空间: 代码如下 复制代码 using System.Net.Mail; 定义发送电子邮件的方法[网上很多不同的,可以对比着看一下,WinForm的也适用]: 代码如下 复制代码 /// ...

  2. java中substring的使用方法

    java中substring的使用方法 str=str.substring(int beginIndex);截取掉str从首字母起长度为beginIndex的字符串,将剩余字符串赋值给str: str ...

  3. Java中Set的contains()方法

    Java中Set的contains()方法 -- hashCode与equals方法的约定及重写原则 翻译人员: 铁锚 翻译时间: 2013年11月5日 原文链接: Java hashCode() a ...

  4. JAVA实现发送电子邮件

    相信大家对于网站也好,手机app也好,用户注册时,需要进行邮箱验证的功能特别好奇吧,本篇我将带领大家一起实现一下这个简单而又神奇的小功能,让我们的应用也可以加入这些神奇的元素.废话不多说,下面开始我们 ...

  5. Java中String类的方法及说明

    String : 字符串类型 一.      String sc_sub = new String(c,3,2);    //      String sb_copy = new String(sb) ...

  6. java中compareTo和compare方法之比较

    这两个方法经常搞混淆,现对其进行总结以加深记忆. compareTo(Object o)方法是java.lang.Comparable接口中的方法,当需要对某个类的对象进行排序时,该类需要实现Comp ...

  7. java中set和get方法的理解

    对于JAVA初学者来说,set和get这两个方法似乎已经很熟悉了,这两个方法是JAVA变成中的基本用法,也是出现频率相当高的两个方法. 为了让JAVA初学者能更好的理解这两个方法的使用和意义,今天笔者 ...

  8. Java中LinkedList的remove方法真的耗时O(1)吗?

    这个问题其实来源于Leetcode的一道题目,也就是上一篇日志 LRU Cache.在使用LinkedList超时后,换成ArrayList居然AC了,而问题居然是在于List.remove(Obje ...

  9. Java中start和run方法的区别

    一.问题引入         说到这两个方法就不得不说多线程,说到多线程就不得不提实现多线程的两种方式继承Thread类和实现Runable接口,下面先看这两种方式的区别. 二. Java中实现多线程 ...

随机推荐

  1. Glide源码导读

    最近比较无聊,为了找点事干,就花了两天时间把Glide的源码大概看了一下.刚开始看Glide的源码头脑还是比较乱的,因为作者引入了几个概念,又大量用了泛型,如果不了解这些概念读起代码来就比较痛苦,我也 ...

  2. c#下volatile关键字

      volatile多用于多线程的环境,当一个变量定义为volatile时,读取这个变量的值时候每次都是从momery里面读取而不是从cache读.这样做是为了保证读取该变量的信息都是最新的,而无论其 ...

  3. 从零开始编写属于我的CMS:(六)插件

    二三四五还没写,先写六吧(有道友说想看看插件部分). 这里是一 从零开始编写属于我的CMS:(一)前言 一,首先预定义接口 新建类库,WangCms.PluginInterface 新建两个类,一个实 ...

  4. 关于去除Eclipse对JavaScript的验证

    关于去除Eclipse对JavaScript的验证 在我们使用大量JavaScript作为一些UI或其他组件来使用时,很多情况下,明明引用的这些JavaScript是可以正常使用的,但Eclipse却 ...

  5. wxPython入门练习代码 三

    DoubleEventFrame.py: #!/usr/bin/env/ python import wx class DoubleEventFrame(wx.Frame): def __init__ ...

  6. Media Wiki

    https://www.mediawiki.org/wiki/Help:Images/zh https://www.mediawiki.org/wiki/Manual_talk:Image_admin ...

  7. paper 71 :图像清晰化

    图像清晰度是衡量图像品质优劣的标准之一,清晰的图像能给人以赏心悦目的视觉享受.长期以来,图像扫描设备和图像处理软件的开发生产厂商都很重视图像清晰度处理功能的开发,图像处理人员也在日常的实践中不断摸索出 ...

  8. Editor Scripting学习笔记之Menu Item

    主要用到: MenuItem属性 MenuCommand参数 可能用到: EditorApplication类 Selection类 GameObjectUtility类 FileUtil类 Undo ...

  9. Ruby on Rails Tutorial 第一章 之 简介

    1.目标:掌握MVC和REST.生成器.迁移.路由.嵌入式Ruby 本书涉及Rails,Ruby语言,Rails默认使用的测试框架(MiniTest),Unix命令行,HTML,CSS,少量的Java ...

  10. Jquery EasyUI的datagrid页脚footer使用及数据统计

    最近做一个统计类的项目中遇到datagrid数据显示页脚footer合计的问题,对于构造统计结果数据格式,是在程序端构造一个{"rows":[],"total" ...