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. 转: &quot;SMTP 服务器无法识别在 Mac 2011 Outlook 中发送电子邮件时错误。错误 17092&quot;

    在 Mac 2011 Outlook 中发送电子邮件时,您可能会收到下面的错误消息: 无法发送邮件.SMTP 服务器无法识别任何 Outlook 所支持的身份验证方法.请尝试更改帐户设置中的 SMTP ...

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

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

  3. java中substring的使用方法

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

  4. Java中Set的contains()方法

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

  5. mutt+msmtp实现在shell环境中发送电子邮件

    作者:邓聪聪 为了自动化接收服务端的文件备份信息,利用mutt+msmtp在shell环境中发送电子邮件,轻松高效的完成运维工作. 下载msmtp wget http://downloads.sour ...

  6. [java,2017-05-16] java中清空StringBuffer的方法以及耗费时间比较

    java中清空StringBuffer的方法,我能想到的有4种: 1. buffer.setLength(0);  设置长度为0 2. buffer.delete(0, buffer.length() ...

  7. java中BorderLayout的使用方法

    相关设置: 使用BorderLayout布局上下左右中布局5个按键,单击中间的那个按键时就关闭窗口 代码: /**** *java中BorderLayout的使用方法 * 使用BorderLayout ...

  8. 【Java】Java中常用的String方法

    本文转载于:java中常用的String方法 1 length()字符串的长度 String a = "Hello Word!"; System.out.println(a.len ...

  9. JAVA实现发送电子邮件

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

随机推荐

  1. 分布式的Id生成器

    项目中需要一个分布式的Id生成器,twitter的Snowflake中这个既简单又高效,网上找的Java版本 package com.cqfc.id; import org.slf4j.Logger; ...

  2. Unity3D研究院之Prefab里面的Prefab关联问题

    最近在做UI部分中遇到了这样的问题,就是Prefab里面预制了Prefab.可是在Unity里面一旦Prefab预制了Prefab那么内部的Prefab就失去关联.导致与如果要改内部的Prefab需要 ...

  3. Linux下查看机器公网IP

    http://jimingsong.iteye.com/blog/1188905 curl http://ifconfig.me

  4. SQL Server常用函数

    ---------数学函数 ) --开平方 ) --区绝对值 ) --保留小数点后1位 四舍五入保留 select COUNT(*)/5.0 from Car select CEILING(COUNT ...

  5. 51nod1376 最长递增子序列的数量

    O(n2)显然超时.网上找的题解都是用奇怪的姿势写看不懂TAT.然后自己YY.要求a[i]之前最大的是多少且最大的有多少个.那么线段树维护两个值,一个是当前区间的最大值一个是当前区间最大值的数量那么我 ...

  6. C# 如何从List集合当中取出子集合

    今天项目要求随机从数据库中随机取出若干条数据,放到首页.那么要如何随机取出这个子集合呢?本人向到的方法如下: 1.假设数据量很少,如我数据库中只有10条数据,而我要求随机取出8条.对于这种低数据量,大 ...

  7. 所有城市list每次从页面花1段时间抽取后写入到数组,

    所有城市list每次从页面花1段时间抽取后写入到数组,

  8. CF908G Original Order

    题目大意: 定义\(R(x) = 每个数在各数位排序后得到的数\) 例如:\(R(321597) = 123579\) 给定一个\(n<=10^{700}\),求\(\sum _{i=1}^n ...

  9. 部署alinode监控线上应用

    参考: https://segmentfault.com/a/1190000013089124

  10. 解决ssh登录慢的问题

    修改文件/etc/ssh/sshd_config  : UseDNS no GSSAPIAuthentication no 重启服务 service sshd restart