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. java spring 配置文件的读取

    java读取本地配置文件主要分为两类,一类为class相关文件或子文件夹下,一类文件 为jar包外配置文件. class相关文件夹或子文件夹下读取配置文件可以使用Object.class.getRes ...

  2. 个人理解java的继承

    java的类是属于单继承的.在继承这一块上我本来有一个很大的误区,就是觉得父类中private定义的成员无法被继承.直到网上的大神给我指出private是可以被继承的,会在内存中,只是在子类的对象中不 ...

  3. The trip(Uva 11100)

    题目大意: 给出n个数,要求将其分成最少的递增序列,保证序列最少的同时要使得序列长度的最大值最小.  n<=10000 题解: 1.我是直接看着<训练指南>里的中文题面的,lrj似乎 ...

  4. 常见的getchar 与EOF的问题

    代码中常有类似的如下的输入循环 char  c; while((c=getchar())!=EOF).... 如果输入 字符+换行时,循环的代码会执行两次,主要是换行键作为字符存到了缓存队列中,第一次 ...

  5. [leetcode 37]sudoku solver

    1 题目: 根据给出的数独,全部填出来 2 思路: 为了做出来,我自己人工做了一遍题目给的数独.思路是看要填的数字横.竖.子是否已经有1-9的数字,有就剔除一个,最后剩下一个的话,就填上.一遍一遍的循 ...

  6. Deep Learning 6_深度学习UFLDL教程:Softmax Regression_Exercise(斯坦福大学深度学习教程)

    前言 练习内容:Exercise:Softmax Regression.完成MNIST手写数字数据库中手写数字的识别,即:用6万个已标注数据(即:6万张28*28的图像块(patches)),作训练数 ...

  7. 实习日记:图像检索算法 LSH 的总结与分析(matlab)

    最开始仿真和精度测试,基于 matlab 完成的. Demo_MakeTable.m (生成 Hash 表) %======================================== %** ...

  8. mybaits中xml文件大于号和小于号的处理方法

    1.转义字符 原符号 < <= > >= & ' " 替换符号 < <= > >= & &apos; " 2 ...

  9. 阿里巴巴Json工具-Fastjson讲解

    Fastjson是阿里巴巴公司开源的速度最快的Json和对象转换工具,一个Java语言编写的JSON处理器. 1.遵循http://json.org标准,为其官方网站收录的参考实现之一.2.功能qia ...

  10. 操作系统性能分析与优化V1.0

    操作系统性能分析与优化V1.0 : http://www.docin.com/p-759561760.html