作者:Vinkn 来自http://www.cnblogs.com/Vinkn/

一、邮件简介

一封邮件由很多信息构成,主要的信息如下,其他的暂时不考虑,例如抄送等:

1、收件人:收件人的邮箱地址,例如xxx@xx.com

2、收件人姓名:大部分的邮件显示时都会显示,例如Vinkn 779554589@qq.com

3、发件人:发件人的邮箱地址

、发件人姓名:

5、主题:邮件的标题

6、内容及附件:邮件的主要内容

二、使用Java发邮件的通用步骤

一般的项目中没有单独的邮件服务器,一般情况下都是使用别人的服务器。

1设置smtp服务器:不同的邮件服务器有不同的地址,例如:smtp.qq.com表示腾讯的smtp服务器。

2授权:使用该服务器的帐号和密码登录该服务器。

3创建邮件:创建一份包含所有信息的邮件,比如发件人、收件人、内容等。

4设置邮件的属性:为邮件的属性添加数据。

5发送邮件:因为封装不同,发送的方式不一致。

三、Java Mail与Apache Mail

Apache Mail是对Java Mail的封装,使用起来更加的简便,逻辑层次感更好。

使用Java Mail只需要导入一个jar包:mail.jar。

使用Apache Mail的时候需要导入两个jar包:mail.jar、commons-email-1.3.1.jar。

四、使用Java Mail发送邮件

 public static void main(String[] args) throws Exception {
         final String user = "779554589";
         final String password = "";

         String fromAddress = "779554589@qq.com";
         String toAddress = "loadfate@163.com";
         String subject = "邮件测试主题";
         String content = "这是一个测试邮件<b>哈哈</b>";

         //配置参数
         Properties props = new Properties();
         props.setProperty("mail.smtp.auth", "true");
         props.setProperty("mail.transport.protocol", "smtp");
         props.setProperty("mail.host", "smtp.qq.com");
         // 方法一:使用transport对象发送邮件
         {
             //通过参数生成会话
             Session session = Session.getInstance(props);
             //启用调试模式
             session.setDebug(true);
             //创建一封邮件,并设置信息
             Message message = new MimeMessage(session);
             message.setFrom(new InternetAddress(fromAddress));
             message.setSubject(subject);
             message.setText(content);
             //创建传输
             Transport transport = session.getTransport();
             //连接smtp服务器
             transport.connect(user, password);
             //发送
             transport.sendMessage(message, new InternetAddress[] { new InternetAddress(toAddress) });
             transport.close();
         }

         // 方法二:使用Transport类静态方法发送邮件
         {
             //生成Session时以获取授权连接
             Session session = Session.getInstance(props, new Authenticator() {
                 @Override
                 protected PasswordAuthentication getPasswordAuthentication() {
                     return new PasswordAuthentication(user, password);
                 }
             });
             session.setDebug(true);
             //创建一封邮件,并设置信息
             Message message = new MimeMessage(session);
             message.setSubject(subject);
             message.setFrom(new InternetAddress(fromAddress));
             message.setRecipient(RecipientType.TO, new InternetAddress(toAddress));
             message.setContent(content, "text/html;charset=utf-8");

             //直接发送,message通过已经授权的Session生成
             Transport.send(message);
         }
     }

五、使用Apache Mail发送邮件

 public class ApacheMailTest {
     // smtp服务器
     private String hostName = "smtp.qq.com";
     // 帐号与密码
     private String userName = "779554589";
     private String password = "这是个秘密";
     // 发件人
     private String fromAddress = "779554589@qq.com";
     // 发件人姓名
     private String fromName = "loadfate";

     public static void main(String[] args) throws Exception {
         // 收件人与收件人名字
         String toAddress = "loadfate@163.com";
         String toName = "loadfate";
         ApacheMailTest test = new ApacheMailTest();
         // 所有的异常都为处理,方便浏览

         test.sendSimpleEmail(toAddress, toName);
         test.sendHtmlEmail(toAddress, toName);
         test.sendMultiPartEmail(toAddress, toName);
         System.out.println("发送完成");
     }

     // 发送简单邮件,类似一条信息
     public void sendSimpleEmail(String toAddress, String toName) throws Exception {
         SimpleEmail email = new SimpleEmail();
         email.setHostName(hostName);// 设置smtp服务器
         email.setAuthentication(userName, password);// 设置授权信息
         email.setCharset("utf-8");
         email.setFrom(fromAddress, fromName, "utf-8");// 设置发件人信息
         email.addTo(toAddress, toName, "utf-8");// 设置收件人信息
         email.setSubject("测试主题");// 设置主题
         email.setMsg("这是一个简单的测试!");// 设置邮件内容
         email.send();// 发送邮件
     }

     // 发送Html内容的邮件
     public void sendHtmlEmail(String toAddress, String toName) throws Exception {
         HtmlEmail email = new HtmlEmail();
         email.setHostName(hostName);
         email.setAuthentication(userName, password);
         email.setCharset("utf-8");
         email.addTo(toAddress, toName, "utf-8");
         email.setFrom(fromAddress, fromName, "utf-8");
         email.setSubject("这是一个html邮件");
         // 设置html内容,实际使用时可以从文本读入写好的html代码
         email.setHtmlMsg("<div style='width:100px;height:200px;'>a</div>");
         email.send();

     }

     // 发送复杂的邮件,包含附件等
     public void sendMultiPartEmail(String toAddress, String toName) throws Exception {
         MultiPartEmail email = null;
         email = new MultiPartEmail();
         email.setHostName(hostName);
         email.setAuthentication(userName, password);
         email.setCharset("utf-8");
         email.addTo(toAddress, toName, "utf-8");
         email.setFrom(fromAddress, fromName, "utf-8");
         email.setSubject("这是有附件的邮件");
         email.setMsg("<a href='#'>测试内容</a>");

         // 为邮件添加附加内容
         EmailAttachment attachment = new EmailAttachment();
         attachment.setPath("D:\\邮件.txt");// 本地文件
         // attachment.setURL(new URL("http://xxx/a.gif"));//远程文件
         attachment.setDisposition(EmailAttachment.ATTACHMENT);
         attachment.setDescription("描述信息");
         // 设置附件显示名字,必须要编码,不然中文会乱码
         attachment.setName(MimeUtility.encodeText("邮件.txt"));
         // 将附件添加到邮件中
         email.attach(attachment);
         email.send();
     }
 }

六、附件

项目文件夹:maildemo

下载地址:http://pan.baidu.com/s/1bn1Y6BX

如果有什么疑问或者建议,请联系我

文件说明:

、maildemo.zip :maildemo的源代码

、mail.jar :Java Mail的jar包

、commons-email-1.3.1.jar :Apache Mail的jar包

Java发邮件:Java Mail与Apache Mail的更多相关文章

  1. Android Java Mail与Apache Mail发送邮件对比

    原文链接: 一.邮件简介  一封邮件由很多信息构成,主要的信息如下,其他的暂时不考虑,例如抄送等:  1.收件人:收件人的邮箱地址,例如xxx@xx.com  2.收件人姓名:大部分的邮件显示时都会显 ...

  2. 阿里云服务器25端口禁用之如何使用Java发邮件(解决25端口禁用问题)

    通常我们在本地使用Java发送邮件,通常是没有问题的,但是部署到服务器的话,就可能遇到问题.当然了,这与运营商也有关系.比如我之前在咖啡主机上购买虚拟机,然后将个人网站部署上去,通常是没有问题的,没有 ...

  3. 用java发邮件之一 (直接源于真实项目) 【原】

    真实项目应用的java发送邮件,应该还待进一步完善. 依赖 mail-1.4.jar jar包下载地址: http://mvnrepository.com/artifact/javax.mail/ma ...

  4. Java发邮件带附件测试通过

    package cn.bric.crm.util; import java.util.Date; import java.util.Enumeration; import java.util.Prop ...

  5. java 发邮件 代码

    /** * java发送带附件的邮件 * 周枫 * 2013.8.10 */ package com.dsideal.Util; import javax.mail.*; import javax.m ...

  6. C#发邮件之命名空间System.Net.Mail

    1.添加一个类,取名为Email public class Email { /// <summary> /// 发送方发送方服务器地址 /// </summary> publi ...

  7. 使用spring 并加载模板发送Email 发邮件 java 模板

    以下例子是使用spring发送email,然后加载到固定的模板,挺好的,大家可以试试 需要使用到spring-context 包 和 com.springsource.org.apache.veloc ...

  8. java 发邮件

    //先从oracle 下载mail.jarpackage test; import javax.mail.BodyPart; import javax.mail.Message; import jav ...

  9. Java发邮件基础篇

    1. 电子邮件协议 电子邮件的在网络中传输和网页一样需要遵从特定的协议,常用的电子邮件协议包括 SMTP,POP3,IMAP.其中邮件的创建和发送只需要用到 SMTP协议,所以本文也只会涉及到SMTP ...

随机推荐

  1. 【索引】Objective-C基础教程-读书笔记

    第1章 启程 http://www.cnblogs.com/duxiuxing/p/5492219.html 第2章 对C的扩展 第3章  面向对象编程的基础知识 第4章 继承 第5章 复合 第6章 ...

  2. Redis教程01——命令

    APPEND key value追加一个值到key上 AUTH password验证服务器 BGREWRITEAOF 异步重写追加文件 BGSAVE 异步保存数据集到磁盘上 BITCOUNT key ...

  3. UVA 10494 (13.08.02)

    点此连接到UVA10494 思路: 采取一种, 边取余边取整的方法, 让这题变的简单许多~ AC代码: #include<stdio.h> #include<string.h> ...

  4. MyBatis完全使用指南

    MyBatis完全使用指南 转 http://www.jianshu.com/p/1c7c7d1bba33 MyBatis MyBatis作为一个轻量的SQL映射框架,确实很简单,但是知识点挺多,实际 ...

  5. git 分支策略

    转 http://www.ruanyifeng.com/blog/2012/07/git.html  作者: 阮一峰 如果你严肃对待编程,就必定会使用"版本管理系统"(Versio ...

  6. return的用处

    #include "stdio.h" main() { ,c=; ;a<;a++) { c=c+a; } printf("%d",c); return ; ...

  7. 规则引擎QLExpress的简单应用

    QLExpress 是一个轻量级的类java语法规则引擎,作为一个嵌入式规则引擎在业务系统中使用.让业务规则定义简便而不失灵活.让业务人员就可以定义业务规则.支持标 准的JAVA语法,还可以支持自定义 ...

  8. UVA - 10785 The Mad Numerologist

    题目链接 这个题又犯了省题不清的错误.导致不停 wa.唉. 题目意思是给你一个长度L,然后和一张表相应每一个大写字母的value值.你须要依照一定规则找出长度为L的序列. 注意  序列的value值要 ...

  9. hdu 3729 I'm Telling the Truth 二分图匹配

    裸的二分图匹配.需要输出方案. #include<cstdio> #include<cstring> #include<vector> #include<al ...

  10. Kruskal算法模拟讲解

    Kruskal 算法是一个求最小生成树的算法,即求最小的开销等 算法可以这样,要求得最小生成树,那么n个节点只能包括n-1条边 所以我们应该转换为寻找这最短的n-1条边,因此,可以先对所有的 边进行从 ...