JavaMail简单版实验测试

前言:

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

1.载入相关jar包

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

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

2.JavaMail代码实现

 1 package com.seasky.mail;
 2
 3 import java.util.Properties;
 4
 5 import javax.mail.Address;
 6 import javax.mail.Message;
 7 import javax.mail.MessagingException;
 8 import javax.mail.Session;
 9 import javax.mail.Transport;
10 import javax.mail.internet.InternetAddress;
11 import javax.mail.internet.MimeMessage;
12
13 public class Mail {
14
15     /**
16      * @param args
17      */
18     public static void main(String[] args) {
19
20         //属性设置,创建会话
21         Properties properties = new Properties();
22         properties.setProperty("mail.transport.protocol", "smtp");
23         Session session = Session.getInstance(properties);
24         session.setDebug(true);        //设置debug模式
25         //创建Message对象
26         Message message = new MimeMessage(session);
27         try {
28             message.setSubject("我是主题");
29             message.setFrom(new InternetAddress("[email protected]"));
30             message.setContent("<h2>我是内容</h2>", "text/html;charset=utf-8");
31
32             //创建接口,并连接(登录)
33             Transport transport = session.getTransport();
34             transport.connect("smtp.sina.com", "soft03_test", "soft03_test");
35             //发送邮件
36             transport.sendMessage(message, new Address[]{new InternetAddress("[email protected]"),
37                     new InternetAddress("[email protected]")});
38         } catch (MessagingException e) {
39             e.printStackTrace();
40         }finally{
41             System.out.println("---finish--");
42         }
43
44     }
45
46 }

登录测试邮箱查看:

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:<[email protected]>
250 ok
RCPT TO:<[email protected]>
250 ok
RCPT TO:<[email protected]>
250 ok
DEBUG SMTP: Verified Addresses
DEBUG SMTP:   [email protected]
DEBUG SMTP:   [email protected]
DATA
354 End data with <CR><LF>.<CR><LF>
From: [email protected]
Message-ID: <[email protected]>
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)!

时间: 2025-01-05 06:48:14

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

Java实现简单版SVM

最近的图像分类工作要用到latent svm,为了更加深入了解svm,自己动手实现一个简单版的. 之所以说是简单版,因为没有用到拉格朗日,对偶,核函数等等.而是用最简单的梯度下降法求解.其中的数学原理我参考了http://blog.csdn.net/lifeitengup/article/details/10951655,文中是用matlab实现的svm. 源代码和数据集下载:https://github.com/linger2012/simpleSvm 其中数据集来自于libsvm,我找了其中

C++ 简单版STL list 链表(迭代器版)

最近课程开始上设计模式了. 苦于天天满课的状态,不过题目可以放到晚上去刷. 周末师大校赛挺有趣的,题目质量好高. 花了几天写LIST,一开始就想写出 跟STL用法一样的LIST, 加个迭代器然后循环着自己用. 结果发现!!!!好多坑,有C++ 模板 C++ 符号重载等等. 不过也提高了点C++ 代码能力.感觉迭代器就是对node的封装..... #include <iostream> #include <cstdio> #include <list> #include

Django项目流程简单版

Django项目流程简单版 创建项目 一.创建Django项目 django-admin startproject 项目名 跟项目名同名的文件夹 __init__.py settings.py 暴露给用户可配置的配置文件 urls.py wsgi.py manage.py 二.创建app python3 manage.py startapp app名 app名的文件夹 migrations文件夹 数据库操作记录 __init__.py apps.py 注册app相关文件 admin.py dja

VLAN的简单配置实验

VLAN的简单配置实例(图文并茂) 一.实验环境 首先我们得有简单的实验环境:GNS3,C2691路由器 二.实验图示 如图,先建立如图所示的简单拓扑图. 注:记得给交换机设置好参数.如图<img src="http://itmc.oss-cn-hangzhou.aliyuncs.com/blog/20191018/192106829.png" alt="mark" style="zoom: 80%;" /> <img src=

分享一个近期写的简单版的网页采集器

分享一个近期写的简单版的网页采集器 功能特点: 1.可通过配置,保存采集规则. 2.可通过采集规则,进行数据采集. 3.可分页,分关键字,进行采集. 4.可保存数据至数据库,文本中. ........... 功能还比较简单,喜欢深入的可以继续深入下去,暂时还没有登录的功能,因为登录功能涉及到的范围比较广,待日后慢慢研究后再开发. 我先上个图让大家一睹为快吧: 首先看看页面,我们要采集这个网站的文章 接下来,首先是查找分页,获得分页里面的文章链接,接着查找内容页需要采集的字段,生成规则,进行采集.

MariaDB10和MySQL5.6社区版压力测试

补上作业,MariaDB10和MySQL5.6社区版压力测试,见下图: sysbench(10.8.8.43) MySQL5.6和MariaDB10.0.11(10.8.8.100) 压力测试参数: sysbench  --test=oltp --mysql-table-engine=innodb  --oltp-table-size=10000000 --max-requests=0 --max-time=900  --num-threads=512 --mysql-host=10.8.8.1

深度学习(五十四)图片翻译WGAN实验测试

图片翻译WGAN实验测试 博客:http://blog.csdn.net/hjimce/article/details/51761865 微博:黄锦池-hjimce WGAN相比于GAN的优点在于:具有更高的稳定性.在原始的WGAN中,作者通过一堆的理论,提出了WGAN,理论证明n多页,不过代码实现就两行: (1)去掉了判别网络的判别的概念,在原始的GAN中,判别网络的损失函数为最大化交叉熵损失函数: 也就是说判别网络的输出是一个0~1的概率值,用于表示图片真伪的概率. 然而在WGANs中,fw

Robot Framework 使用1-环境配置及简单网站兼容性测试(转)

0.Robot Framework 简介 Robot Framework 是一个通用的自动化测试框架,主要用于“验收测试”和“验收测试驱动开发(ATDD)” (会其它文章中会详细介绍ATDD).它使用的是表格式的测试数据语法,并且实现了关键字驱动测试策略.其测试能力可以使用测试库进行扩展,测试库可以使 用Python或Java方法进行编写,并且用户可以从现有的关键字中扩展出新的关键字. 1.环境配置 Robot Framework 是python开发的开源测试框架,在使用时,需要安装python

第一次编写简单的中间件测试工具(1) - 记一次新员工训练营

去年11月,我加入了N记,紧接着进入新员工训练营. 开始一次简单的中间件测试工具编写任务. 这次训练营体验给我的感觉就是:大公司不愧是大公司,这回我终于可以安心学点核心技术了. 任务: 这个训练营有两个任务,一是熟悉这边的敏捷开发流程:二是在训练营里做一定的编码,用python编写一个测试工具(桩,stub). 我们要做的这个工具,是用来测试我们一种通信设备(B)上运行的程序(某种中间件),这个工具模拟另一种通信设备(A),发送一些按特定协议编码的消息给另一种通信设备B,并能反编码设备B返回的消