前言:

  最近由于实现web商城的自动发送邮件功能的需求,故涉猎的邮箱协议的内部原理。现将简单版的Java Mail实例做个代码展示,并附上其中可能出现的bug贴出,方便感兴趣的读者进行测试!

1.载入相关jar包

  客户端传输邮件需要用的jar包:activation.jar和mail.jar

  (下载:https://github.com/SeaSky0606/share)

2.JavaMail代码实现

 package com.seasky.mail;

 import java.util.Properties;

 import javax.mail.Address;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage; public class Mail { /**
* @param args
*/
public static void main(String[] args) { //属性设置,创建会话
Properties properties = new Properties();
properties.setProperty("mail.transport.protocol", "smtp");
Session session = Session.getInstance(properties);
session.setDebug(true); //设置debug模式
//创建Message对象
Message message = new MimeMessage(session);
try {
message.setSubject("我是主题");
message.setFrom(new InternetAddress("soft03_test@sina.com"));
message.setContent("<h2>我是内容</h2>", "text/html;charset=utf-8"); //创建接口,并连接(登录)
Transport transport = session.getTransport();
transport.connect("smtp.sina.com", "soft03_test", "soft03_test");
//发送邮件
transport.sendMessage(message, new Address[]{new InternetAddress("123456789@qq.com"),
new InternetAddress("soft03_test@sina.com")});
} catch (MessagingException e) {
e.printStackTrace();
}finally{
System.out.println("---finish--");
} } }

登录测试邮箱查看:

3.Debug模式下打印出smtp连接建立的过程

DEBUG: setDebug: JavaMail version 1.4.1
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth false
DEBUG SMTP: trying to connect to host "smtp.sina.com", port 25, isSSL false
220 smtp-2-33.smtpsmail.fmail.yf.sinanode.com ESMTP
DEBUG SMTP: connected to host "smtp.sina.com", port: 25 EHLO CJH
250-smtp-2-33.smtpsmail.fmail.yf.sinanode.com
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-STARTTLS
250 8BITMIME
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN"
DEBUG SMTP: Found extension "AUTH=LOGIN", arg "PLAIN"
DEBUG SMTP: Found extension "STARTTLS", arg ""
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Attempt to authenticate
AUTH LOGIN
334 VXNlcm5hbWU6
c29mdDAzX3Rlc3Q=
334 UGFzc3dvcmQ6
c29mdDAzX3Rlc3Q=
235 OK Authenticated
DEBUG SMTP: use8bit false
MAIL FROM:<soft03_test@sina.com>
250 ok
RCPT TO:<123456789@qq.com>
250 ok
RCPT TO:<soft03_test@sina.com>
250 ok
DEBUG SMTP: Verified Addresses
DEBUG SMTP: 123456789@qq.com
DEBUG SMTP: soft03_test@sina.com
DATA
354 End data with <CR><LF>.<CR><LF>
From: soft03_test@sina.com
Message-ID: <535071474.0.1446284102239.JavaMail.Administrator@CJH>
Subject: =?UTF-8?B?5oiR5piv5Li76aKY?=
MIME-Version: 1.0
Content-Type: text/html;charset=utf-8
Content-Transfer-Encoding: base64 PGgyPuaIkeaYr+WGheWuuTwvaDI+
.
250 ok queue id 2476333014883
---finish--

4.常见问题:

1.出现包冲突

Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream

没有找到相关的内部类错误,即说明存在 jar包冲突!

 解决方法:

    去除开发环境的内部javaEE包,或者删除其内部java.mail下面的所有类!

2.注册的实验邮箱测试失败

535 5.7.8 authentication failed
javax.mail.AuthenticationFailedException
at javax.mail.Service.connect(Service.java:319)
at javax.mail.Service.connect(Service.java:169)
at com.seasky.mail.JMailTest.main(JMailTest.java:35)
---finish--

解决方法:

    由于实验测试邮箱可能需要开通vip,所以建议直接使用本样例中的新浪邮箱的账号密码(soft03_test/soft03_test)!

JavaMail简单版实验测试的更多相关文章

  1. 刨根问底系列(3)——关于socket api的原子操作性和线程安全性的探究和实验测试(多线程同时send,write)

    多个线程对同一socket同时进行send操作的结果 1. 概览 1.1 起因 自己写的项目里,为了保证连接不中断,我起一个线程专门发送心跳包保持连接,那这个线程在send发送数据时,可能会与主线程中 ...

  2. MySQL数据库执行计划(简单版)

    +++++++++++++++++++++++++++++++++++++++++++标题:MySQL数据库执行计划简单版时间:2019年2月25日内容:MySQL数据库执行计划简单版重点:MySQL ...

  3. 云优化的概念、Entity Framework 7.0、简单吞吐量压力测试

    云优化的概念.Entity Framework 7.0.简单吞吐量压力测试 继续上一篇<开发 ASP.NET vNext 初步总结(使用Visual Studio 2014 CTP1)>之 ...

  4. 红警大战JAVA简单版

    代码结构: 相关源码: 武器类: 属性:武器,攻击力,子弹数量. 方法:给属性赋值(set属性()方法) 获取属性值(get属性()方法) package 红警大战简单版; public class ...

  5. TOJ 3973 Maze Again && TOJ 3128 简单版贪吃蛇

    TOJ3973传送门:http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=3973 时间限制(普通 ...

  6. Go语言之进阶篇简单版并发服务器

    1.简单版并发服务器 示例1: package main import ( "fmt" "net" "strings" ) //处理用户请求 ...

  7. echarts怎么使用(最最最最简单版)(本质canvas)

    echarts怎么使用(最最最最简单版)(本质canvas) 一.总结 一句话总结:外部扩展插件肯定要写js啊,不然数据怎么进去,不然宽高怎么设置.本质都是canvas嵌套在页面上,比如div中. 1 ...

  8. 下载文件时-修改文件名字 Redis在Windows中安装方法 SVN安装和使用(简单版) WinForm-SQL查询避免UI卡死 Asp.Net MVC Https设置

    下载文件时-修改文件名字   1后台代码 /// <summary> /// 文件下载2 /// </summary> /// <param name="Fil ...

  9. Jmeter教程 简单的压力测试

    Jmeter教程 简单的压力测试:http://www.cnblogs.com/TankXiao/p/4059378.html

随机推荐

  1. Android自定义ViewGroup,实现自动换行

    学习<Android开发艺术探索>中自定义ViewGroup章节 自定义ViewGroup总结的知识点 一.自定义ViewGroup中,onMeasure理解 onMeasure(int ...

  2. React Native开发入门

    目录: 一.前言 二.什么是React Native 三.开发环境搭建 四.预备知识 五.最简单的React Native小程序 六.总结 七.参考资料   一.前言 虽然只是简单的了解了一下Reac ...

  3. docker'部署

    环境:ubuntu-14.04.4-server-amd64 1.更换阿里云源 备份源配置文件: $ sudo cp /etc/apt/sources.list /etc/apt/sources.li ...

  4. 重装win7、vs15、sqlserver08、驱动经验教训

    问自己:为什么要进行系统清洗 1.C盘已经接近爆满,vs2015无法安装. 2.C盘以前的残留软件.文件不知道如何化解,原vs2010卸载困难. 3.整个系统反应迟缓. 改进方案: 1系统C盘 2软件 ...

  5. cglib动态代理

    代理即为访问对象添加一层控制层,使其间接化,控制层可以为对象访问添加操作属性. cglib:Code Generation library, 基于ASM(java字节码操作码)的高性能代码生成包 被许 ...

  6. mysql_建立索引的优缺点 #转自Starzm#

    建立索引的优缺点: 为什么要创建索引呢? 这是因为,创建索引可以大大提高系统的性能.         第一.通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性.         第二.可以大大加 ...

  7. AP是什么

    百度链接: AP---http://baike.baidu.com/link?url=_mC-Wkgl8j1_awpuicoZk3i4MWVcLaio1nm9XRt60F9QD4V_lJ-kE7J4C ...

  8. C库函数使用与总结之时间函数

    1. localtime(取得当地目前时间和日期) [头文件]#include <time.h> [函数原型]struct tm *localtime(const time_t * tim ...

  9. MySql access denied for user错误

    MySql access denied for user错误 | 浏览:2812 | 更新:2014-11-27 11:16 MySql access denied for user错误 方法/步骤 ...

  10. PhotoShop算法原理解析系列 - 风格化---》查找边缘。

    之所以不写系列文章一.系列文章二这样的标题,是因为我不知道我能坚持多久.我知道我对事情的表达能力和语言的丰富性方面的天赋不高.而一段代码需要我去用心的把他从基本原理-->初步实现-->优化 ...